[英]Register Form PHP not inserting values into DB, just reloading the page
[英]PHP form not inserting values into DB
我创建的表单存在问题(仅出于测试目的,我知道它很容易受到SQL注入的攻击)
基本上,表单不会插入数据库,但似乎在脚本上返回true。
代码如下:
form.php
<form action="create.php" method="post">
<p>Username: <input type="text" name="username" />
</p>
<p>Password: <input type="password" name="password" />
</p>
<p><input type="submit" value="Create" name= "cre" />
</p>
</form>
create.php
<?php
session_start();
$dbname = "obsidian";
if(isset($_POST['cre'])){
$username = $_POST['username'];
$password = $_POST['password'];
$mysqli = new mysqli('localhost','admin1', 'password1','obsidian' ) or die('Failed to connect to DB' . $mysqli->error );
$hashed_password = password_hash($password,PASSWORD_DEFAULT);
$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
if($registerquery = true)
{
echo "<h1>Success</h1>";
echo "<p>Your account was successfully created. Please <a href=\"index.php\">click here to login</a>.</p>";
}
else
{
echo "<h1>Error</h1>";
echo "<p>Sorry, your registration failed. Please go back and try again.</p>";
}
}
?>
我收到成功消息,但是正如我所说,这些值不会插入数据库中。
任何帮助都会很好。
这定义查询,但不运行它:
$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
这不是成功的“测试”。 只是看到变量为true:
if($registerquery = true)
=
是分配, ==
用于相等性测试。
您必须查询数据库。 尝试这个:
$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
if ($mysqli->query($registerquery))
{
// success.
}
else
{
// failed.
}
您错过了将SQL查询实际交给数据库的步骤。
$mysqli->query($registerquery);
必须先运行,然后才能插入。
您还可以将if语句更改为以下内容
if ($mysqli->query($registerquery))
另外,您当前使用的是单个=
,它设置了$registerquery
而不是检查其值。
您在这里所做的一切:
$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
if($registerquery = true)
先设置一个字符串,然后再将该字符串设置为true。 这总是会返回true。 这有两个问题:
另外,您可能不再应该使用mysqli内置函数,因为它们很快就会被弃用。 我建议在进一步进行操作之前切换到PDO 。
正式地,您应该执行以下操作:
if(isset($_POST['cre'])){
$username = $_POST['username'];
$password = $_POST['password'];
$mysqli = new mysqli('localhost','admin1', 'password1','obsidian' ) or die('Failed to connect to DB' . $mysqli->error );
$hashed_password = password_hash($password,PASSWORD_DEFAULT);
$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
$stmt=$mysqli->prepare($registerquery);
if($stmt->execute())
{
echo "<h1>Success</h1>";
echo "<p>Your account was successfully created. Please <a href=\"index.php\">click here to login</a>.</p>";
}
else
{
echo "<h1>Error</h1>";
echo "<p>Sorry, your registration failed. Please go back and try again.</p>";
}
$stmt->close();
}
另外,您只能调用mysqli_query
if($mysqli->query($registerquery)){
....
}
那就足够了。 如果需要绑定参数并以不同的值对同一查询进行多次调用,则第一次调用会更好。
问候。-
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.