Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]Nietypowo działający skrypt
jacusek
post
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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.
Go to the top of the page
+Quote Post
jacusek
post
Post #3





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


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ąć.
Go to the top of the page
+Quote Post
Pilsener
post
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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
Go to the top of the page
+Quote Post
mortus
post
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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!
Go to the top of the page
+Quote Post
jacusek
post
Post #6





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


Dzięki. Ta ostatnia rada zadziałała smile.gif. Ale jeszcze dodatkowo próbuję się przedrzeć przez pronlem walidacji.
Go to the top of the page
+Quote Post
mortus
post
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.
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 Aktualny czas: 21.08.2025 - 14:17