Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Nietypowo działający skrypt
Forum PHP.pl > Forum > Przedszkole
jacusek
Witam.
Mam taki skrypt wysyłający dane z formularza do bazy
  1. <?php
  2. include('connect2.php');
  3. include('cookie.php');
  4. if(empty($_GET['nazwisko'])||empty($_GET['imie'])||empty($_GET['id_lek'])||empty($_GET['miasto'])
  5. ||empty($_GET['termin'])){
  6. die(
  7. "<center><b>!!!!SPRAWDŹ CZY WYPEŁNIŁEŚ WSZYSTKIE OBOWIĄZKOWE POLA!!!!</b></center>
  8. <center><h2><a href=\"pacjent.php\">WRÓC DO FORMULARZA</a></h2></center>");
  9. }
  10. if(!empty($_GET['PESEL'])){
  11. if((is_numeric($_GET['PESEL'])==false)||(strlen($_GET['PESEL'])<11)){
  12. die("PESEL MA NIEPRAWIDŁOWY FORMAT LUB JEST ZA KRÓTKI<br/>");
  13. }
  14. }
  15. if(!empty($_GET['tel'])){
  16. if((is_numeric($_GET['tel'])==false)||(strlen($_GET['tel'])<9)){
  17. die("NUMER TELEFONU MA NIEPRAWIDŁOWY FORMAT LUB JEST ZA KRÓTKI<br/>");
  18. }
  19. }
  20. if(!empty($_GET['tel_kom'])){
  21. if((is_numeric($_GET['tel_kom'])==false)||(strlen($_GET['tel_kom'])<9)){
  22. die("NUMER TELEFONU KOMÓRKOWEGO MA NIEPRAWIDŁOWY FORMAT LUB JEST ZA KRÓTKI<br/>");
  23. }
  24. }
  25.  
  26. else{
  27. //pacjent bez PESEL
  28. if (empty($_GET['PESEL'])){
  29. $query = 'insert into pacjenci (PESEL,nazwisko, imie, miasto, adres, tel, tel_kom, rok_ur,wizyta,id_lek) values
  30. (NULL,"'.$_GET['nazwisko'].'","'.$_GET['imie'].'",
  31. "'.$_GET['miasto'].'",
  32. "'.$_GET['adres'].'","'.$_GET['tel'].'","'.$_GET['tel_kom'].'","'.$_GET['rok_ur'].'","'.$_GET['termin'].'",
  33. "'.$_GET['id_lek'].'")';
  34. $result=mysqli_query($mysqli,$query)
  35. or die(mysqli_error($mysqli));
  36. }
  37. //pacjenct z PESEL
  38. if(!empty($_GET['PESEL']))
  39. {
  40. $query2 = 'insert into pacjenci (PESEL, nazwisko, imie, miasto, adres, tel, tel_kom, rok_ur,wizyta,id_lek) values
  41. ("'.$_GET['PESEL'].'","'.$_GET['nazwisko'].'","'.$_GET['imie'].'",
  42. "'.$_GET['miasto'].'",
  43. "'.$_GET['adres'].'","'.$_GET['tel'].'","'.$_GET['tel_kom'].'","'.$_GET['rok_ur'].'","'.$_GET['termin'].'",
  44. "'.$_GET['id_lek'].'")';
  45. $result=mysqli_query($mysqli,$query2)
  46. or die(mysqli_error($mysqli));
  47. }
  48. }
  49. $query3='call pac()';
  50. $result3=mysqli_query($mysqli,$query3);
  51. $query4='call plec()';
  52. $result4=mysqli_query($mysqli,$query4);
  53. echo "<center><h2><a href=\"menu.php\">Wróć do MENU</a></h2></center>";
  54. echo "<center><h2><a href=\"pacjent.php\">Wpisz Kolejnego Pacjenta</a></h2></center>";
  55. ?>

