Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Walidacja forlmularza
Forum PHP.pl > Forum > Przedszkole
pavel14
  1. <?php
  2. if (isset ($_GET['zlokalizuj'])){
  3. if (!isset ($_GET['opis'])) {echo "tak nie można";}
  4. if ( isset ($ulica) == "wybierz" ) {echo "tak też nie można";}}
  5.  
  6. else 
  7. {
  8.  
  9. while ($result = mysql_fetch_assoc($pobrane_adresy)) 
  10. {
  11. $adres = $result['opis'];
  12.  
  13. echo "<h4>Oczekiwana pomoc:</h4>$_GET[opis]<br/>";
  14. echo "<h4>Adres zamieszkania</h4>$_GET[ulica] &nbsp&nbsp $_GET[numer]<br/></br>";
  15. echo "Odpowiedni ośrodek to:<br/>$adres<br/>";
  16. } 
  17. }
  18. ?>


Może mi ktoś podpowiedzieć, co robię tu nie tak? Wciskam 'submit'. Przy pierwszym warunku działa ok. Przy drugim lipa. Czy jest spełniony, czy nie wynik jest ten sam. Wyświetla za każdym tak jakby był spełniony. Instrukcja 'while' się nie wykonuje. Wartość 'wybierz' jest wartością domyślną z pola 'select'.
tommy4
isset($ulica) zwraca wartość typu boolean, a ty porównujesz ją do stringu.
  1. <?php
  2. if(isset($ulica) && $ulica == "wybierz") // if(isset($_GET['ulica']... ?
  3. ?>


i to się chyba nadaje na przedszkole;p
pavel14
Wiem. Ale gdzieś robię błąd i nie wiem gdzie. To co napisałem to próby. Już wszystkiego próbuje, ale wynik jest ten sam. Nie wiem czemu. Myślę, że coś popierdzieliłem z instrukcją.
batman
A nie powinno być tak:

  1. <?php
  2. if ( isset ($ulica) && $ulica == "wybierz" ) {echo "tak też nie można";}}
  3. ?>

W Twoim zapisie porównywana była wartość wyrażenia isset($ulica) ze stringiem "wybierz".
pavel14
  1. <?php
  2. if (isset ($_GET['zlokalizuj'])){
  3. if (!isset ($_GET['opis'])) {echo "tak nie można";}
  4. if (isset ($_GET['ulica'])) {echo "tak też nie można";}
  5.  
  6. else 
  7. {
  8.  
  9. while ($result = mysql_fetch_assoc($pobrane_adresy)) 
  10. {
  11. $adres = $result['opis'];
  12.  
  13. echo "<h4>Oczekiwana pomoc:</h4>$_GET[opis]<br/>";
  14. echo "<h4>Adres zamieszkania</h4>$_GET[ulica] &nbsp&nbsp $_GET[numer]<br/></br>";
  15. echo "Odpowiedni ośrodek to:<br/>$adres<br/>";
  16. } 
  17.  }
  18. }
  19. ?>


Taka jest wersja pierwotna. Ale chodzi o to, że 'ulica' to pole <select name=\"ulica\">. Wartościś domyślną tego pola jest 'wybierz'. Resztę wartości (nazwy ulic) pobieram z bazy. I jeśli zastosuję (isset ($_GET['ulica']) to warunek zawsze będzie spełniony, ponieważ pole domyslnie nie jest puste. A mnie zależy na tym by nie uwzględniał tej wartości.
batman
W takim razie warunek będzie miał taką postać.
  1. <?php
  2. if ( !isset($_GET['ulica']) || $_GET['ulica'] == "wybierz" ) {echo "tak też nie można";}}
  3. ?>
