PHP表单未将值插入数据库
我创建的表单有一个问题,我只是出于测试目的,我知道它容易受到SQL注入的攻击 基本上,表单不会插入到数据库中,但它似乎在脚本中返回true 代码如下: form.phpPHP表单未将值插入数据库,php,mysql,Php,Mysql,我创建的表单有一个问题,我只是出于测试目的,我知道它容易受到SQL注入的攻击 基本上,表单不会插入到数据库中,但它似乎在脚本中返回true 代码如下: form.php <form action="create.php" method="post"> <p>Username: <input type="text" name="username" /> </p> <p>Password
<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>";
}
}
?>
我得到了成功消息,但正如我所说的,这些值不会被插入到数据库中
任何帮助都会很好。您错过了将SQL查询实际交给数据库的步骤
$mysqli->query($registerquery);
必须先运行,然后才能插入
您还可以将if语句更改为以下内容
if ($mysqli->query($registerquery))
此外,您当前正在使用一个=,它设置$registerquery而不是检查其值。您错过了将SQL查询实际交给数据库的步骤
$mysqli->query($registerquery);
必须先运行,然后才能插入
您还可以将if语句更改为以下内容
if ($mysqli->query($registerquery))
此外,您当前正在使用一个=,它设置$registerquery而不是检查其值。您在这里所做的一切:
$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
if($registerquery = true)
正在设置字符串,然后稍后将该字符串设置为true。这总是会变成真的。这有两个问题:
您需要执行存储在字符串中的SQL语句,以便数据库中发生任何事情。
您并不是真正检查返回值==,而是使用=,它只是设置变量。一个非常常见的错误。
此外,您可能不应该再使用mysqli内置函数,因为它们很快就会被弃用。我建议在进一步移动之前切换到。您在这里所做的一切:
$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
if($registerquery = true)
正在设置字符串,然后稍后将该字符串设置为true。这总是会变成真的。这有两个问题:
您需要执行存储在字符串中的SQL语句,以便数据库中发生任何事情。
您并不是真正检查返回值==,而是使用=,它只是设置变量。一个非常常见的错误。
此外,您可能不应该再使用mysqli内置函数,因为它们很快就会被弃用。我建议在进一步移动之前切换到。您必须查询数据库。试试这个:
$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
if ($mysqli->query($registerquery))
{
// success.
}
else
{
// failed.
}
以下是文档:您必须查询数据库。试试这个:
$registerquery = "INSERT INTO users (username, hash) VALUES('$username', '$hashed_password')";
if ($mysqli->query($registerquery))
{
// success.
}
else
{
// failed.
}
以下是文档:这定义了一个查询,但没有运行它: 这不是对成功的测试。只需将变量设置为true:
if($registerquery = true)
=是赋值,==用于相等性测试。这定义了一个查询,但不运行它: 这不是对成功的测试。只需将变量设置为true:
if($registerquery = true)
=是赋值,==用于相等性测试。正式地说,您应该这样做:
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();
}
那就足够了。如果需要绑定参数并使用不同的值对同一查询进行多次调用,则第一次调用更好
关于。-正式地说,你应该这样做:
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();
}
那就足够了。如果需要绑定参数并使用不同的值对同一查询进行多次调用,则第一次调用更好
关于。-您从未实际在数据库上运行Insert查询。。。。您很容易受到影响,您是否会在=和==?警告:使用mysqli时,您应该使用参数化查询,并将用户数据添加到查询中。不要使用字符串插值来完成此操作,因为这样会创建严重的错误。如果您在处理此类低级数据库调用时遇到问题,我强烈建议您采用适合您的风格和需要的类调用。感谢帮助人员-抱歉,我是新手。您从未在数据库上实际运行Insert查询。。。。您很容易受到影响,您是否会在=和==?警告:使用mysqli时,您应该使用参数化查询,并将用户数据添加到查询中。不要使用字符串插值来完成此操作,因为这样会创建严重的错误。如果您在处理此类低级数据库调用时遇到问题,我强烈建议您采用适合您的风格和需要的类调用。感谢各位的帮助-抱歉,我是新手。他实际上并没有检查它。请注意,并进行编辑。最重要的一点是,他根本没有执行任何SQL语句。我不确定这是否值得投反对票。我没有投反对票。不知道是谁做的,但我的答案也被否决了,所以我将其删除,因为周围显然有太多愚蠢的人。我否决了用户的答案,因为他的答案中只有5个字。大约30秒后,所有其他人的答案都同时被否决……谢谢。我想这就解释了:他实际上并不是在检查它,而是经过适当的记录和编辑。最重要的一点是,他根本没有执行任何SQL语句。我不确定这是否值得投否决票,我投了
不要投反对票。不知道是谁做的,但我的答案也被否决了,所以我将其删除,因为周围显然有太多愚蠢的人。我否决了用户的答案,因为他的答案中只有5个字。大约30秒后,所有其他人的答案都同时被否决……谢谢。我想这就解释了:是的,它仍然需要准备、绑定参数和执行调用。是的,它仍然需要准备、绑定参数和执行调用。