Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzenie poprawności danych
Forum PHP.pl > Forum > PHP
TomASS
Witam.

Mam sobie formularz. Użytkownik wpsuje w nim dane, daty, itp. itd...to co zwykle i teraz jak nacisnie się submita, to formularz zostaje wysłany POSTEM do innego pliku, który sprawdzi poprawność danych i ewentualnie dokona operacji na bazie danych i teraz moje pytanko. Jeśli dane są złe/niekompletne/niepoprawne i skrypt to wykryje, to oczywiście wraca do frmularza i co zrobić aby użytkonik znowusz nie musiał wpisywać wszystkich danych? Czy dane wpisane za pierwszym razem musze przetrzymywać w sesji?

Pozdrawiam i dziękuje za opdoiwedzi.
ens0re
No możesz w sesjii...
Marusz
Możesz i w sesji, możesz też za pomocą prostego formularza, na zasadzie:

Po kliknięciu na "Wyślij":
  1. <form method="POST" action="adres_do_formularza">
  2. <input type="hidden" name="form_street" value="<?php echo htmlspecialchars($_POST["form_street"]); ?>">
  3. <input type="submit" name="form_back" value="Wracaj i poprawiaj boś napsuł">
  4. </form>

Po czym odczytujesz to co siedzi w hiddenach juz we wlasciwym, pierwszym, formularzu:
  1. <form method="POST" action="adres_do_formularza">
  2. <input type="text" name="form_street" value="<?php echo htmlspecialchars($_POST["form_street"]); ?>">
  3. <input type="submit" name="form_submit" value="Wyślij">
  4. </form>

Ogólnie wydaje mi się, że sesja będzie łatwiejsza.
zbig13
A nie prościej tak:
  1. <form action "plik.php" method="post">
  2. <input type="imie" name="imie" value="<?php if (isset($_POST['imie'])) echo $_POST['imie']; ?>" />
  3. <textarea rows="10" cols="30" name="adres"><?php if (isset($_POST['adres'])) echo $_POST['adres']; ?></textarea>
  4. <input type="submit" name="wyslij" value="Wyślij" />
  5. </form>

?
ens0re
Może i prosciej smile.gif
Marusz
Cytat(zbig13 @ 2005-08-30 14:33:39)
A nie prościej tak?

Prosciej. Tylko rowniez trzeba te POSTy pozabezpieczac, bo sajgon przy wprowadzeniu htmla gwarantowany.
batman
A nie lepiej byłoby zastosować javascript. Wtedy nie byłoby potrzeby przetrzymywania danych w zmiennych, ponieważ skrypt byłby zamieszczony na te samej stronie. Np.

  1. <form name="forma" action="jakis_plik.php" method="POST">
  2. <input type="text" name="poletxt">
  3. <inpyt type="button" onClick="sprawdz();" value="Dalej">
  4. </form>


A teraz skrypt zamieszczony na tej samej stronie:

  1. <script language="javascript">
  2. function sprawdz()
  3. {
  4. if (forma.poletxt.value=='')
  5. {
  6. alert("Formularz niekompletny");
  7. forma.poletxt.focus;
  8. //nie pamietam czy po fokus mają być nawiasy czy nie
  9. }
  10. else
  11. {
  12. forma.submit();
  13. }
  14. }


Może więcej pisania, ale nie trzeba sobie głowy zawracać przechowywaniem zmiennych, które są nam niepotrzebne.
Marusz
Cytat(batman @ 2005-08-30 16:50:54)
A nie lepiej byłoby zastosować javascript

Jasne ze lepiej, prosciej, szybciej i jasniej dla usera. Gorzej tylko, jesli ten nie ma aktywnego JS, wtedy robota x2.
batman
Cóż. Mówi się trudno i pisze się dalej winksmiley.jpg
ActivePlayer
Cytat
Jasne ze lepiej, prosciej, szybciej i jasniej dla usera. Gorzej tylko, jesli ten nie ma aktywnego JS, wtedy robota x2.

to nie robisz guzika <input type="submit"> tylko <input type="button" onclick="submit_maj_form();">... jak nei ma js wlaczonego, to forma tez nei posle smile.gif
zbig13
Cytat(Marusz @ 2005-08-30 16:27:24)
Prosciej. Tylko rowniez trzeba te POSTy pozabezpieczac, bo sajgon przy wprowadzeniu htmla gwarantowany.

Przecież on przesyła dane do pliku php, i je tam waliduje, to dlaczego ma być "sajgon" przy wprowadzaniu danych?
Marusz
Cytat(zbig13 @ 2005-08-30 19:31:40)
dlaczego ma być "sajgon" przy wprowadzaniu danych?

Mialem na mysli pchanie niepowalidowanych danych do inputow, vide Twoj przyklad:
  1. value="<?php if (isset($_POST['imie'])) echo $_POST['imie']; ?>"

