Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] poprawne zapisanie if i else
Forum PHP.pl > Forum > Przedszkole
pijanyadmin
odbieram z formularza dane które sa wykonywane poprzez plik:

  1. <?php 
  2. // odbieramy dane z formularza 
  3. $dologowania = $_POST["user"]; // loginnazwa
  4. $loginpass = $_POST['pass'];
  5.  
  6.  
  7. //połączenie z bazą 
  8.  include("connect.php");
  9.  
  10.  /sprawdzanie loginu w bazie
  11. $waliduser = mysql_query("SELECT * FROM userdata WHERE loginkod = '$loginnazwa'");
  12. $waliduserkom = mysql_num_rows($waliduser);
  13.  
  14. if (!$waliduserkom == 1) {
  15.  }
  16.  
  17. else {
  18. echo 'Nazwa użytkownika <b>'.$dologowania.'</b> już istnieje.<BR>Wybierz inna nazwe';
  19.  
  20.  
  21. }
  22.  
  23. //sprawdzamy pole dologowania
  24. if (strlen($dologowania)<3 or strlen($dologowania)>50 or !eregi("^[a-zA-Z0-9_.]+$",$dologowania)) { 
  25.  
  26. }
  27.  
  28.  else {
  29. echo 'Login zawiera niepoprawne znaki lub jest ich za mała ilośc.<br>';
  30. } 
  31.  
  32. //sprawdzamy pole haslo
  33. if (strlen($loginpass)<6 or strlen($loginpass)>50) { 
  34.  
  35. }
  36.  
  37.  else {
  38. echo 'Hasło zawiera niepoprawne znaki lub jest ich za mała ilośc.<br>';
  39. } 
  40.  
  41.  
  42. //sprawdzanie czy pola zostały wypełnione
  43. if(empty($_POST['user'])) {
  44.  
  45. }
  46.  
  47.  else {
  48. echo 'Polę Login niezostało wypełnione';
  49. }
  50.  
  51. if(empty($_POST['pass'])) {
  52.  
  53. }
  54.  
  55.  else {
  56. echo 'Polę Hasło niezostało wypełnione';
  57. }
  58.  
  59. //dodanie do bazy
  60.  
  61.  
  62. $loinid = mysql_query("SELECT * FROM userdata");
  63. $loginids = mysql_num_rows($loinid);
  64.  
  65. $loginnr = $loginids + 1;
  66.  
  67. mysql_query("INSERT INTO userdata VALUES ('$loginnr','$dologowania','$loginnazwa','$loginpass','$data','$adresip')");
  68.  
  69. echo "Użytkownik <b>". $dologowania ."</b> został zarejestrowany.<BR>Data rejestracji: ".$data.".";
  70.  
  71.  
  72. ?>


Niestety coś jest nie tak, jeśli jeden if niezostanie spełniony skrypt wykonuje sie dalej, ale jesli np login bedzie juz w bazie, to i tak jest dodawany nawet nie zostanie sprawdzone pole hasło. Jak zapisać to poprawnie aby były sprawdzane wszytkie if'y jeśli jakiś jest wpełniony niepoprawnie, wyświetlaja sie komunikaty gdzie a skrypt doda wynik dopiero gdy wszytko bedzie spełnione?
tsharek
stwórz sobie jakąś flagę, którą na początku będzie true, a w przypadku błedu zamiast "exit" ustawi ją na false. Później przy wpisie do bazy danych robisz sprawdzenie tej flagi i jeżeli jest true to znaczy że jest ok, a inaczej nie dodajesz do bazy, proste:)
pijanyadmin
tzn? jak to zrobić?
Gonzo44
zamiast exit daj $flaga_bledu = 1 i wtedy na koncu dajesz if( $flaga_bledu = 0) i tu dopisanie do bazy
tsharek
Cytat(pijanyadmin @ 24.10.2007, 14:29:21 ) *
tzn? jak to zrobić?

W tym forum nie znajdziesz gotowej odpowiedzi. Możmy Cię jedynie nakierować.
pijanyadmin
  1. <?php
  2. $result = False;
  3.  
  4.  
  5. if($submit)
  6. {
  7.   if (!$_POST['user'] || !$_POST['pass'])
  8.   {
  9.    echo "Wszystkie pola sš obowišzkowe.";
  10.   }
  11.   elseif (strlen($loginpass)<6 or strlen($loginpass)>50)
  12.   {
  13.    echo "<font color=\"#000000\">Hasło musi mieć od 6 do 50 znaków.</font><br>";
  14.   }
  15.   elseif (!eregi("^[_[:alnum:]-]{3,10}$", $_POST['pass']))
  16.   {
  17.    echo "Niepoprawne hasło.";
  18.   }
  19.   elseif ($waliduserkom == 1)
  20.   {
  21.    echo "Nazwa użytkownika ".$dologowania." już istnieje.<BR>Wybierz inna nazwe"; 
  22.   }
  23.   elseif (!$user->add_user (strtolower ($_POST['user']), md5 ($_POST['pass'])))
  24.   {
  25.  
  26.  
  27.   }
  28.   else
  29.   {
  30.    $result = True;
  31.    //dodanie do bazy
  32. $loinid = mysql_query("SELECT * FROM userdata");
  33. $loginids = mysql_num_rows($loinid);
  34. $loginnr = $loginids + 1;
  35.  
  36. mysql_query("INSERT INTO userdata VALUES ('$loginnr','$dologowania','$loginnazwa','$loginpass','$data','$adresip')");
  37.  
  38. echo "Użytkownik <b>". $dologowania ."</b> został zarejestrowany.<BR>Data rejestracji: ".$data.".";
  39.   }
  40. }
  41. ?>



