php - 如何将表单数据插入数据库

标签 php mysql

我正在尝试将表单数据插入mysql数据库连接页面正常工作

但我不知道代码中存在什么问题。

我一遍又一遍地检查代码,找不到错误,但它不起作用。

尝试注册后,如何将数据插入mysql表中。

我在 Windows 中工作。

这是我的源代码:

<?php 

        $con = mysql_connect("localhost", "root", "", "tut"); 

?>

<?php

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



        $FName= $_POST['First_name'];
        $LName = $_POST['Last_name'];
        $Email = $_POST['Email'];
        $PW = $_POST['Password'];

        $sql = mysql_query("INSERT INTO users VALUES('', {$FName}','{$LName}','{$Email}','{$PW}')", $con);

        if(isset($_POST['First_name'])){$FName = $_POST['First_name'];}

    }

?>

<!DOCTYPE html>
<html>
<head>
    <title>Register</title>
    <link rel="stylesheet" type="text/css" href="style.css">
    <link rel="stylesheet" type="text/css" href="menu.css">
</head>
<body>
    <div class="container">
        <div class="header">
            <img src="index.jpg" style="width: 20%;height: 65px; align: center;">   
        </div>
        <div class="menu" id="menu">
            <nav>
                <ul class="cssmenu">
                    <li><a href="#">Register</a></li>
                    <li><a href="#">Log In</a></li>
                </ul>
            </nav>
        </div>
        <div class="leftbody">
            <img src="index.jpg">
        </div>
        <div class="rightbody">
            <form action="register.php" method="POST" id="registerform">
                <div class="Formelement">
                    <input type="text" name="First_name" class="tfield" required="required" placeholder="First_Name">
                </div><br>

                <div class="Formelement">
                     <input type="text" name="Last_name" class="tfield" required="required" placeholder="Last_Name">
                </div><br>

                <div class="Formelement">
                    <input type="text" name="Email" class="tfield" required="required" placeholder="Email">
                </div><br>

                <div class="Formelement">
                     <input type="password" name="Password" class="tfield" required="required" placeholder="Password">
                </div><br>

                <input type="submit" name="Submit" value="Register">
            </form>
        </div>
        <div class="footer"></div
        >
    </div>
</body>
</html>

最佳答案

同时jophabanswer可能有助于解决您目前的情况,但您应该注意以下几点。

1。 mysql_error

如果正确使用此方法,您甚至可能不需要发布问题。此方法返回所引发错误的文本消息,并可以为您提供详细信息,例如“字段列表”中的未知列“xx”

与您当前的设置一起使用可能类似于:

$sql = mysql_query("INSERT INTO users VALUES('', {$FName}','{$LName}','{$Email}','{$PW}')", $con);
if (!$sql) die(mysql_error($con));

这会让您知道您有语​​法错误,如下所示:VALUES('', {$FName}' <- 请注意,在第一个{

2。 SQL Injection

您需要注意,您所遵循的方法已被弃用,并且有充分的理由。您所做的就是允许任何知道如何轻松破解您的数据库并获取他们需要的所有信息的用户。最好的下一步是立即停止使用这些方法并了解 MySQLi .

MySQLi 允许名为 Prepared Statements 的东西,这极大地有助于减少您的脆弱性。使用 MySQLi,您的代码可能如下所示:

$mysqli = new mysqli("localhost", "root", 'ge7@P@s$w04D', "tut");
if (mysqli_connect_errno()) die("Connect failed: " . mysqli_connect_error());

if (!($stmt = $mysqli->prepare("INSERT INTO users (name_first, name_last, email, pass) VALUES (?, ?, ?, ?)"))) die("Preperation failed: " . mysqli_error($mysqli));

$FName= $_POST['First_name'];
$LName = $_POST['Last_name'];
$Email = $_POST['Email'];
$PW = $_POST['Password'];

if (!($bind = mysqli_stmt_bind_param($stmt, "ssss", $FName, $LName, $Email, $PW))) die("Bind failed: " . E_USER_ERROR);

if (!($exec = mysqli_stmt_execute($stmt))) die("Failed to execute query: " . mysqli_stmt_error($stmt));

这只是随口一说,但是一旦你多学习一点,你就会更好地理解这个想法。

<小时/>

更多阅读:Choosing an API

<小时/>

作为替代方案,您也可以考虑 PDO .

<小时/>

最后注意事项:Password Hashing

切勿使用密码文本/始终以某种方式对其进行哈希处理。如果您想维护任何用户安全,这一点极其重要。您和您的数据库永远不应该知道用户的密码是什么。如果他们不记得了,那么你就为他们提供一个验证过程来重置它。我老家的一家本地银行就这么做了,我警告他们两年了,为什么这样做很糟糕。最后,在无视我所有的警告之后,我带着一台笔记本电脑走进去,未经通知就在经理办公室坐下,开始提取每个人的密码并向他展示。当然,一开始他骂了我,还威胁要报警。在短短几分钟之内,我就说服了他这个问题,并最终得到了感谢,并因让他注意到这个错误而得到了丰厚的补偿。毫无疑问,这是永远不要做的前 5 件事。

请详细了解如何使用类似 password_hash 的内容

使用方式如下:

/** 
 *  This code will benchmark the server to determine how high of a cost i can
 *  afford. I want to set the highest cost that I can without slowing down
 *  the server too much. 8-10 is a good baseline, and more is good if the servers
 *  are fast enough. The code below aims for ≤ 50 milliseconds stretching time,
 *  which is a good baseline for systems handling interactive logins.
 *  */
function getCost() {
   $timeTarget = 0.05; // 50 milliseconds
   $cost = 8;
   do {
       $cost++;
       $start = microtime(true);
       password_hash("test", PASSWORD_BCRYPT, ["cost" => $cost]);
       $end = microtime(true);
   } while (($end - $start) < $timeTarget);
   return $cost;
}

/** getHash($pass)
 *  */
function getHash($pass) {
    return password_hash($pass, PASSWORD_DEFAULT, [ 'cost' => getCost() ]);
}

$hashPass = getHash($_POST['Password']);

关于php - 如何将表单数据插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38412305/

相关文章:

php - 如何从mysql中的用户费率表中获取用户明智的列表

php - 使用 AJAX 向服务器发送数据?

PHP 用规则分割电子邮件

php - 显示产品的计量单位

mysql - 从连接表中获取具有最小日期的行,但不显示该日期?

mysql - 选择特定日期的数据

php - 数据库中的 DATETIME 问题

php - 从列中选择有限的数据

php - 使用 Ajax 和 JQuery 从 PHP 文件获取数据

php - Symfony3 无法使用服务中的路由器创建已翻译的路由