Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapamiętanie zmiennych
Forum PHP.pl > Forum > PHP
bliitz
Mam problem z zapamiętaniem zmiennych w formularzu.

plik signup.php
  1. <?php
  2. require_once ('header.php');
  3. require_once ('validate.class.php');
  4. ?>
  5.  <div id="signup">
  6. <?php
  7.  if(isset($_POST['signup'])) {
  8. $validator = new ValidateSignUp();
  9. $validator->ValidatePHP();
  10. }
  11. ?>
  12. <h1 style="margin-left: 20px;">Rejestracja</h1>
  13. <h5 style="margin: 0 0 30px 20px; font-size: 10px;">Przyłącz się i załóż nowe konto!</h5>
  14. <div style="margin-left: 20px; font-weight: bold;">
  15. <span>Pola oznaczone <span style="color:#FF0000">*</span> są wymagane.</span>
  16. </div>
  17. <form method="post" name="formularz">
  18. <div>
  19. <label for="email" id="email_label">Adres email: <span class="require_field">*</span></label>
  20. <input name="email" id="email" type="text" size="27" maxlength="45" />
  21. </div>
  22.  <div>
  23. <label for="login_sign" id="login_label_sign">Login: <span class="require_field">*</span></label>
  24. <input name="login_sign" id="login_sign" type="text" size="16" maxlength="20" />
  25.  </div>
  26.  <div>
  27.  <input name="signup" type="submit" value="Zarejestruj" style="margin-left: 200px;" class="submit" />
  28.  </form>


klasy sprawdzające w pliku validate.class.php

  1. <?php
  2. require 'dbFns.php';
  3. class ValidateSignUp extends Database {
  4.  
  5. public function ValidatePHP() {
  6.  
  7. if(!$this->validateEmail($_POST['email'])) {
  8. print 'zly email';
  9. return 0;
  10. }
  11.  
  12. if(!$this->validateLogin($_POST['login_sign'])) {
  13. print 'zly login';
  14. return 0;
  15. }
  16.  
  17. }
  18.  
  19. public function safe_output($string) {
  20.  
  21. $string = trim($string);
  22. $string = strip_tags($string);
  23. $string = htmlentities($string);
  24.  
  25. return $string;
  26. }
  27.  
  28. private function validateEmail($value) {
  29. $value = $this->safe_output($value);
  30. $value = mysql_real_escape_string($value);
  31. $query = parent::query('SELECT email FROM users WHERE email = '."'$value'");
  32. if(parent::mysql_num_rows($query) > 0)
  33. return 0; //zajety email
  34. $pattern = '/^w+([.-]?w+)*@w+([.-]?w+)*(.w{2,4})+$/';
  35. return preg_match($pattern, $value)? 1 : 0;
  36. }
  37.  
  38. private function validateLogin($value) {
  39. $value = $this->safe_output($value); //walidacja danych wejściowych
  40. $value = mysql_real_escape_string($value);
  41. if($value == null || strlen($value) < 3 || strlen($value) > 16) {
  42. return 0;
  43. }
  44. }
  45. ?>


i nie mam pojęcia dlaczego po walidacji danych znikają wartości z pól. Przecież skrypt wykonuje się w tym samym pliku, sesja jest uruchomiona, czy zwracanie wartości 0 przez funkcje powoduje wyzerowanie się pól formularza?
netmare
Dlatego, że to nie jest JS. Musisz do inputów dodać parametr value i przypisywać mu każdorazowo wartość z $_POST. Proponuję użyć też htmlentities lub htmlspecialchars przed wstawieniem do formularza.
bliitz
Cytat(netmare @ 8.04.2008, 08:16:03 ) *
Dlatego, że to nie jest JS. Musisz do inputów dodać parametr value i przypisywać mu każdorazowo wartość z $_POST. Proponuję użyć też htmlentities lub htmlspecialchars przed wstawieniem do formularza.


to teraz to każdego value musze pisać warunek, np. taki?

  1. $email = $validator->safe_output($_POST['email']);
  2.  
  3. <input ... value="<?php if(isset($email)print $email : null);?>" />


i czy jest to optymalne rozwiązanie?
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.