Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zagnieżdżona instrukcja warunkowa IF (Problem)
Forum PHP.pl > Forum > Przedszkole
eeagle
Witam. Dopiero co poznaję język programowania PHP i mam problem z odpowiednim zagnieżdżeniem instrukcji warunkowej. Proszę o pomoc.
Jest to prosty formularz z instrukcjami sprawdzającymi czy użytkownik wpisał coś i długość wyrazu. Potrzebuję pomocy w jaki sposób dodać warunek że jeżeli wszystkie dane są poprawne do doda mi je do bazy.
Formularz :
  1. <?php
  2. if (isset($_POST["submit"]))
  3. {
  4. // Sprawdzamy, czy użytkownik zaznaczył pole wyboru i ustawiamy wartość
  5. // odpowiedniej zmiennej
  6. $mailing = false;
  7. if (isset($_POST["mailing"]))
  8. $mailing = true;
  9. // Wyświetlamy formularz z wpisanymi wartościami poszczególnych pól
  10. formularz($_POST["imie"], $_POST["nazwisko"], $mailing);
  11.  
  12. if (empty($_POST["imie"])) { echo "Nie wypełniłeś pola <strong>Imię !</strong><br/>"; }
  13. elseif (strlen($_POST["imie"]) > 20){echo "Za długie Imię - max. 20 znaków <br/>";}
  14. else echo "";
  15.  
  16. if (empty($_POST["nazwisko"])) { echo "Nie wypełniłeś pola <strong>Nazwisko !</strong><br/>"; }
  17. elseif (strlen($_POST["nazwisko"]) > 20){echo "Za długie nazwisko - max. 20 znaków <br/>";}
  18. else echo "";
  19. }
  20. else
  21. {
  22. formularz();
  23. }
  24. ?>


Instrukcja dodająca dane do bazy:
  1. $connection = @mysql_connect('localhost', 'root', '')
  2. or die('Brak połączenia z serwerem MySQL');
  3. $db = @mysql_select_db('baza', $connection)
  4. or die('Nie mogę połączyć się z bazą danych');
  5. $ins = @mysql_query("INSERT INTO users SET imie='$_POST[imie]' , nazwisko='$_POST[nazwisko]',mailing='$_POST[mailing]' ");
  6.  
  7. echo 'Dane zostały przesłane poprawnie.</br>';
  8. echo 'W ciągu 2dni otrzymasz na podany adres email potwierdzenie przyjęcia zgłoszenia.';

Turson
pseudokod
  1. if isset przycisk
  2. if empty pole1
  3. pole 1 nie moze byc puste
  4. elseif strlen pole1 < 10
  5. pole1 ma za malo znakow
  6. elseif empty pole2
  7. pole 2 nie moze byc puste
  8. elseif strlen pole2 < 10
  9. pole1 ma za malo znakow
  10. else
  11. dodaj do bazy
eeagle
Dzięki za pomoc , wszystko ładnie pieknie działa smile.gif.
Mam jeszcze jedno pytanie o strukturę zapytania czy dany rekord (imie lub nazwisko) znajduje sie w bazie . Jeżeli tak to "komunikat o błędzie", jeżeli nie "dodanie rekordu do bazy".
Turson
mysql_num_rows
eeagle
Ok, wykombinowałem coś takiego :

  1. <?php
  2. if (isset($_POST["submit"]))
  3. {
  4. // Sprawdzamy, czy użytkownik zaznaczył pole wyboru i ustawiamy wartość
  5. // odpowiedniej zmiennej
  6. $mailing = false;
  7. if (isset($_POST["mailing"]))
  8. $mailing = true;
  9. // Wyświetlamy formularz z wpisanymi wartościami poszczególnych pól
  10. formularz($_POST["imie"], $_POST["nazwisko"], $mailing);
  11.  
  12. if (empty($_POST["imie"])) { echo "Nie wypełniłeś pola <strong>Imię !</strong><br/>"; }
  13. elseif (strlen($_POST["imie"]) > 20){echo "Za długie Imię - max. 20 znaków <br/>";}
  14. elseif (empty($_POST["nazwisko"])) { echo "Nie wypełniłeś pola <strong>Nazwisko !</strong><br/>"; }
  15. elseif (strlen($_POST["nazwisko"]) > 20){echo "Za długie nazwisko - max. 20 znaków <br/>";}
  16. else {
  17.  
  18. $result = mysql_query("SELECT 'imie' FROM 'users' WHERE 'imie' = '{$_POST['imie']}'");
  19. $row = mysql_num_rows($result);
  20. if($row[0] > 0) {
  21. echo '<p>Już istnieje użytkownik z takim imieniem.</p>';
  22. } else {
  23. $connection = @mysql_connect('localhost', 'root', '')
  24. or die('Brak połączenia z serwerem MySQL');
  25. $db = @mysql_select_db('gwarancja', $connection)
  26. or die('Nie mogę połączyć się z bazą danych');
  27. $ins = @mysql_query("INSERT INTO users SET imie='$_POST[imie]' , nazwisko='$_POST[nazwisko]', mailing='$_POST[mailing]' ");
  28.  
  29. echo 'Dane zostały przesłane poprawnie.</br>';
  30. echo 'W ciągu 2dni otrzymasz na podany adres email potwierdzenie przyjęcia zgłoszenia.';
  31. }
  32.  
  33. }
  34.  
  35. }
  36. else
  37. {
  38. formularz();
  39. }
  40.  
  41.  
  42. ?>

