简体   繁体   English

php 中的注册表单

[英]registration form in php

 $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='';}

this is a registration validation script.这是一个注册验证脚本。 in my registration form there are two email and password filelds.second fields are for confirmation.i want to check weather user typed same information in that both field.if i want to do that in this script should i use another if statement?在我的注册表单中有两个 email 和密码 filelds.second 字段用于确认。我想检查天气用户在这两个字段中输入的相同信息。如果我想在这个脚本中这样做,我应该使用另一个 if 语句吗? or i should use else if?或者我应该使用 else if? i am confused about that step...我对那一步感到困惑...

add additional conditions to your second if statement.在第二个 if 语句中添加附加条件。 eg例如

if($email=='' || $email != $email2){
...

Just add simple checks.只需添加简单的检查。 I wouldn't combine the check with the general password check - as I can imagine you would like to tell the user what went wrong exactly .我不会将检查与一般密码检查结合起来——我可以想象你想告诉用户究竟出了什么问题。

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

I would replace the user of loose errors to an array like:我会将松散错误的用户替换为如下数组:

$aErrors = array();

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

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

if (empty($aErrors)) {
    // Process the form!
}

There are lots of issues with your code.你的代码有很多问题。

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) {
}

so.....所以.....

$errors = array();

so you'd check something like..所以你会检查类似..

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
}

I'll also suggest to sanitise the $_POST values before you use them in your queries.我还建议在查询中使用 $_POST 值之前对其进行清理。 I hope it helps.我希望它有所帮助。

I think you mean to do this:我认为你的意思是这样做:

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

Second this make use of an errors array:其次,这使用了一个错误数组:

$errors = array();

Third use nested ifs(just a suggestion)第三次使用嵌套 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>';
      }

Some comments:一些评论:

  • You MUST sanitize input!你必须清理输入! Take a look at best method for sanitizing user input with php .查看使用 php 清理用户输入的最佳方法
  • Your assignments: Instead of "$_POST['yourname']=$yourname;"你的任务:而不是“$_POST['yourname']=$yourname;” it should be "$yourname=$_POST['yourname'];".它应该是“$yourname=$_POST['yourname'];”。
  • You're using a lot of variables for error control, and after that if all went well you simply forget the error messages in the last else block.您使用了很多变量来控制错误,然后如果一切顺利,您只需忘记最后一个 else 块中的错误消息。 Use some kind of array for error strings, and use it!对错误字符串使用某种数组,并使用它!
  • Are you sure you aren't validating usernames/passwords to not contain spaces or weird characters, or emails to be valid?你确定你没有验证用户名/密码不包含空格或奇怪的字符,或者电子邮件是有效的吗?

Some sample code...:一些示例代码...:

// 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM