【问题标题】:PHP-Form validation and insertion using MySql使用 MySql 的 PHP-Form 验证和插入
【发布时间】:2014-04-14 04:34:09
【问题描述】:

我正在使用此代码来验证我的 html 表单,现在我需要将表单数据添加到 mysql 中的表中。我如何继续我知道创建连接和 sql 数据库的基础知识,但是由于我已经使用了表单的提交按钮,所以我不知道如何将数据放到可以再次插入的地方

<?php
// define variables and initialize with empty values
$nameErr = $passErr = $emailErr =$cpassErr="";
$name = $pass = $cpass = $email = "";


if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["username"])) {
        $nameErr = "Enter Username";
    }
    else {
        $name = $_POST["username"];
    }

    if (empty($_POST["password"])) {
        $passErr = "Enter password";
    }
    else {
        $pass = $_POST["password"];
    }
       if (empty($_POST["cpassword"])) {
        $cpassErr = "Retype password";
    }
    else {
        $cpass= $_POST["cpassword"];
    }

    if (empty($_POST["email"]))  {
        $emailErr = "Enter email";
    }
    else {
        $email = $_POST["email"];
    }


}
?>

<html>
    <head>
    <style>
     .error {
    color: #FF0000;
        } 
    </style>
    </head>
    <body>
   <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <table border="0" cellspacing="20">
      <tbody>
            <tr>
                <td>Username:</td>
                <td><input type="text" name="username" accept="" value="<?php echo htmlspecialchars($name);?>">
                    <span class="error"><?php echo $nameErr;?></span>
                </td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><input type="text" name="password" accept="" value="<?php echo htmlspecialchars($pass);?>">
                    <span class="error"><?php echo $passErr;?></span></td>
            </tr>
            <tr>
                <td>Confirm Password:</td>
                <td><input type="text" name="cpassword" accept=""value="<?php echo htmlspecialchars($cpass);?>">
                    <span class="error"><?php echo $cpassErr;?></span></td>
            </tr>
            <tr>
                <td>Email:</td>
                <td><input type="text" name="email" accept="" value="<?php echo htmlspecialchars($email);?>">
                    <span class="error"><?php echo $emailErr;?></span></td></td>
            </tr>
        </tbody>
    </table>
       <input type="submit" name="submit" value="Submit">
   </form>
    </body>

</html>

连接代码

<?php
$host="localhost";
  $username="root";
  $password="root";
  $db_name="LSDB";

    $con=mysqli_connect("$host","$username","$password","$db_name");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
  var_dump($_POST);

  $u=$_POST['username'];
  $p=$_POST['password'];
  $e=$_POST['email'];
  $ph=$_POST['phone'];

  $sql="INSERT INTO register (username,password,email,phone)
     VALUES 
     ('$u','$p','$e','$ph')";

  if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
mysqli_close($con);
?>

【问题讨论】:

  • 您已经将数据从表单分配给变量,现在扩展连接并使用这些变量
  • 我应该在哪里放置用于创建连接和插入值的代码?哦,不要担心电话的那个条目,它本来就不应该在那里
  • 旁注:您的var_dump($_POST); 不会显示任何内容,因为您“在”他们被分配之前就拥有了它。另外,为什么我有这个代码的“déjà vue”?
  • 如果你根本没有连接,试试不带引号$con=mysqli_connect($host,$username,$password,$db_name);
  • @fred 我应该如何组合代码以完成验证后的记录插入,即在我点击提交之后

标签: php mysql validation insertion


【解决方案1】:

当用户提交表单时,如果验证成功,那么您应该执行一个流程函数,您可以在其中放置所需的任意多的指令,包括将数据存储在数据库中,或将其打印到自动生成的网页。你需要的一切。

另一方面,您的代码看起来太简单了,因此容易受到跨站点脚本的攻击。您不仅应该验证字段是否为空,还应该使用一些正则表达式和函数 preg_match( ) 来过滤输入的字符。最好的保护是允许用户只输入每个字段中需要的字符,而不是那些以外的任何其他字符。

如何处理表单逻辑的例子:

if ($_POST['_submit_check']) {
    // If validate_form() returns errors, pass them to show_form()
    if ($form_errors = validate_form()) {
        show_form($form_errors);
    } else {
        // The data sent is valid, hence process it...
        process_form();
    }
} else {
    // The form has not been sent, hence show it again...
    show_form();
}

【讨论】:

  • 能否详细说明如何创建处理函数来处理数据?我不太关心atm的安全性我想将数据插入到sqlserver中。我想插入如果验证结果为真,最好在同一页面上,将数据写入 sql
  • 好的,我将添加一个示例代码......来自我自己的程序。稍等。
  • 用户提交表单时,'_submit_check'等于1
【解决方案2】:

首先我建议你转义输入。

另外值得注意的是,你可以使用准备好的语句和 mysqli 的面向对象的方式,因为大多数 OO 文档比程序方式更清晰。

喜欢:

<?php
$u=striptags($_POST['username']);
$p=striptags($_POST['password']);
$e=filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$ph=(int)$_POST['phone'];

$mysqli = new mysqli($host,$username,$password,$db_name); 
$query = "INSERT INTO register (username,password,email,phone) VALUES (?,?,?,?)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("sssi", $u, $p, $e, $ph);
$stmt->execute();
$mysqli->close();

?>

在您的密码上使用哈希也不会受到伤害,例如:

<?php

$salt = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
$passh = crypt($pass, '$6$'.$salt);
?>

请注意,您还需要将盐存储在 mysql 中,以便以后进行比较

因此,使用这些密码更安全,如果您的数据库被盗,密码将保持散列。

【讨论】:

  • 只是要注意准备好的语句防止sql注入:)
  • 我刚试了代码,出现以下错误gyazo.com/7b175b5e292cd69c0c15620f67fe0654
  • 三个第一个错误是您的字段为空,因此如果您确实在表单中输入了数据,则问题出在 html 上,第四个错误指向连接不起作用。您可以使用单独的文件来处理数据,例如 action="addtosql.php"
  • 这是我现在使用的全部代码pastebin.com/Er1Swh9Q,这是我将条形标签更正为条形标签时的输出gyazo.com/23d9be57ad2e3dc29b0665707636e03c:gyazo.com/e3d86570d240d7e77ec53daf8c3eb5d2
  • 大声笑对不起我的 strip_tags 错误有点困:)。未定义的索引错误是由“空”字段引起的。最后两个错误指向错误的密码,因此无法实例化对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多