chodzi o coś takiego? jednak to nie zabardzo działa...
Regyam
Podam tylko kawalek:
  1. <?php
  2. if(empty($_POST['user'])) {
  3.  
  4. }
  5.  
  6.  else {
  7. echo 'Polę Login niezostało wypełnione';
  8. }
  9. ?>

zamiast tego np to:
  1. <?php
  2. if(empty($_POST['user'])) {
  3.  
  4. }
  5.  
  6.  else {
  7. echo 'Polę Login niezostało wypełnione';
  8. $blad = '1';
  9. }
  10. ?>


A przy wpisie do bazy:
  1. <?php
  2. if($blad != 1){
  3. WYKONAJ ZAPYTANIE DO BAZY
  4. }else{
  5. echo 'blad';
  6. }
  7. ?>



Apropo twojego kodu to nie rozumiem kompletnie tego:
  1. <?php
  2. $loinid = mysql_query("SELECT * FROM userdata");
  3. $loginids = mysql_num_rows($loinid);
  4. $loginnr = $loginids + 1;
  5. ?>

Przeciez wystarczylo by w tabeli w bazie dac loginid jako klucz i samo by sie ustawialo na nastepne a nie tak manualnie bo jak dwoch userow siadzie na stronie i bedzie chcialo sie zarejestrowac i jeden wejdzie a drugie bedzie wlasnie wpisywal dane to bedziesz mial takie same id userow. Tzn w przypadku twojego kodu jak tam zastosujesz ifa jak ci podalem i wezmiesz to w klamre to tak sie nie powinno przydazyc ale lepiej zrob jak powiedzialem.
pijanyadmin
  1. <?php 
  2. // odbieramy dane z formularza 
  3.  
  4. $login = $_POST["login"];
  5. $haslo = $_POST['haslo'];
  6. $haslo2 = $_POST['haslo2'];
  7. $email = $_POST['email'];
  8.  
  9. //pobieranie adresu IP
  10. $adresip = $_SERVER["REMOTE_ADDR"];
  11.  
  12. //data dodania rekordu
  13. $data = date("H:i:s d-m-Y");
  14.  
  15. //zmiana liter na małe
  16. $login=strtolower($login);
  17.  
  18. //walidacja loginu, czarna lista
  19. $sprlogin = array('admin', 'administrator', 'admini', 'root', 'bin', 'daemon', 'adm', 'lp', 'sync', 'shutdown', 
  20. 'halt', 'mail', 'news', 'uucp', 'operator', 'games', 'mysql', 'httpd', 'nobody', 'dummy', 'www', 
  21. 'cvs', 'shell', 'ftp', 'irc', 'debian', 'ns', 'download',
  22.  ' ') ;
  23.  
  24. //walidacja
  25.  if ((empty($_POST['login'])) || (empty($_POST['haslo'])) || (empty($_POST['email']))) {
  26.  
  27. if (in_array($login, $sprlogin)) { echo"Wybrany login jest zakazany.<br>"; $blad = '1'; }
  28. if (strlen($login)<3 or strlen($login)>30 or !eregi("^[a-zA-Z0-9_.]+$",$login)){ echo"Login musi mieć od 3 do 30 znaków bez polskich liter i spacji.<br>"; $blad = '1'; }
  29. if (strlen($haslo)<3 or strlen($haslo)>32 or !eregi("^[a-zA-Z0-9_.]+$",$haslo)){ echo"Hasło musi mieć od 3 do 32 znaków bez polskich liter i spacji.<br>"; $blad = '1'; }
  30. if (!preg_match('|^[_a-z0-9.-]*[a-z0-9]@[_a-z0-9.-]*[a-z0-9].[a-z]{2,3}$|e', $email)){ echo"błędny email<br>"; $blad = '1'; } 
  31. if (!$login) { echo "Wypełnij pole login<br>"; $blad = '1'; }
  32. if (!$haslo) { echo "Wypełnij pole hasło<br>"; $blad = '1'; }
  33. if (!$email) { echo "Wypełnij pole email<br>"; $blad = '1'; }
  34.  
  35.  $blad = '1';
  36. }
  37.  
  38.  
  39.  
  40. //połączenie z bazą
  41. include("connect.php");
  42.  
  43. //kodowanie MD5
  44. $haslo = MD5($haslo);
  45.  
  46. //sprawdzanie czy login już istnieje
  47. $sprawdzlogin = mysql_query("SELECT * FROM userdata WHERE login = '$login'");
  48. $wyniksprawdz = mysql_num_rows($sprawdzlogin);
  49.  
  50.  
  51. if ($wyniksprawdz == 1) {
  52. echo "Wybrany login już istnieje.wybierz inna nazwe";
  53. $blad = '1';
  54. }
  55.  
  56.  
  57.  
  58. if($blad != 1) {
  59.  
  60. $zapytanie = "INSERT INTO `userdata` (`id`, `login`, `haslo`, `email` , `data` , `adresip`) VALUES ('', '$login','$haslo','$email','$data','$adresip')";
  61. $idzapytania = mysql_query($zapytanie);
  62.  
  63. echo "Użytkownik <b>" . $login . "</b> został zarejestrowany.<BR>przejdz do panelu logowania.";
  64.  
  65. }
  66.  
  67.  
  68. ?>


poprawiłem kod mając na uwadze Wasze wskazówki, ale teraz w ogóle nie działa walidacja pół formularza...
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.