Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błędne zwracanie wartości zmiennej
Forum PHP.pl > Forum > PHP
attimo
  1. <?php
  2. if($_POST)
  3. {
  4. $name = $_POST['name'];
  5. $last_name = $_POST['last_name'];
  6. $login = $_POST['login'];
  7. $email = $_POST['email'];
  8. $polaczenie = mysql_connect('', '', '');
  9. if($polaczenie) {
  10. $baza = mysql_select_db('',$polaczenie);
  11. if($baza) {
  12. mysql_query("SET NAMES utf8");
  13. mysql_query("SET CHARACTER_SET utf8_polish_ci");
  14. if($_POST['name'] == '') {
  15. $data['name_empty'] = false;
  16. $data['success'] = false;
  17. $data['message_name_empty'] = "Musisz wpisac imie!";
  18. }
  19. else {
  20. $data['name_empty'] = true;
  21. $data['success'] = true;
  22. }
  23.  
  24. if($last_name == '') {
  25. $data['last_name_empty'] = false;
  26. $data['success'] = false;
  27. $data['message_last_name_empty'] = "Musisz wpisac nazwisko!";
  28. }
  29. else {
  30. $data['last_name_empty'] = true;
  31. $data['success'] = true;
  32. }
  33.  
  34. if($login == '') {
  35. $data['login_empty'] = false;
  36. $data['success'] = false;
  37. $data['message_login_empty'] = "Musisz wpisac login!";
  38. }
  39. else {
  40. $data['login_empty'] = true;
  41. $data['success'] = true;
  42. }
  43.  
  44. if($email == '') {
  45. $data['email_empty'] = false;
  46. $data['success'] = false;
  47. $data['message_email_empty'] = "Musisz wpisac email!";
  48. }
  49. else {
  50. $data['email_empty'] = true;
  51. $data['success'] = true;
  52. }
  53.  
  54. if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) {
  55. $data['email_check'] = false;
  56. $data['success'] = false;
  57. $data['message_email_check'] = "Wpisany email jest nieprawidlowy!";
  58. }
  59. else {
  60. $data['email_check'] = true;
  61. $data['success'] = true;
  62. }
  63. if (mysql_num_rows(mysql_query("SELECT login FROM test WHERE login = '".$login."'")) > 0) {
  64. $data['login_check'] = false;
  65. $data['success'] = false;
  66. $data['message_login_check'] = "Podany login jest juz zajety!";
  67. }
  68. else {
  69. $data['login_check'] = true;
  70. $data['success'] = true;
  71. }
  72.  
  73. if($data['success'] == true) {
  74. $zapytanie = "INSERT INTO test (IDtest, nazwisko, imie, login, email) VALUES ('','$last_name','$name' ,'$login','$email')";
  75. mysql_query($zapytanie);
  76. $data['message_success'] = "Rejestracja przebiegla pomyslnie";
  77. }
  78. }
  79. else {
  80. echo "nie wybrano bazy, blad". mysql_error();
  81. }
  82. }
  83. else {
  84. echo "brak polaczenia: ".mysql_error();
  85. }
  86. echo json_encode($data);
  87. }
  88. ?>



$data['success'] problem leży w tej zmiennej. Błędnie zwraca mi prawde choć w warunkach jest raczej jasno napisane, że jeśli coś jest źle wpisane powinna przyjąć wartość false. niestety tak nie jest i nie mam pojęcia dlaczego.
l0ud
Sprawdzaj w każdym warunku czy $data['success'] już nie jest równa false, bo tak jednym spełnionym warunkiem możesz 'nadpisać' wszystkie poprzednie.
To tyle na pierwszy rzut oka... I nie widzę miejsca, gdzie deklarujesz $data (choć nie jest to obowiązkowe, wypadałoby zrobić to wcześniej...)
Armstrong
instrukcję if zamieniłbym na elseif najprawdopodobniej warunek jeden jest spełniony i nadpisuje na true.

Nie analizowałem dogłębniej kodu!
attimo
Próbowałem to zmienić na wszelkie możliwe sposoby i zawsze coś jest nie tak sad.gif. Problem jest taki, że jeśli pole login lub email jest tylko wypelnione niekoniecznie dobrze to succes przyjmuje wartosc true chociaz tak byc nie powinno probowalem zastosowa elseif ale tez nie zadzialalo

Zmienną data['success'] zastąpiłem jednym złożonym warunkiem:
  1. if($data['name_empty'] && $data['last_name_empty'] && $data['login_empty'] && $data['email_empty'] && $data['email_check'] && $data['login_check'])

I działa jak należy smile.gif
nospor
l0ud napisał ci dobrze. Widocznie źle wcieliles w zycie jego słowa winksmiley.jpg
Teraz gdy dodasz nowe warunki sprawdzania to bedziesz musial pamietac by zmodyfikowac swojego ifa
słow Armstronga nie bierz pod uwagę - jak sam napisał nie analizował kodu i teraz wypisuje trzy po trzy winksmiley.jpg
attimo
Zdałem sobie sprawę, że tak się dzieje, ale nie potrafiłem temu zapobiec więc wymyśliłem tego wielkiego ifa i zdaje sobie sprawe, że jeśli dodam jakiś warunek będe musiał też go zmodyfikować. I tak się ciesze bo w końcu to zrobiłem i działa poprawnie, natomiast zdaje sobie sprawe, że jest to pisane mało profesjonalnie.
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.