Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Walidacja forlmularza, Walidacja formularza
pavel14
post 24.08.2007, 20:13:15
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 3.08.2007

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


  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'.

Ten post edytował pavel14 25.08.2007, 19:45:08
Go to the top of the page
+Quote Post
tommy4
post 24.08.2007, 20:17:03
Post #2





Grupa: Zarejestrowani
Postów: 288
Pomógł: 12
Dołączył: 2.12.2005

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


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

Ten post edytował tommy4 24.08.2007, 20:17:28
Go to the top of the page
+Quote Post
pavel14
post 24.08.2007, 20:23:50
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 3.08.2007

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


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ą.
Go to the top of the page
+Quote Post
batman
post 24.08.2007, 21:06:12
Post #4





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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".


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
pavel14
post 24.08.2007, 21:36:20
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 3.08.2007

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


  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.

Ten post edytował pavel14 24.08.2007, 21:38:45
Go to the top of the page
+Quote Post
batman
post 25.08.2007, 11:28:12
Post #6





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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. ?>


Ten post edytował batman 25.08.2007, 11:28:48


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
pavel14
post 25.08.2007, 19:09:26
Post #7





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 3.08.2007

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


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ć.
Go to the top of the page
+Quote Post
mike
post 25.08.2007, 19:17:03
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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.
Go to the top of the page
+Quote Post
batman
post 25.08.2007, 19:25:06
Post #9





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
pavel14
post 25.08.2007, 19:51:04
Post #10





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 3.08.2007

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


  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.

Ten post edytował pavel14 25.08.2007, 19:53:04
Go to the top of the page
+Quote Post
batman
post 25.08.2007, 20:17:41
Post #11





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
pavel14
post 25.08.2007, 20:41:58
Post #12





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 3.08.2007

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


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.

Ten post edytował pavel14 25.08.2007, 20:56:55
Go to the top of the page
+Quote Post
batman
post 25.08.2007, 22:27:20
Post #13





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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ą).


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
pavel14
post 26.08.2007, 19:55:18
Post #14





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 3.08.2007

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


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.

Ten post edytował pavel14 26.08.2007, 19:59:29
Go to the top of the page
+Quote Post
batman
post 26.08.2007, 22:15:11
Post #15





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.

Ten post edytował batman 26.08.2007, 22:16:34


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
pavel14
post 5.09.2007, 23:16:24
Post #16





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 3.08.2007

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


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.

Ten post edytował pavel14 6.09.2007, 17:48:04
Go to the top of the page
+Quote Post
batman
post 6.09.2007, 07:14:52
Post #17





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




  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

Ten post edytował batman 6.09.2007, 07:16:02


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
pavel14
post 6.09.2007, 18:35:35
Post #18





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 3.08.2007

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


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ć??

Ten post edytował pavel14 6.09.2007, 18:41:42
Go to the top of the page
+Quote Post
batman
post 6.09.2007, 18:58:59
Post #19





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
pavel14
post 6.09.2007, 21:15:37
Post #20





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 3.08.2007

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


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ę.

Ten post edytował pavel14 6.09.2007, 21:20:01
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 19:16