Wystarczy, ze bedzie mial pole o tresci: wpisz Imię i pseudonim. Ktos wpisze: Lucek "Konstanty" Wasilewski i gdy to trafi pod Twoj value spowoduje rozwalenie formularza (jesli owy Lucek nie wypelnil jakiegos pola). Przecwicz przyklad.

Cytat(ActivePlayer)
jak nei ma js wlaczonego, to forma tez nei posle

Rozumiem, ze ktos kto wylacza JS ze wzgledow bezpieczenstwa, na formularzu sobie nie podziala? Podam inny przyklad: co za problem jest wyslac POSTa ze specjalnie spreparowanej strony i wtluc mu tresci nieporzadane? Zawsze trzeba zabezpieczac formularz od strony php!
TomASS
Wow! Ale odpowiedzi! Dziękuję Państwu bardzo, nie spodziewałem się takiego odzewu smile.gif Myślę, że JS będzie ok. No jest tylko jedno ale....jak user ma wyłączone JS:/ to najlepiej sprawdzić przy logowaniu się i wtedy nie ma problemu:) W zasadzie to większość serwisów wymaga JS. Pozdrawiam i dziękuje.

Acha....
tylko zastanwia mnie jedna rzecz....
czy:
  1. forma.poletxt.focus;


to znaczy, że kursor ma przejśc na niekompletny input...prawda? A ja sobie dodadam do tego czerwoną ramkę na około niekompletnych inputów smile.gif
batman
Tak. Focus ustawi kursor w miejscu, w którym brakuje danych. Nie pamiętam tylko czy pisze się focus, czy focus().
Seth
Cytat(batman @ 2005-08-30 18:05:32)
Cóż. Mówi się trudno i pisze się dalej winksmiley.jpg

Brawo. I tak wlasnie serwisy internetowe sa haczone w kilka sekund...

http://www.f5.com/solutions/tech/asg/vulnerabilities_wp.html

Cytat
To avoid buffer overflow, developers typically use HTML and JavaScript to limit how many characters could be submitted as input. However, an attacker can change HTML and turn off JavaScript and then submit a buffer overflow attack. In order to properly protect the application against buffer overflow attack, all input from the client has to be carefully checked on the server; alternatively an Application Firewall or Application Security Gateway could be installed to scan out requests with abnormal length.
dr_bonzo
Cytat
to nie robisz guzika <input type="submit"> tylko <input type="button" onclick="submit_maj_form();">

A user na to (w pasku adresu)
java script://document.getElementById( "formularz" ).submit();
i pomija walidacje
TomASS
W takim przypadku ewidenta chęć użytkownika zaszkodzeniu samemu sobie smile.gif
Zrobiłem skrypcik:
  1. <script type="text/javascript" language="JavaScript">
  2. <!--
  3. function check_form_buy(forma,transport1,transport2,transport3,data1,data2,sam,kier,zak){
  4. var wyslij = 1;
  5. if(document.getElementById(transport1).checked) var mess = 'ds';
  6. if(document.getElementById(transport2).checked) var mess = 'dt';
  7. if(document.getElementById(transport3).checked) var mess = 'ow';
  8.  
  9. var dat = document.getElementById(data1).value;
  10. var dat2 = document.getElementById(data2).value;
  11. var samo = document.getElementById(sam).value;
  12. var kiero = document.getElementById(kier).value;
  13. var zakl = document.getElementById(zak).value;
  14.  
  15. if(mess=='dt' & dat=='<?echo $Lang['Data_dostawy'];?>'){
  16. document.getElementById(data1).style.border='solid 2px #FF0000';
  17. wyslij = 0;
  18. }
  19. if(mess=='ow'){
  20. if(dat2=='<?echo $Lang['Data_odbioru'];?>' | dat2==''){
  21. document.getElementById(data2).style.border='solid 2px #FF0000';
  22. wyslij = 0;
  23. }
  24. if(samo=='<?echo $Lang['Samochod'];?>' | samo==''){
  25. document.getElementById(sam).style.border='solid 2px #FF0000';
  26. wyslij = 0;
  27. }
  28. if(kiero=='<?echo $Lang['Kierowca'];?>' | kiero==''){
  29. document.getElementById(kier).style.border='solid 2px #FF0000';
  30. wyslij = 0;
  31. }
  32. if(zak=='<?echo $Lang['Miejsce_odbioru'];?>' | zakl==''){
  33. document.getElementById(zak).style.color='#FF0000';
  34. wyslij = 0;
  35. }
  36.  
  37. }
  38. if(wyslij) document.getElementById(forma).submit();
  39. else alert("<?echo $Lang['Dane_niekompletne'];?>");
  40.  
  41. }
  42. //-->


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