Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]jak zrobić żeby było trzeba obowiązkowo wypełnić
Forum PHP.pl > Forum > Przedszkole
pawlo20
jak w tym skrypcie komentarzy zrobić żeby było trzeba obowiązkowo wypełnić wszystkie pola i żeby była obowiązkowa liczba liter min.3 ?
bo ja próbowałem tam wstawić taką funkcje ale każdy skrypt inny i nie wiem w które miejsce, a wy się tak dobrze znacie to na wass to pestka. Podam ten skrypt bo w 2 to tylko pola .

  1. <?php
  2. $nick = $_POST['nick'];
  3. $mail = $_POST['mail'];
  4. $date=date('H:i d.m.Y');
  5. $pole = $_POST['pole'];
  6. $nick = HTMLSpecialChars($nick);
  7. $mail = HTMLSpecialChars($mail);
  8. $pole = HTMLSpecialChars($pole);
  9. $tresc = wordwrap($pole, 50, "\n", 1);
  10. $wynik = '<z>' . $nick . '</z> <c> <a href="mailto:' . $mail . '">' . $mail . '</a></c> <t>'.$date.'</t> <br><d>' . $tresc . '</d><br><br>';
  11. $plik = "komentarze.txt";
  12. $fp = fopen($plik, "a");
  13. fwrite ($fp, $wynik);
  14. fclose($fp);
  15. echo("Twój komentarz został wysłany! Aby zobaczyć komentarze <a href='index.php'>kliknij tutaj</a>");
  16.  
  17.  
  18. ?>
Ociu
  1. <?php
  2. $nick = $_POST['nick'];
  3. $mail = $_POST['mail'];
  4. $date=date('H:i d.m.Y');
  5. $pole = $_POST['pole'];
  6. $nick = HTMLSpecialChars($nick);
  7. $mail = HTMLSpecialChars($mail);
  8. $pole = HTMLSpecialChars($pole);
  9. if(strlen($pole) > 3) {
  10. $tresc = wordwrap($pole, 50, "\n", 1);
  11. $wynik = '<z>' . $nick . '</z> <c> <a href="mailto:' . $mail . '">' . $mail . '</a></c> <t>'.$date.'</t> <br><d>' . $tresc . '</d><br><br>';
  12. $plik = "komentarze.txt";
  13. $fp = fopen($plik, "a");
  14. fwrite ($fp, $wynik);
  15. fclose($fp);
  16. echo("Twój komentarz został wysłany! Aby zobaczyć komentarze <a href='index.php'>kliknij tutaj</a>");
  17. }else{
  18. echo("Twój komentarz nie został wysłany!");
  19. }
  20. ?>
dyziak
Najlepiej wyprowadzić walidacje poza obszar formularza w php - ajax - i tam (w osobnym pliku) php-em zwalidowac a nastepnie wyslać : -) Polecam jquery ajax lub skrócona wersja post. Poczytaj i zobaczysz - spodoba Ci sie :- ) W osobnym pliku zrob to co Ci kolega napisał i bedzie smigac jak wielkie oceaniczne śledzie :-)
thek
Ja bym postulował napisanie klasy walidacji. ógłbyś przepisywać powoli kod na obiektówkę, ale jeśli chcesz się dalej trzymać strukturalnego to nie widze problemu. Mogło by być coś w stylu:
- zmienna odpowiadająca za powodzenie walidacji,
- tablica pól z przypisanymi warunkami walidacji,
- ewentualnie tablica z wiadomościami walidatora.
Przykład podam w postaci malutkiej klasy, której pozbawię części funkcjonalności, żebyś za łatwo nie miał wink.gif
  1. class Validator {
  2. protected $valid;
  3. protected $rules;
  4. protected $messages;
  5. protected $errors;
  6.  
  7. public function __construct() {
  8. $this->valid = TRUE;
  9. $this->rules = array();
  10. $this->messages = array();
  11. $this->errors = array();
  12. }
  13.  
  14. public function isValid() {
  15. return $this->valid;
  16. }
  17.  
  18. public function add_constraint($field_name, $constraint, $additional_parameters = array(), $optional_message = '' ) {
  19. $this->rules[$field_name][$constraint] = $additional_parameters;
  20. $this->messages[$field_name][$constraint] = $optional_message;
  21. return $this;
  22. }
  23.  
  24. public function remove_constraint($field_name = NULL, $constraint = NULL) {
  25. foreach($this->rules AS $field => $rules) {
  26. if(NULL === $constraint) {
  27. if(NULL === $field_name) {
  28. $this->rules = array(); //kasuje wszystkie reguły we wszystkich polach
  29. } else {
  30. if( in_array($field_name, $this->rules) ) {
  31. $this->rules[$field_name] = array(); // kasuj wszystkie reguły pola;
  32. } //jako else możesz rzucić wyjątek o nie istnieniu danego pola
  33. }
  34. } else {
  35. if(NULL === $field_name) {
  36. foreach($this->rules AS $field => $rules) {
  37. if( array_key_exists($constraint, $rules) ) {
  38. unset( $this->rules[$field][$constraint] ); // kasuje regułę we wszystkich polach
  39. }
  40. }
  41. } else {
  42. // kasuj regułę w określonym polu, ale ten warunek zostawiam Tobie już jesli Ci pasuje podejście
  43. }
  44. }
  45. }
  46. return $this;
  47. }
  48.  
  49. public function validate($form_fields_array = array() ) {
  50. foreach($form_fields_array AS $field => $value) {
  51. if( in_array($field, $this->rules) ) {
  52. foreach($this->rules[$field] AS $key => $params) {
  53. $return = call_user_func($this->$key, $value, extract($params) ); // tu sobie pozabezpieczać trzeba
  54. if(FALSE === $return) {
  55. $this->valid = FALSE;
  56. $this->errors[$field][] = $this->messages[$field][$key];
  57. }
  58. }
  59. }
  60. }
  61. return $this;
  62. }
  63. // przykładowa funkcja sprawdzająca czy wymagane pole jest niepuste
  64. protected function required($value) {
  65. return empty($value) ? FALSE : TRUE;
  66. }
  67. }

Tu można naprawdę dużo pokombinować i to bardziej to szkic. Można przykładowo obiekt formularza przekazać do konstruktora już na starcie, co nam ładnie strukturkę stworzy, można mieć jakiś pakiet reguł standardowych wraz z ich komunikatami błędów, można pomyslec o możliwości podawania nie tylko reguł klasy Validator, ale także user defined czy wbudowanych PHP.
pawlo20
użytkownik Ociu dobrze pomógł . od razu działa 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.