Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Max ID, wyświetlenie największej wartości
Mitop
post 30.05.2017, 21:56:40
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.05.2017

Ostrzeżenie: (0%)
-----


Witam, robię stronę i mam problem. Męczę już się nad tym z ponad godzinę. Jeśli ktoś ma chwilkę to z góry dziękuję. Popatrzcie na kod:
  1. $nazwa = $_POST['nazwa'];
  2. $wiek = $_POST['wiek'];
  3. $plec = $_POST['plec'];
  4. $zdjecie = $_POST['zdjecie'];
  5. $sql = "SELECT MAX(ID) FROM zwierzeta";
  6. if($rezultat = @$polaczenie->query($sql))
  7. {
  8.  
  9. $val = intval($rezultat->fetch_assoc())+1;
  10. $sql2="INSERT INTO `zwierzeta` (`ID`, `Nazwa`,`plec`, `Wiek`, `zdjecie`) VALUES ('$val', '$nazwa','$plec', '$wiek', '$zdjecie')";
  11. $wynik = $polaczenie->query($sql2);
  12. $_SESSION['zwierze'] = true;
  13. header("Location: panel.php");
  14. }
  15. $polaczenie->close();
  16. }


Chcę pobrać największą wartość id, żeby wiedzieć jakie ID ma być mojego zwierzaka którego chce wrzucic do baz danych. Lecz mój wynik to ciągle 1 albo 0. A kiedy w bazach danych normalnie w wierszu poleceń wpiszę to normalnie zwraca mi "6". Co zrobić, żeby moja zmienna val również przyjmowała prawidłową wartość? Co robię źlę? Pozdrawiam
Go to the top of the page
+Quote Post
Szado
post 30.05.2017, 22:40:01
Post #2





Grupa: Zarejestrowani
Postów: 22
Pomógł: 4
Dołączył: 30.05.2017

Ostrzeżenie: (0%)
-----


  1. $rezultat->fetch_assoc()

Powyższa metoda (sądząc po jej nazwie) zwraca tablicę asocjacyjną, którą Ty później rzutujesz do integera.
Go to the top of the page
+Quote Post
Mitop
post 30.05.2017, 22:47:47
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.05.2017

Ostrzeżenie: (0%)
-----


A jak wziąć zawartość?
Go to the top of the page
+Quote Post
Szado
post 30.05.2017, 22:58:37
Post #4





Grupa: Zarejestrowani
Postów: 22
Pomógł: 4
Dołączył: 30.05.2017

Ostrzeżenie: (0%)
-----


Nie wiem z jakiego rozszerzenia bazodanowego korzystasz, ale jeśli z MYSQLi to:
  1. $val = $rezultat->fetch_row();
  2. $val = $val[0];
Go to the top of the page
+Quote Post
Przemek19
post 31.05.2017, 15:50:55
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 1.02.2017
Skąd: Polska

Ostrzeżenie: (0%)
-----


mysqli_num_rows

Ten post edytował Przemek19 31.05.2017, 15:51:18
Go to the top of the page
+Quote Post
nospor
post 31.05.2017, 16:03:21
Post #6





Grupa: Moderatorzy
Postów: 36 494
Pomógł: 6304
Dołączył: 27.12.2004




@Przemek19 twoje polecenie zwraca liczbe rekordow zwroconych przez zapytanie select a nie najwieksze ID...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Mitop
post 1.06.2017, 13:38:28
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.05.2017

Ostrzeżenie: (0%)
-----


Szado dałem ci pomógł bo zadziałało, nie chciałem pisać następnego posta z podziękowaniami biggrin.gifD.. Ale jednak piszę bo mam podobny znowu problem i nie wiem ocb
  1. $wierz = $rezultat->fetch_assoc();
  2. $_SESSION['username'] = $wierz['username'];
  3. $_SESSION['gosc']=true;
  4. $_SESSION['idg']=$wiersz['ID'];
  5. //$val = $rezultat->fetch_row();
  6. //$val = $val[0];
  7. //$_SESSION['idg']=$val[0];



Czemu username normalnie wyswietla, jednak ID jest ciągle równe 0, a powinno być 1? Próbuje na różnorakie sposoby i ciągle nie wychodzi.
$_SESSION usernama działa normalnie
Jednak zmienna idg ciągle ma wartość 0 a nie 1. Jakby nie pobierało w ogole, pomoże ktoś biggrin.gif?
Go to the top of the page
+Quote Post
nospor
post 1.06.2017, 13:50:10
Post #8





Grupa: Moderatorzy
Postów: 36 494
Pomógł: 6304
Dołączył: 27.12.2004




znajdz 10 roznic:

$wierz
$wiersz


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Mitop
post 1.06.2017, 18:47:24
Post #9





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 30.05.2017

Ostrzeżenie: (0%)
-----


O kurde, serio szukałem błędu, nie że od razu na forum lecę, dzięki, bierz pomógł biggrin.gifD
Go to the top of the page
+Quote Post
nospor
post 1.06.2017, 21:30:15
Post #10





Grupa: Moderatorzy
Postów: 36 494
Pomógł: 6304
Dołączył: 27.12.2004




Wlacz wyswietlanie wszystkich bledow, to nie bedziesz musial szukac bo takie bledy beda ci sie same przed nosem wyswietlac


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Boshi
post 2.06.2017, 13:04:30
Post #11





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


Ja bym jednak odapliłe jakieś IDE które takie błędy wyłapuje bez potrzeby uruchomienia skryptu.
Go to the top of the page
+Quote Post
drogimex
post 2.06.2017, 21:24:37
Post #12





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 28.03.2016

Ostrzeżenie: (0%)
-----


Taka mała uwaga - unikaj tworzenia kolumn "id". Lepiej zrobić np. "zwierzeta_id". Przy bardziej rozbudowanych bazach odczujesz zalety takiego podejścia jeśli przyjdzie Ci robić kilka złączeń (inner, left, right join).

Po drugie Twoje założenie z pobraniem MAX(id), które za chwilę używasz z insert jest mocno ryzykowne... A co jeśli w tej samej sekundzie dojdzie do dwóch wywołań Twojego skryptu?

Czy nie lepiej po prostu zwierzeta_id ustawić jako AUTO_INCREMENT z PRIMARY KEY i przy insert wskazywać wartość NULL, albo w ogóle pomijać to? Wtedy zawsze masz pewność, że wstawisz unikalny kolejny i unikalny ID bo zrobi to za Ciebie silnik bazy a nie PHP.
Go to the top of the page
+Quote Post
nospor
post 2.06.2017, 21:36:32
Post #13





Grupa: Moderatorzy
Postów: 36 494
Pomógł: 6304
Dołączył: 27.12.2004




Cytat
Taka mała uwaga - unikaj tworzenia kolumn "id". Lepiej zrobić np. "zwierzeta_id". Przy bardziej rozbudowanych bazach odczujesz zalety takiego podejścia jeśli przyjdzie Ci robić kilka złączeń (inner, left, right join).
Wlasnie nie. Tworzenie sztucznej nazwy dla id jest bez sensu. Skoro wie, ze jest w tabeli zwierzeta to id dotyczy zwierzeta. Tylko zbedne wydluzanie nazwy. Nie wiem jaka zalete widzisz w swoim rozwiazaniu przy zlaczeniach


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.07.2024 - 16:32