数据库没有从PHP更新

时间:2013-10-18 22:53:10

标签: php mysql

我将数据从表单发送到php脚本,该脚本应该连接到数据库,然后更新表。它基本上是所有注册用户的数据库。由于某种原因,数据库表没有使用值进行更新。

表单代码为:

<body>
          <div class="header">
          Registration
          </div>

          <div class="content" style="text-align:center";>

               <form name="input" action="success.php" method="post"><br>
                  First name: <input type="text" name="firstname"><br/>
                  Last name: <input type="text" name="lastname"><br/>
                  Age: <input type="text" name="age"><br/>
                  Date of Birth: <input type="text" name="dateofbirth"><br/>
                  Email: <input type="text" name="email"><br/>
                  <input type="submit" value="Submit"><br/><br>
               </form>

          </div>

        <br><br><a href="index.html" style="font-size: 22px";>Back</a>
    </body>

我的PHP代码是:

<?php
    $con=mysqli_connect("example.com","myname","123","database1");
    $sql="INSERT INTO user (fname, lname, age, dob, email) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[age]','$_POST[dateofbirth]','$_POST[email]')";
    mysqli_query($sql);
    mysqli_close($con);

?> 

有人可以告诉我哪里出错了?数据库没有得到更新。我的表格中没有输入任何值。

6 个答案:

答案 0 :(得分:0)

首先,请使用像PDO或mySQLi准备好的语句。

其次,数据库没有得到更新,因为你需要连接(再次,不要这样做,请!)这些值,如下所示:

$sql="INSERT INTO user (...) VALUES (".$_POST['firstname'].",".$_POST[]."...)";

这是非常危险的,所以我非常强烈......强烈建议调查PDO。

同时 mysqli_query的语法错误,如您帖子中的评论中所述。

答案 1 :(得分:0)

尝试在$ _POST [...]周围加上花括号 像
$sql="INSERT INTO user (fname, lname, age, dob, email) VALUES ('{$_POST[firstname]}','...

答案 2 :(得分:0)

变化

 $sql="INSERT INTO user (fname, lname, age, dob, email) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[age]','$_POST[dateofbirth]','$_POST[email]')";

$sql="INSERT INTO user 
(fname, lname, age, dob, email) VALUES 
('".$_POST['firstname']."','".$_POST['lastname']."','".$_POST['age']."','".$_POST['dateofbirth']."','".$_POST['email']."')";

答案 3 :(得分:0)

运行SQL语句时始终检查错误。除非您检查查询是否成功,否则永远不会知道出了什么问题,然后打印错误。

同样正如其他人所评论的那样,请不要在SQL中直接包含$ _GET或$ _POST变量。这会让你受到黑客攻击。

以下是对此进行编码的正确方法示例:

<?php
    $con=mysqli_connect("example.com","myname","123","database1");
    if ($con->connect_error) {
        trigger_error($con->connect_error, E_USER_ERROR);
    }

    $sql="INSERT INTO user (fname, lname, age, dob, email) VALUES (?, ?, ?, ?, ?)";
    if (($stmt = $con->prepare($sql)) === false) {
        trigger_error($con->error, E_USER_ERROR);
    }

    $stmt->bind_param("sssss", $_POST["firstname"], $_POST["lastname"], 
        $_POST["age"], $_POST["dateofbirth"], $_POST["email"]);
    if ($stmt->execute() === false) {
        trigger_error($stmt->error, E_USER_ERROR);
    }

    $con->close();

?> 

现在,如果准备或执行查询时出现问题,它会向您报告。

答案 4 :(得分:0)

创建预准备语句并不难。简单地复制粘贴,你很好。我使用escapeshellarg添加了一些额外的安全性,应该更多地使用它,因为它准备好的语句并不总是100%安全。

<?php
$firstname = escapeshellarg($_POST["firstname"]);
$lastname = escapeshellarg($_POST["lastname"]);
$age = escapeshellarg($_POST["age"]);
$dateofbirth = escapeshellarg($_POST["dateofbirth"]);
$email = escapeshellarg($_POST["email"]);

$con=mysqli_connect("example.com","myname","123","database1");
if (mysqli_connect_errno($con))
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}


$stmt = mysqli_stmt_init($con);
$query =  "INSERT INTO user (fname, lname, age, dob, email) VALUES (?, ?, ?, ?, ?)";
mysqli_stmt_prepare($stmt, $query);
mysqli_stmt_bind_param($stmt, "sssss", $firstname, $lastname, $age, $dateofbirth, $email);
if(mysqli_stmt_execute($stmt))
{
    mysqli_close($con);
}

?>

请注意,“sssss”代表字符串。如果你的年龄是一个int变量,那么请改用“ssiss”。

PS。我曾经使用WAMP(Apache)的一个简单错误是用户没有正确的权限。我花了太多时间才发现,不要犯同样的错误;)

答案 5 :(得分:0)

测试

我创建了一个表格,其中包含您发布的相同条目,并得出了这个结论。

但首先;正如其他人所指出的那样,一次又一次地说,MySQL_的使用已被弃用,并将在不久的将来删除。因此强烈建议使用MySQLi_和/或PDO

要快速解决问题,在传递查询时,您并没有告诉它连接到您的数据库。

变化:

mysqli_query($sql);

为:

mysqli_query($con, $sql);

它会起作用。它对我有用,因此从理论上讲它也适合你。