pavel14
To też próbowałem. Za każdym razem resetuje tą wartość z pola "select", którą ustawiłem, na domyślną "wybierz". Mógłbyś coś na to poradzić? Byłbym wdzięczny. Jak z pola "radio" pamięta zaznaczoną wartośc, tak z "selecta" nie. Nie wiem jak na to zaradzić.
mike
Już nie mogę patrzeć na ten żenujący wątek i na jego tytuł.
Przenoszę na Przedszkole (pisz tam jeszcze przez jakiś czas proszę) i proszę o zmianę tytułu wątku.
Tytuł "Co robię źle?" akurat jest mało trafny a raczej głupi i bezużyteczny.
Zasady formułowania poprawnych tytułów wątków znajdziesz w Regulaminie.
batman
Szczerze przyznam, iż nie wiem, gdzie możesz mieć błąd. Jeśli nie działa ten warunek, to dzieje się magia. Może formularz wysyłasz postem a nie getem, może masz włączone register_globals i zmienna ci się nadpisuje, a poza tym znalezienie błędu we fragmencie kodu raczej nie należy do najłatwiejszych. Wklej cały kod tej strony i się zobaczy.
pavel14
  1. <form action="<?php echo $SERVER['PHP_SELF'];?>" method="GET" name="lokalizator">


  1. <?php
  2. .........
  3. $wyswietlany_blok .= "<input type=\"radio\" name=\"opis\" value=\"Pomoc\" id=\"1\">Pomoc<br/>";
  4. $wyswietlany_blok .= "<input type=\"radio\" name=\"opis\" value=\"Rodzina\" id=\"2\">Rodzina<br/>";
  5.  
  6. .........
  7.  
  8.  
  9. $wyswietlany_blok .= "
  10. <br/>
  11. <select name=\"ulica\">
  12. <option value=\"default\">wybierz</option>";
  13.  
  14. //wyswietla nazwy ulic z tabeli ulice
  15. while ($rowu = mysql_fetch_assoc($pobrana_lista)) 
  16. {
  17. $id = $rowu['id_ulicy'];
  18. $nazwa_ulicy = $rowu['nazwa_ulicy'];
  19. $numer_ulicy = $rowu['numer'];
  20. $wyswietlany_blok .= "<option value=\"$nazwa_ulicy\">$nazwa_ulicy</option>";
  21. }
  22. $wyswietlany_blok .= "</select>";
  23.  
  24. echo $wyswietlany_blok;
  25. echo "<br/><br/><input type=\"submit\" name=\"zlokalizuj\" value=\"Zlokalizuj\">";
  26.  
  27.  
  28. if (isset ($_GET['zlokalizuj'])){
  29. if (!isset ($_GET['opis'])) {echo "tak nie można";}
  30. if ($_GET['ulica'] == "wybierz" ) {echo "tak też nie można";}
  31.  
  32. else 
  33. {
  34. ...................
  35. } 
  36. }}
  37. ?>

Tak to po krótce wygląda. Pewnie robię głupi błąd. Ale nie wiem gdzie.
batman
No i wszystko stało się jasne:

  1. <?php
  2. if ( !isset($_GET['ulica']) || $_GET['ulica'] == "default" ) {echo "tak też nie można";}
  3. ?>

Teraz zadziała.
pavel14
Chwała Tobie Batmanie. Znowu ocaliłeś Gotham City winksmiley.jpg.
A możesz mi podpowiedzieć jak przekazać zaznaczone pola, tak by trzeba było wybrać te niezaznaczone po przeładowaniu formularza?

Ps: Wiedziałem, że to będzie błahostka.
batman
W taki sam sposób jak w przypadku ulicy:
  1. <?php
  2. if ( !isset($_GET['jakies_pole']) ) {echo "wybierz jakis pole";}
  3. ?>

lub w przypadku list rozwijanych
  1. <?php
  2. if ( !isset($_GET['jakas_lista']) || $_GET['jakas_lista'] == "default" ) {echo "wybierz cos z jakiejs listy";}
  3. ?>

