Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [html][php] formularze - zabezpieczenia
Forum PHP.pl > Forum > Przedszkole
aga323
Witam wszystkich. Mam krótki formularz i interesuje mnie żeby ograniczyć w nim ilość wprowadzanych znaków i by ograniczały sie one tylko do cyfr i znaków "+" i "-" i ",". Chciałabym się także dowiedzieć jak najlepiej go zabezpieczyć przed wprowadzaniem przez niego złośliwych kodów itd. Podaje mój formularz (co prawda jest on wpleciony w php dlatego podam tylko jego fragment zawierający pole text:
  1. <?php
  2. echo '<input type="hidden" name="id' .$cos. '" value="' .$wiersz['id']. '" />';
  3.  //Znak nowej lini, aby wprowadzić porządek w kodzie html
  4.  echo "n";
  5.  echo '<input type="text" name="oc' .$cos. '" value="' .$wiersz['ocena']. '" />';
  6. ?>

Prosze o pomoc.
qwaq
oto formularz niepozwalający na wpisanie więcej niź 20 znaków

  1. <form method="POST" action="--WEBBOT-SELF--">
  2.  
  3. <p><!--webbot bot="Validation" B-Value-Required="TRUE" I-Maximum-Length="20"
  4. --><input type="text" name="T1" size="20" maxlength="20">
  5. <input type="submit" value="Submit" name="B1">
  6. <input type="reset" value="Reset" name="B2"></p>
  7. </form>


musisz poszukac o innych opcjach
aga323
Dzięki smile.gif Ale mam jeszcze jedno pytanko.
Otóż robię formularz rozwijany z polami wyboru i później wybraną wartość wysyłam do bazy itd.
Ale interesuje mnie jedna sprawa, jak zrobić żeby wartość która jest już w bazie była jako domyślna na tej liście, a jeśli nie ma w bazie to żeby domyślne było puste pole.. Bo dochodzę do momentu pobrania tych danych z bazy i nie mam pomysłu jak to teraz zrobić... Mam nadzieję, ze wiecie o co chodzi... Prosze o pomoc!
uli
Funkcja do wpisywania tylko wybranych znaków (JS):

  1. function maskuj(AEvent, AMaska) {
  2. if (window.Event) {
  3. kodKlawisza = AEvent.which;
  4. } else {
  5. kodKlawisza = AEvent.keyCode;
  6. }
  7.  
  8. // if (kodKlawisza == 13) {
  9. // return true; // Enter
  10. // };
  11.  
  12. if (kodKlawisza == 8) {
  13. return true; // klawisze sterujące
  14. };
  15.  
  16. if (kodKlawisza == 0) {
  17. return true; // klawisze sterujące
  18. };
  19.  
  20. klawisz = String.fromCharCode(kodKlawisza);
  21.  
  22. if (AMaska.indexOf(klawisz) == -1) {
  23. return false;
  24. } else {
  25. return true;
  26. }
  27. }


Wywołanie np. (dozwolone tylko cyfry) - maksymalna długość pola 3:
  1. <input type="text" name="nazwa" size="3" maxlength="3" onkeypress="return maskuj(event, '0123456789')">
maziak
A jezeli chcesz wyswietlic to co masz w bazie w polach wyboru, poprostu pobierz to co chcesz do zmiennych i :
  1. <?php
  2. echo '<select name="nazwa">';
  3. echo '<option>'.$zmienna[0].'</option>';
  4. echo '<option>'.$zmienna[1].'</option>';
  5. (...)
  6. echo '</select>';
  7. ?>
aga323
Tzn. chodzi mi o to że mam liste wyboru i tam mam zachowanie i do wyboru wzorowe, dobre itd. a jeśli w bazie jest już wstawione zachowanie to po prostu jako domyślne z tej listy wyświetla to z bazy.
maziak
Za to czy cos jest domyslnie wybrane odpowiada atrybut selected.
  1. <option selected="selected">coś</option>

Mozna by powstawiac przy kazdym if'a, jezeli zmienna = coś to wstawia selected. Ale duzo przy tym zachodu. Niestety nie mam juz czasu, zeby nad tym pomyslec tongue.gif Popróbuj. Może coś pomogłem. winksmiley.jpg
aga323
Hmm dzięki. Ale myśle, ze to i tak nie będzie takie łatwe. Bo jesli to pobierze ten rekord z bazy i wyświetli w tej liście jako domyślne pole, a użytkownik stwierdzi że chce zmienic je na inne to wtedy będzie też problem bo przecież nie moga być 2 zachowania dla 1 użytkownika... Nie wiem czy to jakoś w php da rade czy lepiej w Javie, ale z kolei w tym jetem kompletnym laikiem.
maziak
Nie bedzie problemu. Dostosuj to do swoich potrzeb.
  1. <?php
  2. //pobierasz z bazy zachowanie (ja zmienna poprostu ustale)
  3.  
  4. $zachowanie='dobre';
  5.  
  6. //funkcja ktora porownuje i wywala <option> z selectem lub bez
  7. function zach($zbazy,$zmienna) {
  8. echo '<option';
  9. if ($zbazy == $zmienna) {
  10. echo ' selected="selected" '; 
  11. }
  12. echo '>'.$zmienna.'</option>';
  13. }
  14.  
  15.  
  16. echo '<form>';
  17. echo '<select name="nazwa">';
  18.  
  19. // wywolanie funkcji dla kazdego zachcowania - zwroci gotowy kod optionow
  20. zach($zachowanie,'niepoprawne');
  21. zach($zachowanie,'poprawne');
  22. zach($zachowanie,'dobre');
  23. zach($zachowanie,'wzorowe');
  24.  
  25.  
  26. echo '</select>';
  27. echo '</form>';
  28. ?>
aga323
Thx smile.gif A w kawałku:
  1. <?php
  2. function zach($zbazy,$zmienna) {
  3. echo '<option';
  4. if ($zbazy == $zmienna) {
  5. echo ' selected="selected" ';
  6. ?>

za $zbazy podstawić wynik rekordu z bazy a za $zmienna?
maziak
za $zmienna to, z czym wynik rekordu z bazy ma być porównany, i to co ma być wyświetlone jako opcja <option>. Czyli tak jak napsialem, "poprawne, wzorowe" itp. Wklej sobie ten moj kod bez zmieniania niczego jako osobny plik - wykonaj przez przegladarke, zobacz źródło - podejżyj jak działa. Na pewno zrozumiesz wtedy zasade działania.

Ja osobiscie zrobil bym zapisywanie zachowania w bazie jako liczby, porownywanie na zasadzie liczb,a dopiero potem na tekst. Mniej przesyłanych danych - i mniejsze prawdopodobienstwo literówki winksmiley.jpg
aga323
Ok. Wrzuciłam wszystko i teraz wiem o co loto. Teraz tylko muszę podstawić za zmienna $zmienna odpowiednia zawartość. Z tego co zrozumiałam to ma być wymienione te wszystkie oceny z zachowania, chyba za pomocą pętli czy jak... teraz za bardzo nie wiem jak to w ta pętle dać żeby działało wszystko dobrze... :/
maziak
Nie no , jak tych ocen jest 5 czy 6, to wydaje mi sie ze mozna to z powodzenim zrobić ręcznie, zwlaszcza ze jest to sprowadzone do funkcji winksmiley.jpg Jak by bylo ich duzo, albo byly by bez funkcji(wiazalo by sie to z recznym pisaniem warunkow if i calego kodu przy kazdej z opcji) to by była potrzebna pętla, a ręczne wpisywanie mijało by się z celem.
aga323
Ok, ale ja cos chyba źle kombinuje, zrobiłam tak:
  1. <?php
  2. function zach($zbazy) {
  3.  echo '<option';
  4. if ($zachowanie == naganne) {
  5. echo ' selected="selected" '; 
  6. }
  7. else if ($zachowanie == nieodpowiednie) {
  8. echo ' selected="selected" '; 
  9. }
  10. else if ($zachowanie == poprawne) {
  11. echo ' selected="selected" '; 
  12. }
  13. else if ($zachowanie == dobre) {
  14. echo ' selected="selected" '; 
  15. }
  16. else if ($zachowanie == bardzo dobre) {
  17. echo ' selected="selected" '; 
  18. }
  19. else if ($zachowanie == wzorowe) {
  20. echo ' selected="selected" '; 
  21. }
  22.  echo '>'.$zmienna.'</option>';
  23.  }
  24.  echo '<select name="nazwa">';
  25. ?>

I mi wyskakuje błąd: Parse error: syntax error, unexpected T_STRING in /var/www/sites/yoyo.pl/g/2/g2test/dziennik/zach2.php on line 46
A to jest akurat przy zachowaniu bardzo dobrym które powinno być wyświetlone...
Ziels
A teraz właduj te nazwy w cudzysłowia 'bardzo dobre'
aga323
Kaszana... teraz to nawet w liście rozwijanej nie pokazuje w ogóle nazw zachowań..., ale przynajmniej błędu nie wyświetla...

W sumie, że błędu nie wyświetla to źle... bo nie wiadomo co poprawić. Czy mógłby mi ktos powiedzieć co robię źle? Czy w ogóle źle mam wszystko z tymi ifami czy inna część? Podaję kod:
  1. <?php
  2. $zachowanie = mysql_query("SELECT ocena FROM `zachowanie` WHERE id_user=$user AND semestr=1") or die(mysql_error());
  3.  //funkcja ktora porownuje i wywala <option> z selectem lub bez
  4.  function zach($zbazy) {
  5.  echo '<option';
  6. if ($zachowanie == 'naganne') {
  7. echo ' selected="selected" '; 
  8. }
  9. else if ($zachowanie == 'nieodpowiednie') {
  10. echo ' selected="selected" '; 
  11. }
  12. else if ($zachowanie == 'poprawne') {
  13. echo ' selected="selected" '; 
  14. }
  15. else if ($zachowanie == 'dobre') {
  16. echo ' selected="selected" '; 
  17. }
  18. else if ($zachowanie == 'bardzo dobre') {
  19. echo ' selected="selected" '; 
  20. }
  21. else if ($zachowanie == 'wzorowe') {
  22. echo ' selected="selected" '; 
  23. }
  24.  echo '>'.$zmienna.'</option>';
  25.  }
  26.  echo '<select name="nazwa">';
  27.  
  28. // wywolanie funkcji dla kazdego zachcowania - zwroci gotowy kod optionow
  29. zach($zachowanie,'');
  30. zach($zachowanie,'naganne');
  31. zach($zachowanie,'nieodpowiednie');
  32. zach($zachowanie,'poprawne');
  33. zach($zachowanie,'dobre');
  34. zach($zachowanie,'bardzo dobre');
  35. zach($zachowanie,'wzorowe');
  36.  echo '</select>';
  37. ?>
maziak
Nie nie nie biggrin.gif

Wywołanie funkcji, zach pobiera dwa parametry, ktore wchodza do 2 zmiennych :
  1. <?php
  2. function zach($zbazy,$zmienna);
  3. ?>

wywolanie funkcji w ten sposob
zach('cos','nic');
Spowodowalo by, ze wewnatrz funcji zmienna $zbazy miala by wartosc "cos", a zmienna o nazwie $zmienna, miala by wartosc "nic".
Jezeli dała byś wewnatrz funkcji
echo $zbazy; to wyskoczyl by na ekran ciąg "cos".

Ta funkcja którą Ci podałem - to już gotowiec - nic nie trzeba było zmieniać.

Zobacz, pobierasz z bazy zachowanie, pakujesz do dowolnie nazywajacej sie zmiennej. Załóżmy ze zmienna ta nazywa się $zachowanie i ma wartość "dobre".

zach($zachowanie,'poprawne');

przez co zmienna wewnetrzna funkcji $zbazy - nabrala wartość zmiennej $zachowanie. Bylo by identycznie, jak bys wywołała tą funkje nastepujaco :
zach('dobre','poprawne');

A efekt tego jest nastepujacy :
Wewnątrz funkcji następuje porównanie, czy zachowanie przekazane z bazy, jest identyczne z drugim parametrem przekazanym do funkcji.
  1. <?php
  2. //funkcja ktora porownuje i wywala <option> z selectem lub bez
  3. function zach($zbazy,$zmienna) {
  4.  
  5. // ponizsze echo wyrzuca poczatek kodu optiona
  6. echo '<option';
  7.  
  8. //jezeli warosc pierwsza, jest idnetyczna z druga, wewnatrz optiona pojawi sie sel
    ected (domyslnie zaznaczony)
  9. if ($zbazy == $zmienna) {
  10. echo ' selected="selected" '; 
  11. }
  12. // juz poza warunkiem, czyli "i tak i tak" zamykany jest tag otwierajacy option, wpisywane jest to, co zostalo podane
     jako parametr drugi , i zamykany jest tag option
  13. echo '>'.$zmienna.'</option>';
  14. }
  15. ?>

Czyli da podanego wyzej przykładu (dobre, poprawne) - to co wewnatrz IFa nie zostanie wykonane, ponieważ chcemy aby domyslnie byl wybrany drugi parametr, identyczny z wyczytanym z bazy.

Jeżeli wywołujemy tą funkcje dla kazdego zachowania
  1. <?php
  2. zach($zachowanie,'naganne');
  3. zach($zachowanie,'nieodpowiednie');
  4. zach($zachowanie,'poprawne');
  5. zach($zachowanie,'dobre');
  6. zach($zachowanie,'bardzo dobre');
  7. zach($zachowanie,'wzorowe');
  8. ?>


Bankowo jedno z nich jest identyczne z tym, co aktualnie jest w bazie. Wtedy to jedno stanie sie domyślnie wybrane.

Dla tego własnie wywołanie tej funkcji musi być dla każdego zachowania osobno. Cały w tym cycek, że "nie wiemy" co aktualnie jest w bazie, wiec trzeba to co wyczytane porównać z każdym zachowaniem, dla tego własnie wywołanie funkcji 5 razy, za kazdym razem z innym 2gim parametrem.


Mam nadzieje, że objasnilem co nieco. Jak by jeszcze coś bylo niejasne - 7991781 - często na niewidoku tongue.gif
aga323
Zrobiłam tak jak mówiłeś, żadnego błędu mi nie wywala ani nic tylko caly czas wyświetla naganne (bo jets pierwsze na liście) dziwne... Może mam coś źle w bazie? podam krótko opis tego wersu z oceną.
Pole ocena
Typ varchar(15)
Metoda porównywania napisów utf8_polish_ci
Null Nie
I później mam tam w wartości bardzo dobre.
maziak
Najłatwiej jest poprostu spojżeć do źródła.
Jeżeli jedno z optionow ma atrybut "selected", to wszystko jest OK. Zobacz na innej przeglądarce. U mnie na firefoxie sie ten wybor zapamietuje i jest to co wybrane bylo przed chwila, nawet po odswiezeniu. Mowiac szczerze nie wiem czemu tak sie dzieje tongue.gif
aga323
Ja mam ff i nie działa, sprawdzilam na ie i też nie działa... Hmm trochu to dziwne
maziak
Jeżeli jedno z optionow ma w kodzie atrybut selected="selected" to musi brykać :S Chyba, że o czymś nie wiem - też mozna powiedzieć, że jestem początkujący, ale u mnie działa. Odświeżaj za pomocą ctrl+F5 w FF.
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.