• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego zamiast id od 1 pokazuje mi od 20 ? (Czy coś się zapętliło ?)

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
210 wizyt
pytanie zadane 13 marca 2020 w PHP przez Dariusz Hozer Użytkownik (920 p.)
<form action="" method="POST" id="rekord">
         
    POMPKI: <input type="text" name="wiadomosc" id="poles"></br></br>
   
    <input type="submit">
    </form>

<?php   

$message=$_POST["wiadomosc"];

 
        $connection= mysqli_connect('127.0.0.1','root','','baza');

          if($connection->connect_errno){
              echo('no connection with data base ');
          }else{
              echo('connection data base');
          }


// tworzymy tablicę w bazie danych :)

 
$sql = "CREATE TABLE tabela (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    pompki INT NOT NULL,
    przysiady INT NOT NULL,
    podciaganie INT NOT NULL,
    bicki INT NOT NULL)";
    
    if ($connection->query($sql) === TRUE) {
        echo "Table created successfully";
    } else {
        echo "<br> It's problem :) " . $connection->error;
    }
      
  
 //po wstawieniu nazwy bazy danych w $connection i w tworzonej tabeli należy odswieżyć stronę www 
 //a potem odswieżyć w phpmyadmin:) 

//-------------------------------------------------------------------------------------------------

//Tworzymy wiersz w bazie danych o nazwie "baza" i nazwie tabeli "tab". Też gdy dodajemy kolejny wiersz wystarczy zmienić 
//nazwę, nie trzeba na nowo pisać kodu, gdyż po dodaniu do bazy danych wiersz już tam jest !! :) Kod do połączenia jest na
//db_record;

include ('db_record.php') ;
//require ('text_in_html.php'); - to na razie wyłączone
?>


<?php

$message=$_POST["wiadomosc"];
$identity=0;


while($message===TRUE){

    $identity++;

}

$sql="INSERT INTO tabela (id,pompki,przysiady,podciaganie,bicki) VALUES ('$identity' ,'$message', '1','2','3')"; 

   
if ($connection->query($sql) === TRUE) {
    echo "Table created successfully";
} else {
    echo "gówno nie wpis ! :) " . $connection->error;
}



 
?>

Ten drugi kod jest z osobnego pliku db_record.php.

 

Problem polega na tym, że po stworzeniu przeze mnie pętli while dla id (by kolejno dodawał numer id do kolejno dodawanego wpisu pokazuje mi od 20 ? Poniżej obrazek wkleiłem: 


1 odpowiedź

+1 głos
odpowiedź 14 marca 2020 przez grollajt Bywalec (2,860 p.)
wybrane 19 marca 2020 przez Dariusz Hozer
 
Najlepsza

Jeżeli dobrze rozumie założenia to:
1. Tworząc tabele zrobiłeś by id było AUTO_INCREMENT

  
$sql = "CREATE TABLE tabela (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    pompki INT NOT NULL,
    przysiady INT NOT NULL,
    podciaganie INT NOT NULL,
    bicki INT NOT NULL)";

dlatego w insercie nie musisz podawać id same się dodadzą dzięki właśnie AUTO_INCREMENT 

Dlatego usuń dziwna pętle a insert sql zamień na 

$sql="INSERT INTO tabela (pompki,przysiady,podciaganie,bicki) VALUES ('$message', '1','2','3')";

zainteresuj się też bindowaniem parametrów do bazy danych (https://www.php.net/manual/en/mysqli-stmt.bind-param.php lub przejściem ogólnie na PDO https://www.php.net/manual/en/pdo.construct.php )


2. Nie do końca też wiesz co chcesz przekazać przez zmienną

$_POST["wiadomosc"]

w formularza używasz typu text(to można zostawić bo to tylko widok), nazwa zmiennej to "wiadomosc": sugerująca treść a nie int, kolumnę dla pompek zrobiłeś jako int

pompki INT NOT NULL,

a w dziwnej pętli przyrównujesz do bool

while($message===TRUE){
 
    $identity++;
 
}

ps. Gdy usuwasz rekordy z tabeli zapamiętuje ona ostatnie dodane id (opróżniaj lub usuwaj tabele by zaczynać od początku) przykład dodajesz 10 rekordów(id 1-10) gdy je usuniesz i spróbujesz dodać nowy to będzie on z id 11

komentarz 19 marca 2020 przez Dariusz Hozer Użytkownik (920 p.)
Dzięki :) Już przestudiowałem SQL i połapałem się nim tu wszedłem zobaczyć pomoc :) Zrobiłem to samo, tylko że w PDO :) I problem mam z  odświeżaniem(po każdym odświeżeniu strony zwraca mi się ostatni post. Chciałem postawić warunek, że jeżeli pole formularza będzie puste to nie pobierze (ŻADNEGO) rekordu (w postaci wyłączenia dostępu do bazy danych  baza->close() i guzik  :)

Podobne pytania

0 głosów
1 odpowiedź 928 wizyt
0 głosów
1 odpowiedź 70 wizyt
pytanie zadane 18 listopada 2021 w SQL, bazy danych przez Jacek Śmiel Użytkownik (510 p.)
0 głosów
1 odpowiedź 695 wizyt
pytanie zadane 23 września 2017 w JavaScript przez Vorex444 Dyskutant (9,610 p.)

91,291 zapytań

139,959 odpowiedzi

315,210 komentarzy

60,740 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...