Php 如何使用表单控制进入sql数据库的不需要的数据和用户验证

Php 如何使用表单控制进入sql数据库的不需要的数据和用户验证,php,html,mysql,php-5.6,Php,Html,Mysql,Php 5.6,我是Php和Mysql新手,这是我的第一个项目。现在我已经创建了该项目的注册部分,但我遇到了一些问题: 1.我创建的错误似乎无法阻止不需要的数据进入数据库 2.如果出现错误,整个表单将被清除,而不是保留部分信息 3.我不知道为复选框表单类型创建错误的代码 我不知道检查用户名/电子邮件是否已被占用的代码。。尽管它们在Mysql中已经是独一无二的 以下是我的部分代码…任何形式的建议都将不胜感激,谢谢 <?php // define variables and set to empty

我是Php和Mysql新手,这是我的第一个项目。现在我已经创建了该项目的注册部分,但我遇到了一些问题:

1.我创建的错误似乎无法阻止不需要的数据进入数据库

2.如果出现错误,整个表单将被清除,而不是保留部分信息

3.我不知道为复选框表单类型创建错误的代码

  • 我不知道检查用户名/电子邮件是否已被占用的代码。。尽管它们在Mysql中已经是独一无二的
  • 以下是我的部分代码…任何形式的建议都将不胜感激,谢谢

      <?php
    
    
     // define variables and set to empty values
                $username="";
                $password="";
                $email="";
                $agreement="";
                $nameErr="";
                $passErr="";
                $emailErr="";
                $emailErr1="";
                $emailErr2="";
                $cboxErr="";
    
      function test_input($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
    
      }         
    
     if ($_SERVER["REQUEST_METHOD"] == "POST") {
       if (empty($_POST["username"])) {
          $nameErr = "Username is required";
       } else {
         $username = test_input($_POST["username"]);
                      // check if name only contains numbers letters and some special   characters
                 if (!preg_match("/^[a-zA-Z0-9@_]*$/",$username)) {
                 $nameErr = "Only letters , numbers , '@' , '_' allowed"; 
               }
       }
       if (empty($_POST['password'])) {
       $passErr = ' Password is required !';
       } else {
       $password = test_input($_POST['password']);
    
       if (!preg_match('/^[a-zA-Z0-9@_]*$/', $password)) {
              $passErr = 'password can only contain a upper/lower case letters ,             numbers, "_""@"';
    } 
     } 
    
     if (empty($_POST["email"])) {
     $emailErr = "Email is required";
     } else {
     $email = test_input($_POST["email"]);
    
     // check if e-mail address is well-formed
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
       $emailErr = "Invalid email format"; 
         }
      }
    
      if (empty($_POST["re-email"])) {
         $emailErr1 = "Please re-enter the email";
      } 
      else if ($_POST["email"] != $_POST["re-email"]){
          $emailErr2 = "The emails you entered do not match"; 
      }
      else {
         $email = test_input($_POST["re-email"]);
      }
    
      if (empty($_POST["agreement"])) {
          $tickErr = "Tick the box below ";
      } 
      else {
          $agreement = test_input($_POST["agreement"]);
      }
      }
    
    
    
    
     ?>
    
     <?php
        $msg="";
        require('connect.php');
    
        // If the values are posted, insert them into the database.
    
        if (isset($_POST['username']) && isset($_POST['password'])){
    
        $username = $_POST['username'];
    
        $email = $_POST['email'];
    
        $password = $_POST['password'];
    
        $username = mysql_real_escape_string( $username);
        $email= mysql_real_escape_string($email);
        $password= mysql_real_escape_string($password);
    
          $query = "INSERT INTO `user` (username, password, email) VALUES           ('$username', '$password', '$email')";
    
          $result = mysql_query($query);
    
          if($result){
    
            $msg = "User Created Successfully.";
    
             }
           }
    
       ?>
    
    
    
  • 我创建的错误似乎无法阻止不需要的数据进入数据库
  • 由于我的代表的原因,我还不能发表评论,但具体有哪些错误

  • 如果出现错误,整个表单将被清除,而不是保留一些信息
  • 可能最好从POST中获取值,并将值回送到 每个输入,例如

    <input class="formfield detail-box" type="text" id="username" name="username" size="40" placeholder="Username" value="<?php $_POST['username']; ?>"/></center></p>
    
  • 我不知道检查用户名/电子邮件是否已被占用的代码。。尽管它们在Mysql中已经是独一无二的
  • 尝试使用给定的用户名/电子邮件运行
    SELECT
    语句,如果查询返回结果,则拒绝请求,例如

    SELECT username FROM user WHERE username = ?;
    
    (使用
    参数作为发布的用户名)


    另一方面,您可能需要研究(用户恶意编辑语句),您的INSERT语句容易受到影响。另外,考虑对数据库中的密码进行加密。 1.我创建的错误似乎无法阻止不需要的数据进入数据库

    你没有制造任何错误。您只是将错误字符串分配给变量。无论您在哪里遇到错误,都可以尝试类似于
    抛出新异常(“无效电子邮件格式”)
    而不是
    $emailErr=“无效的电子邮件格式”。没有发生任何事情,因为您没有使用
    $emailErr
    执行任何操作

    2.如果出现错误,整个表单将被清除,而不是保留部分信息

    这是因为页面被重新加载。如果需要,可以在重新加载后重新填充表单,方法如下:
    
    
      <span class="error"><?php echo $tickErr; ?></span>
    
    SELECT username FROM user WHERE username = ?;