Natomiast otrzymuje błąd :

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\test3\test.php on line 70
Turson
Temat: Jak poprawnie zadac pytanie
Nazwy kolumn jak i tabel bierze sie w ` a nie '
eeagle
Super dzieki.
Mam jeszcze jedno pytanie czy mógłbyś mnie nakierować jak ustawić żeby informacja o błędzie np"Nie wypełniłeś pola <strong>Imię !" pojawiała się przy samym polu a nie pod formularzem jak do tej pory?
Turson
To już trudniejsze. Stwórz tyle zmiennych z błedami ile masz pól do walidacji. Na samym początku pliku walidujesz, przypisujesz bład do konkretnej zmiennej. Jeżeli istnieje błąd to wyświetlasz go pod polem. Formularz musi kierować akcję pod ten sam plik - na samego siebie.
eeagle
Mam jeszcze pytanie dot. wyświetlania danych i po weryfikacji ich przez klienta dodanie do bazy lub powrót i edycja.
Poniżej kod który wykombinowałem. Wyświetla dane ale nie dodaje ich do bazy sad.gif

  1. <?php
  2. function formularz(
  3. $imie = "",
  4. $nazwisko = "",
  5. $mailing_checked = false ) {
  6. ?>
  7. <div class="wrapper">
  8. <p> Ważne - Certyfikat przedłużonej gwarancji jest ważny dopiero po pomyślnym zakończeniu procesu rejestracji.</br>
  9. Proszę podać następujące informacje:</p>
  10. <!-- Start of FORM -->
  11. <div class="form-container">
  12. <form class="forms" action="" method="post">
  13. <fieldset>
  14. <ol>
  15. <li class="form-row text-input-row">DANE UŻYTKOWNIKA:</li>
  16. <li class="form-row text-input-row">IMIĘ:<input type="text" name="imie" value=<?= $imie; ?>></li>
  17. <li class="form-row text-input-row">NAZWISKO:<input type="text" name="nazwisko" value=<?= $nazwisko; ?>></li>
  18. <li class="form-row text-input-row"><input type="checkbox" name="mailing" value="checked"/>Chcę otrzymywać informacje handlowe</li>
  19. <li><input type="submit" name="test" value="Wyślij"><input type="reset"></li>
  20. </ol>
  21. </fieldset>
  22. </form>
  23. </div>
  24. <?php
  25. }
  26. ?>
  27. <?php
  28. if (isset($_POST["test"]))
  29. {
  30. // Sprawdzamy, czy użytkownik zaznaczył pole wyboru i ustawiamy wartość
  31. // odpowiedniej zmiennej
  32. $mailing = false;
  33. if (isset($_POST["mailing"]))
  34. $mailing = true;
  35. // Wyświetlamy formularz z wpisanymi wartościami poszczególnych pól
  36. formularz($_POST["imie"], $_POST["nazwisko"], $mailing);
  37.  
  38. if (empty($_POST["imie"])) { echo "Nie wypełniłeś pola <strong>Imię !</strong><br/>"; }
  39. elseif (strlen($_POST["imie"]) > 20){echo "Za długie Imię - max. 20 znaków <br/>";}
  40. elseif (empty($_POST["nazwisko"])) { echo "Nie wypełniłeś pola <strong>Nazwisko !</strong><br/>"; }
  41. elseif (strlen($_POST["nazwisko"]) > 20){echo "Za długie nazwisko - max. 20 znaków <br/>";}
  42. else {
  43.  
  44. $result = mysql_query("SELECT 'imie' FROM `users` WHERE imie='$_POST[imie]'") or die('Błąd zapytania');
  45. $row = mysql_num_rows($result);
  46. if($row > 0) {
  47. echo '<p>Już istnieje użytkownik z takim imieniem.</p>';
  48. } else {
  49. ?>
  50. <form action="" method=post>
  51. <p>Twoje dane:</p>
  52. <ul>
  53. <li>Imię: <b><?= ($_POST['imie']); ?></b></li>
  54. <li>Nazwisko: <b><?= ($_POST['nazwisko']); ?></b></li>
  55. <?php
  56. if (isset($_POST['mailing']))
  57. echo "<li>Chcesz otrzymywać informacje handlowe.</li>";
  58. else
  59. echo "<li>Nie chcesz otrzymywać informacji handlowych.</li>";
  60.  
  61. ?>
  62. </ul>
  63. <input type="submit" name="submit" value="Zatwierdź">
  64. </form>
  65. <?php
  66. if (isset($_POST["submit"])){
  67. $ins = @mysql_query("INSERT INTO users SET imie='$_POST[imie]' , nazwisko='$_POST[nazwisko]', mailing='$_POST[mailing]' ");
  68. echo 'Dane zostały przesłane poprawnie.</br>';
  69. echo 'W ciągu 2dni otrzymasz na podany adres email potwierdzenie przyjęcia zgłoszenia.';
  70. }
  71. else echo 'Coś poszło nie tak';}
  72. }
  73.  
  74. }
  75. else
  76. {
  77. formularz();
  78. }
  79.  
  80.  
  81. ?>


Chodzi mi o coś takiego jak na stronie http://www.gajdaw.pl/php/walidacja-formularzy/p9.html -rysunek 2
Turson
Usuń @ przy zapytaniu i wyświetlaj mysql_error
eeagle
generalnie nie jarzę. Mógłbyś trochę bardziej przybliżyć temat smile.gif
Turson
Temat: Jak poprawnie zadac pytanie
eeagle
Problem polega na tym że nie wiem w jaki sposób przekazać dane wpisane w poprzednim formularzu do drugiego (czy w ogole jest to konieczne) aby użytkownik mógł sobie podejrzeć czy wszystkie dane wpisał poprawnie czy należy coś poprawić. W kodzie powyżej wyglada na to że przycisk submit w ogole nie działa (nie reaguje).
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.