No właśnie. Jak loguje się i korzystam z formularza to wpisuje mi rekord do bazy, natomiast już następnego już nie i kompletnie nie wiem dlaczego. Kombinowałem coś z cookies, ale też to nie to. Procedury też wyłączałem, ale to również nie to. Obsługa błędów włączona jak widać, ale po wypełnieniu formularza też nie pokazuje żadnych błędów.
Co mogę jeszcze przejrzeć i gdzie mogę mieć błąd.
Pilsener
1. Co za pomysł wysyłać dane przez GET? Formularze wysyła się przez POST!
2. Waliduj i filtruj zmienne, bo ktoś Ci nawet przez nieuwagę rozwali bazę w kilka minut
3. Co do problemu - prawdopodobnie zapytania w ogóle się nie wykonują, bo te warunki:
  1. else{
  2. //pacjent bez PESEL
- nie są spełnione. Daj echo "test" gdzieś przy zapytaniu by dowiedzieć się, czy się w ogóle wykonuje. Jeśli nie, to przemyśl konstrukcję skryptu jeszcze raz.

Po co Ci tyle ifów? Podziel ten kod jakoś funkcjonalnie, bo obecnie jest nieczytelny.
jacusek
Właśnie problem polega na tym, że pytania się wykonują ale tylko raz. I tutaj leży główny problem. $_GET zostanie później zmieniony, ale chce na razie widzieć czy czasami nie ma jakiegoś problemu w przesyle. Bo na razie to wszystko działa w środowisku testowym.
Na razie jestem początkujący i nie bardzo mam pomysł jak te ify ominąć.
Pilsener
Musisz podzielić kod na sekcje:
  1. //odbieranie i walidacja danych - sekcja 1
  2. if(!empty($_POST)){ //jeśli formularz został wysłany, odbieramy dane
  3. if(poprawny_pesel($_POST['pesel'])){ //sprawdzamy poprawność danych i je walidujemy
  4. $pesel = '';
  5. }else{
  6. $error = 'zły pesel';
  7. }
  8. }
  9.  
  10. //dodawanie danych do bazy, sekcja 2
  11. if(!empty($_POST) && empty($error)){ //jeśli formularz został wysłany i nie ma błędów
  12. if(!mysqli_query($query)){$error = mysqli_error();}
  13. }
  14.  
  15. //wyświetlanie formularzy, komunikatów itp. - sekcja 3
  16. //tu wyświetlisz formularz i komunikat błędu lub komunikat o sukcesie operacji
- poczytaj o walidacji danych (standardowych i takich jak PESEL), było wiele razy na forum
mortus
Przede wszystkim zauważ, że Twoje zapytania wykonują się tylko wtedy, kiedy podasz prawidłowy numer telefonu komórkowego. Winę za to ponosi blok else rozpoczynający się w 26 linii i kończący się w linii 48. Może po prostu usuń else razem z nawiasami i zobacz, co się stanie. Możesz to zrobić dlatego, że podczas sprawdzania warunków w przypadku niepowodzenia używasz funkcji die(). Oczywiście jestem za wysyłaniem formularza metodą post, a nie get!
jacusek
Dzięki. Ta ostatnia rada zadziałała smile.gif. Ale jeszcze dodatkowo próbuję się przedrzeć przez pronlem walidacji.
mortus
Cytat(mortus @ 25.02.2010, 12:23:20 ) *
Przede wszystkim zauważ, że Twoje zapytania wykonują się tylko wtedy, kiedy podasz prawidłowy numer telefonu komórkowego. Winę za to ponosi blok else rozpoczynający się w 26 linii i kończący się w linii 48. Może po prostu usuń else razem z nawiasami i zobacz, co się stanie. Możesz to zrobić dlatego, że podczas sprawdzania warunków w przypadku niepowodzenia używasz funkcji die(). Oczywiście jestem za wysyłaniem formularza metodą post, a nie get!

Sprostowanie: Zapytania wykonują się tylko wtedy, kiedy nie podasz numeru telefonu komórkowego!
Jeśli masz jeszcze jakieś pytania, to po prostu pytaj.
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.