Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]dziwna reakcja insert
Forum PHP.pl > Forum > Przedszkole
jacusek
Witam.
Wcześniej już pisałem na temat insertu do mysql i częściowo udało mi się problem rozwiązać. No właśnie niestety częściowo. Dopisałbym to do tamtego tematu ale niestety nie mogę sam sobie odpowiedzieć na posta smile.gif
Wcześniej chodziło o to, że tabela, którą mam nie zapełniała się wszystkimi danymi z bazy na podstawie kodu php.
Oto tabela:
  1. CREATE TABLE `wizyta_test` (
  2. `ID_WIZ` int(9) NOT NULL AUTO_INCREMENT,
  3. `ID_PAC` int(9) UNSIGNED NOT NULL,
  4. `ID_LEK` int(3) NOT NULL,
  5. `ID_BAD` int(3) NOT NULL,
  6. `TERMIN` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  7. `NEW` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  8. PRIMARY KEY (`ID_WIZ`)
  9. ) ENGINE=InnoDB AUTO_INCREMENT=41921 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

oraz kod dodający do bazy
  1. <?php
  2. include('connect2.php');
  3. $pytanie='select max(id_pac) from pacjenci';
  4. $max_pac=mysqli_query($mysqli,$pytanie) or die(mysqli_error($mysqli));
  5.  
  6. //jeżeli pacjent ma już id
  7. if ($_GET['id_pac']<$max_pac){
  8. $query1 = 'insert into wizyta_test (id_pac,id_lek, id_bad, termin, new) values
  9. ( "'.$_GET['id_pac'].'", "'.$_GET['id_lek'].'","'.$_GET['ID_BAD'].'", "'.$_GET['termin'].'",now())';
  10. $result1=mysqli_query($mysqli,$query1) or
  11. die(mysqli_error($mysqli));
  12. }
  13. if ($_GET['id_pac']==""){
  14. $query = 'insert into pacjenci (PESEL, nazwisko, imie, miasto, kod, adres, tel, tel_kom, rok_ur) values
  15. ("'.$_GET['PESEL'].'","'.$_GET['nazwisko'].'","'.$_GET['imie'].'",
  16. "'.$_GET['miasto'].'","'.$_GET['kod'].'",
  17. "'.$_GET['adres'].'","'.$_GET['tel'].'","'.$_GET['tel_kom'].'","'.$_GET['rok_ur'].'")';
  18. $result=mysqli_query($mysqli,$query)
  19. or die(mysqli_error($mysqli));
  20. }
  21. $query2 = 'insert into wizyta_test (id_pac, id_lek, id_bad, termin, new) values
  22. ((SELECT max(id_pac) from pacjenci),"'.$_GET['id_lek'].'","'.$_GET['ID_BAD'].'", "'.$_GET['termin'].'", now())';
  23. $result1=mysqli_query($mysqli,$query2) or
  24. die(mysqli_error($mysqli));
  25. header('location:menu.html');
  26. ?>