przy założeniu, ze default jest opcją domyślną (niewybraną).
pavel14
Chyba się nie rozumiemy. Chodzi o to, że w momencie kiedy wcisnę "zlokalizuj" to resetuje mi wszystkie zaznaczone i wybrane pola. A chce by w momencie gdy zapomnę o jednym polu to pojawia się odpowiedni komunikat (ale tę sprawę mam już załatwioną) a pozostałe wartości, które wybrałem w dalszym ciągu są zaznaczone, po przeładowaniu formularza. Odhaczam niewypełnioną pozycją, daję "zlokalizuj" i wtedy daje wynik.
batman
W takim przypadku musisz zrobić co następuje.
Dla pól tekstowych ustawiasz atrybut value na $_GET['nazwa_pola'].
Dla droplisty trzeba stworzyć instrukcję warunkową, a następnie do znacznika <option> dodać zmienną $selected
  1. <select name="nazwa_listy">
  2. <?php
  3. for($i=0;$i<10;$i++) {
  4. $selected = '';
  5. if($opcja == $_GET['nazwa_listy']) {
  6. $selected = 'selected';
  7. // nie pamietam czy nie powinno byc $selected = 'selected="selected"';
  8. }
  9. echo '<option value="'.$i.'" '.$selected.'>opcja '.$i.'</option>';
  10. ?>
  11. </select>

Zmienna $opcja jest Twoją wartością dla konkretnego wiersza.

Dla radiobuttona i checkboxa też trzeba użyć instrukcji warunkowej
  1. <?php
  2. $checked = '';
  3. if($opcja == $_GET['nazwa_listy']) {
  4. $checked = 'checked="checked"';
  5. }
  6. <input type="checkbox" name="nazwa" value="1" '.$checked.' />
  7. ?>

W ten oto sposób masz zachowane wartości formularza.
pavel14
Mam takie o to tabele:
osrodek [id_osrodka, nazwa_osrodka, opis, id_pomocy]
pomoc [id_pomocy, rodzaj_pomocy, opis] ulica_osrodka
[id_osrodka, id_ulicy] ulice [id_ulicy, nazwa_ulicy, numer, parzystosc]
i kod
  1. <?php
  2. $zapytanie_o_adres2 = "SELECT o.opis FROM osrodek AS o 
  3. LEFT JOIN pomoc p ON (p.id_pomocy=o.id_pomocy) 
  4. LEFT JOIN ulica_osrodka uo ON (uo.id_osrodka=o.id_osrodka) 
  5. LEFT JOIN ulice u ON (u.id_ulicy=uo.id_ulicy) 
  6. WHERE u.nazwa_ulicy= '$_GET[ulica]'AND p.opis = '$_GET[opis]'\";
  7.  
  8. $pobrane_adresy2 = mysql_query($zapytanie_o_adres2) or die (mysql_error());
  9. while ($result2 = mysql_fetch_assoc($pobrane_adresy2)) 
  10. {
  11.  $adres2 = $result2['opis'];
  12. }
  13. ?>

Problem mam taki: Chcę by adres wyświetlał się w zależności od wartości w polu "parzystosc" tabeli "ulice".
Robiłem tak, że do zapytania dawałem jeszcze ".... AND parzystosc = 'cos';" ale nie działa to w przypadku,
gdy ulica jest podzielona na wiele częsci. Może jakiś warunek tu trzasnąć?questionmark.gif? Próbowałem to robić przez
porównanie wartości w polu 'parzystosc' przy wybranej 'ulicy' i w zależności wykonywałem odpowiednie zapytanie,
ale coś robiłem nie tak.
batman
  1. SELECT
  2. u.nazwa_ulicy,
  3. u.numer,
  4. o.opis
  5. FROM osrodek o,
  6. ulice u,
  7. ulica_osrodka uo
  8. WHERE o.id_osrodka = uo.id_osrodka AND uo.id_ulicy = u.id_ulicy AND u.parzystkosc = [jakis_warunek]


Sądzę, że to zapytanie powinno rozwiązać Twój problem. Nie testowałem go, więc gdzieś mógł wkraść się błąd winksmiley.jpg
pavel14
Otóż nie. Tego rozwiązania juz próbowałem, a chodzi mi o to, żeby w momencie, gdy wybiorę ulicę to sprawdza jaka jest wartość pola 'parzystosc'
i wtedy mogę wykonać odpowiednie zapytanie. Próbowałem to tak rozwiązać:

  1. <?php
  2. $zapytanie_o_adres1 = "SELECT o.opis FROM osrodek AS o 
  3. LEFT JOIN pomoc p ON (p.id_pomocy=o.id_pomocy) 
  4. LEFT JOIN ulica_osrodka uo ON (uo.id_osrodka=o.id_osrodka) 
  5. LEFT JOIN ulice u ON (u.id_ulicy=uo.id_ulicy) 
  6. WHERE u.nazwa_ulicy= '$_GET[ulica]'AND p.opis = '$_GET[opis]' AND u.parzystosc = 'tak'";
  7. $pobrane_adresy1 = mysql_query($zapytanie_o_adres1) or die (mysql_error());
  8. while ($result1 = mysql_fetch_assoc($pobrane_adresy1)) 
  9. {
  10. $adres1 = $result1['opis'];
  11. }
  12.  
  13.  
  14. $zapytanie_o_adres2 = "SELECT o.opis FROM osrodek AS o 
  15. LEFT JOIN pomoc p ON (p.id_pomocy=o.id_pomocy) 
  16. LEFT JOIN ulica_osrodka uo ON (uo.id_osrodka=o.id_osrodka) 
  17. LEFT JOIN ulice u ON (u.id_ulicy=uo.id_ulicy) 
  18. WHERE u.nazwa_ulicy= '$_GET[ulica]'AND p.opis = '$_GET[opis]' AND parzystosc = 'nie'";
  19. $pobrane_adresy2 = mysql_query($zapytanie_o_adres2) or die (mysql_error());
  20. while ($result2 = mysql_fetch_assoc($pobrane_adresy2)) 
  21. {
  22. $adres2 = $result2['opis'];
  23. }
  24.  
  25. $zapytanie_o_p = "SELECT parzystosc FROM ulice WHERE nazwa_ulicy = '$_GET[ulica]'";
  26. $pobrane_p = mysql_query($zapytanie_o_p) or die (mysql_error());
  27. while ($resultp = mysql_fetch_assoc($pobrane_p)) 
  28. {
  29. $parz = $resultp['parzystosc'];
  30. }
  31. //wysylanie formularza
  32. if (isset ($_GET['zlokalizuj'])) //jezeli zostal ustawionu przycisk 'zlokalizuj'
  33.  
  34. {
  35. if (!isset ($_GET['opis'])) {echo "Wybierz rodzaj pomocy";} 
  36. elseif ($_GET['ulica'] == "default") {echo "Wybierz ulicę";}
  37. elseif ($_GET['numer'] == "") {echo "Wpisz numer (max trzy cyfry)";}
  38.  
  39. switch ($parz){
  40.  case 'tak':
  41.  echo "<h4>Oczekiwana pomoc:</h4>$_GET[opis]<br/>";
  42.  echo "<h4>Adres zamieszkania</h4>$_GET[ulica] &nbsp&nbsp $_GET[numer]<br/></br>";
  43.  echo "Odpowiedni ośrodek to:<br/>$adres1<br/>";
  44.  break;
  45. case 'nie':
  46. echo "<h4>Oczekiwana pomoc:</h4>$_GET[opis]<br/>";
  47. echo "<h4>Adres zamieszkania</h4>$_GET[ulica] &nbsp&nbsp $_GET[numer]<br/></br>";
  48. echo "Odpowiedni ośrodek to:<br/>$adres2<br/>";
  49. break;
  50. }}
  51. ?>

ale robię to źle bo tak mi nie porówna wartości, z tą którą wybrałem. A tak bym chciał to rozwiązać. Wybieram ulicę - porównuję - odpowiednie zapytanie wykonuję. Tak mi się bynajmniej wydaje.

Ps: Z tym zaznaczeniem
  1. <?php
  2. ......
  3. if($opcja == $_GET['nazwa_listy'])
  4. ......
  5. ?>

ta $opcja to jak ma być??
batman
Szczerze przyznam, że nie wiem o co Ci może chodzić. Może ktoś inny postara się o interpretację lub napiszesz jaśniej o co chodzi.
pavel14
Oki postaram się. Mam tabele jak wyżej podałem i kod PHP. Chcę by w momencie wybrania nazwy ulicy sprawdzić jaka jest wartość pola 'parzystosc' dla tej wybranej właśnie ulicy $_GET['ulica']. Bo jeśli bym zrobił tak jak Ty sugerowałeś w powyższym zapytaniu, to musiałbym dać warunek, który sprawdza czy wprowadzony numer do pola 'numer' w formularzu, jest parzysty, czy też nie "if ($_GET['numer'] %2)" i dawałem SWITCH case'nie'; case 'tak'; (bo jak inaczej sprawdzić, które zapytanie ma się wykonać??). Tak próbowałem. Ale np. w momencie, gdzie mam przedział numerów, załóżmy od 1-10 i wszystkie numery bez względu na parzystość są przydzielone do jednego ośrodka, to zawsze będzie się wykonywało zapytanie, które spełnia warunek założmy ... AND u.parzystosc = 'nie'. A chodzi mi o to, że ma sprawdzać wartosc 'parzystosc' dla wybranej ulicy i na tej podstawie wykonywać odpowiednie zapytanie. Czyli mam ulice X i numer założmy 4, a wartość pola 'parzystosc' jest 'null' (dałem taką wartość domyślną w momencie gdy dany zbiór numerów jest przydzielony do jednego ośrodka), numer jest parzysty i wykonałoby się zapytanie spełniające warunek parzystości numeru. Może taki przykład zawartości tabeli:

nazwa_ulicy numer parzystosc
Xxxx 1-20 null
Xxxx 21-29 nie
Xxxx 22-30 tak

Czyli w pierwszej linii numery są wszystkie dla jednego, w drugiej tylko nieparzyste, a w trzeciej parzyste, a ulica jest ta sama. Tu właśnie mam zagadkę jak to uskutecznić by rozdzielał prawidłowo. A od tego zależy włąsnie adres ośrodka.
Ps: Mam nadzieję, że jakoś w miarę zrozumiale napisałem. A może mógłbyś jakiś lepszy pomysł podsunąć? Byłbym wdzięczny naprawdę.
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.