0

我正在将数据从表单发送到应该连接到数据库然后更新表的 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);

?> 

有人可以告诉我我要去哪里错了吗?数据库未更新。我的表中没有输入任何值。

4

6 回答 6

0


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

于 2013-10-18T22:56:16.820 回答
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']."')";
于 2013-10-18T22:57:22.340 回答
0

首先,请使用类似 PDO 或 mySQLi 的预处理语句。

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

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

不过这非常危险,所以我强烈……强烈建议调查 PDO。

此外mysqli_query,如您的帖子评论中所述, for 的语法是错误的。

于 2013-10-18T22:55:36.550 回答
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) 时遇到的一个简单错误是用户没有正确的权限。我花了太多时间才发现,不要犯同样的错误;)

于 2013-10-18T23:27:47.433 回答
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();

?> 

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

于 2013-10-18T23:15:22.027 回答
0

经过测试

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

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

为了快速解决您的问题,您不会在传递查询时告诉它连接到您的数据库。

改变:

mysqli_query($sql);

至:

mysqli_query($con, $sql);

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

于 2013-10-19T01:13:13.140 回答