Teraz kod dodaje dwie linijki do tabeli. Pierwsza jest ze wszystkimi pożądanymi danymi poza ID_PAC, natomiast druga linijka jest w całkowitym porządku. Proszę o pomoc sciana.gif
Tak wyglądają linijki po wykonaniu zapytania.
ID_WIZ | ID_PAC | ID_LEK | ID_BAD | TERMIN | OBECNOŚĆ | NEW | UPDATE |
+--------+--------+--------+--------+---------------------+----------+---------------------+--------+
41925 | 0 | 2 | 1 | 2009-12-08 16:40:00 | NULL | 2009-12-06 20:45:55 | NULL |
| 41926 | 91 | 2 | 1 | 2009-12-08 16:40:00 | NULL | 2009-12-06 20:45:55 | NULL |
blooregard
  1. $pytanie='select max(id_pac) from pacjenci';
  2. $max_pac=mysqli_query($mysqli,$pytanie) or die(mysqli_error($mysqli));
  3.  
  4. //jeżeli pacjent ma już id
  5. if ($_GET['id_pac']<$max_pac){
  6. ....

Nie wyciągasz $max_pac z rezultatu wykonania zapytania, tylko podstawiasz cały wynik, którym jest #Resource, a tego nie porównasz ze zmienną z GET-a, więc masz FALSE (jedno zapytanie - $query1), a potem jeszcze raz to na końcu - $query2.
No i ponieważ nie wyciągasz prawidłowo $max_pac, w pierwszym zapytaniu nic Ci nie wstawi w pole ID_PAC.
jacusek
No właśnie przerobiłem trochę skrypt, ale chyba nie o to do końca chodziło. Jestem cały czas początkującym i mogę nie wszytko rozumieć o co chodzi. Skrypt wygląda w ten sposób.
  1. <?php
  2. include('connect2.php');
  3. $pytanie='select max(id_pac) as id_pac from pacjenci';
  4. $res=mysqli_query($mysqli,$pytanie) or die(mysqli_error($mysqli));
  5. $max=mysqli_fetch_row($res);
  6.  
  7. //jeżeli pacjent ma już id - przeniesione dane z wyszukiwarki
  8. if ($_GET['id_pac']<$max){
  9. $query1 = 'insert into wizyta_test (id_pac,id_lek, id_bad, termin, new) values
  10. ( "'.$_GET['id_pac'].'", "'.$_GET['id_lek'].'","'.$_GET['ID_BAD'].'", "'.$_GET['termin'].'",now())';
  11. $result1=mysqli_query($mysqli,$query1) or
  12. die(mysqli_error($mysqli));
  13. }
  14. if ($_GET['id_pac']==""){
  15. $query = 'insert into pacjenci (PESEL, nazwisko, imie, miasto, kod, adres, tel, tel_kom, rok_ur) values
  16. ("'.$_GET['PESEL'].'","'.$_GET['nazwisko'].'","'.$_GET['imie'].'",
  17. "'.$_GET['miasto'].'","'.$_GET['kod'].'",
  18. "'.$_GET['adres'].'","'.$_GET['tel'].'","'.$_GET['tel_kom'].'","'.$_GET['rok_ur'].'")';
  19. $result=mysqli_query($mysqli,$query)
  20. or die(mysqli_error($mysqli));}
  21. $pytanie1='SELECT max(id_pac) as id_pac from pacjenci';
  22. $max_pac1=mysqli_query($mysqli,$pytanie1) or die(mysqli_error($mysqli));
  23. $pacjent = mysqli_fetch_assoc($max_pac1);
  24. $pac = $pacjent['id_pac'];
  25. $query2 = 'insert into wizyta_test (id_pac, id_lek, id_bad, termin, new) values
  26. ("'.$pac.'","'.$_GET['id_lek'].'","'.$_GET['ID_BAD'].'", "'.$_GET['termin'].'", now())';
  27. $result1=mysqli_query($mysqli,$query2) or
  28. die(mysqli_error($mysqli));
  29. header('location:menu.html');
  30. ?>

Ale błąd dalej pozostał. Może ktoś sprawdzić czy o to chodziło. Wciąż wstawia dwa wiersze sciana.gif A siedzę nad tym już drugi dzień sciana.gif

Cytat
No i ponieważ nie wyciągasz prawidłowo $max_pac, w pierwszym zapytaniu nic Ci nie wstawi w pole ID_PAC.

No właśnie to mi działa z tego zapytania. Sa to dane, które przechodzą do formularza z wyszukiwarki. Woęc tutaj nie mam już pomysłu co jest nie tak:(.
blooregard
Powtarzasz ten sam błąd:

  1. $res=mysqli_query($mysqli,$pytanie) or die(mysqli_error($mysqli));
  2. $max=mysqli_fetch_row($res); <<----------- TU MASZ ŹLE
  3.  
  4. //jeżeli pacjent ma już id - przeniesione dane z wyszukiwarki
  5. if ($_GET['id_pac']<$max){
  6. ...


zobacz, jak to powinno wyglądać:
http://pl.php.net/mysqli_fetch_row

Chodzi o to, że Twoja zmienna $max nie może być tablicą, ale konkretną wartością z tej tablicy. Zanim przypiszej jej wartość, musuisz tę wartość z tej tablicy (czyli u Ciebie z $res) wyciągnąć.
jacusek
Jest takie ładne rosyjskie przysłowie- "Ranek jest mądrzejszy od wieczora" rolleyes.gif . Teraz wszystko działa. Dzięki za pomoc. Taka nie bezpośrednia bywa nawet lepsza smile.gif.
Dodałem takie linijki - jakby jakiś inny mało doświadczony użytkownik jak ja miał problem smile.gif

  1. $pytanie='select max(id_pac) as id_pac from pacjenci';
  2. if ($res=mysqli_query($mysqli,$pytanie)){
  3. while ($row=mysqli_fetch_row($res))
  4. $max=$row['id_pac'];}

i dalej już tak samo.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.