регистрационная форма в php - PullRequest
0 голосов
/ 08 июня 2011
 $error1=''; 
 $error2=''; 
$error3=''; 
$error4=''; 
$error5=''; 
$error6='';

$yourname='';
$email='';
$email2='';
$password='';
$password2='';
$country='';

     if (isset($_POST['Registerme']))
       { 

$_POST['yourname']=$yourname;
$_POST['email']=$email;
$_POST['email2']=$email2;
$_POST['password']=$password;
$_POST['password2']=$password2;
$_POST['country']=$country;

if($yourname==''){

    $error1='name required';

    } 


if($email==''){

    $error2='email required';

    } 
if($email2==''){

    $error3='required field';

    } 


if($password==''){

    $error4='password required';

    } 


    if($password2==''){

    $error5='required field';

    } 


if($country==''){

    $error6='country required';

    } 



       if(empty($error1) && empty($error2) && empty($error3) && empty($error4) &&     empty($error5) && empty($error6))

      {echo 'mysql query goes here and add the user to database';}

       }///main one

      else {$error1=''; 
     $error2=''; 
         $error3=''; 
         $error4=''; 
          $error5=''; 
            $error6='';}

это скрипт проверки регистрации. в моей регистрационной форме есть два поля электронной почты и пароль filelds.second поля для подтверждения. Я хочу проверить, введена ли пользователем та же информация в обоих полях. Если я хочу сделать это, в этом сценарии я должен использовать другой оператор if? или я должен использовать еще, если? я запутался в этом шаге ...

Ответы [ 5 ]

1 голос
/ 08 июня 2011

Некоторые комментарии:

  • Вы ДОЛЖНЫ дезинфицировать вход! Взгляните на лучший метод для очистки пользовательского ввода с помощью php .
  • Ваши назначения: вместо "$ _POST ['yourname'] = $ yourname;" это должно быть "$ yourname = $ _ POST ['yourname'];".
  • Вы используете много переменных для контроля ошибок, и после этого, если все прошло хорошо, вы просто забудете сообщения об ошибках в последнем блоке else. Используйте какой-нибудь массив для строк ошибок и используйте его!
  • Вы уверены, что не проверяете имена пользователей / пароли, чтобы они не содержали пробелов или странных символов, или электронные письма были действительными?

Пример кода ...:

// Simple sanitize function, complete it
function sanitize_input ($inputstr) {
    return trim(mysql_real_escape_string($inputstr));
}

if (isset ($_POST['Registerme']) {
    // array of error messages to report
    $error_messages = array();
    $isvalid = true;

    // Assignment 
    $yourname = sanitize_input ($_POST['yourname']);
    $email = sanitize_input ($_POST['email']);
    $email2 = sanitize_input ($_POST['email2']);
    $password = sanitize_input ($_POST['password']);
    $password2 = sanitize_input ($_POST['password2']);
    $country = sanitize_input ($_POST['country']);

    // Validation
    if (empty ($yourname)) {
        $error_messages[] = "You must provide an username";
    } 

    if (empty ($password)) {
        $error_messages[] = "You must provide a password.";
    }
    elseif ($password !== $password2) {
        $error_messages[] = "Passwords do not match.";
    }

    // Same for email, you caught the idea

    // Finally, execute mysql code if all ok
    if (empty($error_messages)) {
       // Execute mysql code
       isvalid = true;
    }
}

// After form processing, use isvalid which is false if there are errors
// and the error_messages array to report errors
1 голос
/ 08 июня 2011

Я думаю, что вы хотите сделать это:

$yourname = $_POST['yourname'];
$email = $_POST['email'];
$email2 = $_POST['email2'];
$password = $_POST['password'];
$password2 = $_POST['password2'];
$country = $_POST['country'];

Во-вторых, используйте массив ошибок:

$errors = array();

Вложенное третье использование ifs (просто предложение)

     if (!empty($_POST['password1'])) {
          if ($_POST['password1'] != $_POST['password2']) {
              $errors[] = '<font color="red">The 2 passwords you have entered do not match.</font>';
          } else {
              $password = $_POST['password1'];
          }
      } else {
          $errors[] = '<font color="red">Please provide a password.</font>';
      }
1 голос
/ 08 июня 2011

Просто добавьте простые проверки. Я бы не совмещал проверку с общей проверкой пароля - я могу себе представить, что вы хотели бы сообщить пользователю, что пошло не так точно .

if ($password1 !== $password2) {
    // Add an specific error saying the passwords do not match.
}

Я бы заменил пользователя свободных ошибок на массив вроде:

$aErrors = array();

if ($password1 !== $password2) {
    $aErrors[] = 'Another specific error!';
}

if (empty($password1) || empty($password2)) {
    $aErrors[] = 'Another specific error';
}

if (empty($aErrors)) {
    // Process the form!
}
1 голос
/ 08 июня 2011

Есть много проблем с вашим кодом.

1. You are assinging $_POST['key'] = $somevalue, while I think you mean $somevar = $_POST['key']
2. Use an array for all error messages as it'll make your life a bit easier ..
3. To compare password use something like
if ($password1 !== $password2) {
}

так .....

$errors = array();

так что вы бы отметили что-то вроде ..

if ($password1 !== $password2) {
  $errors[] = 'Password dont match';
}

if(count($errors) > 0) { //if there are errors
foreach($errors as $err) {
  echo $err.' <br />';
}
} else {
// whatever you want to do if no error
}

Я также предлагаю санировать значения $ _POST, прежде чем использовать их в своих запросах.Надеюсь, это поможет.

1 голос
/ 08 июня 2011

добавить дополнительные условия к вашему второму оператору if.например,

if($email=='' || $email != $email2){
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...