通过 HTML 表单执行查询


Executing query through HTML form

views/registration.php

<form action="classes/registration.php" method="post">
Username: <input type="text" name="username"><br>
Password: <input type="text" name="password"><br>
<input type="submit">
</form>

课程/注册.php

if(isset($_POST['submit']))
{
 // Define form variables
 $username = $_POST['username'];
 $password= $_POST['password'];
 // Insert form data into database
 $query = "INSERT INTO users (username, password)
 VALUES ('$username', '$password')";
 if(mysqli_query($conn, $query))
 {
    echo "Registration successfull.";
 }
}

问题是,当我单击提交时,我得到一个空白页。查询未执行。

我认为问题可能是因为我的值设置不正确,所以我做了以下操作:

VALUES ('$_POST['password']', '$_POST['password']')";

但这给了我一个错误,大概是因为我使用的是"内部"

所以现在我又回到了原点,不确定为什么我的查询没有被执行

你得到一个空白页,因为如果没有设置 $_POST 提交,你不会回显某些内容。

if(isset($_POST['submit']))

永远不会为真,因为您的 $_POST['submit'] 永远不会设置。您需要为您的提交提供一个名称,这个(名称)是获得的 POSTed/您可以在$_POST[' /*name of input*/ ']内访问的内容

将您的表单更改为以下内容,然后您应该会看到您的

echo "Registration successfull.";

.HTML:

<form action="classes/registration.php" method="post">
Username: <input type="text" name="username"><br>
Password: <input type="text" name="password"><br>
<input type="submit" name="submit"> <!-- <<<<<<<<<<< here -->

作为旁注,您绝对应该考虑使用预准备语句。使用插入查询运行注册表单就像邀请那些热衷于破坏您的服务器的人。您可能希望尝试如下查询:

$query = $conn->prepare("INSERT INTO users (username, password) VALUES (?,?)");
$query->bind_param('ss',$username,$password);
$query->execute;

这样,您将免受 mysql 注入的影响。

您的文件名和路径似乎不匹配(根据您提供的文件名)。

无论您是否保留:

views/registration.php
views/classes/registration.php

但是,如果您遵循:

--/classes
         /registration.php
--/views
        /registration.php

[注意:"--/"是根目录的路径]

然后,表单操作classes/registration.php将不会消失。所以改变它:

<form action="../classes/registration.php" method="post">

我建议遵循命名约定:

文件名 - 对于带有 HTML 表单的页面,以及

filename_action- 用于操作页面

还要注意用户baao在其他答案中提到的可能的错误情况。