基本的(所以我认为)工作注册表,我浏览了它,没有看到我的脚本中有任何大洞。
我的主要问题是他们的代码完全运行没有错误,但是当我在phpMyAdmin中回头看我的表时,最终的echo语句没有出现,并且没有插入细节。
<? php
require 'connect.php';
if (isset($_POST['username', 'password', 'firstname', 'lastname', 'email', 'age']){
$username = $_POST['username'];
$password = $_POST['password'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$age = $_POST['age'];
$query = "INSERT INTO 'user_details'.'user_login_details' ('id', 'username', 'firstname', 'lastname', 'email', 'password', 'age) VALUES (NULL, '$username', '$firstname', '$lastname', '$email', '$password', '$age')";
$result = mysqli_query($query);
if ($result == true){
echo "User Created Successfully. Welcome to the family !";
}
}
?>
有几个可能的原因导致您的 echo 语句未执行
脚本运行失败
确保您的服务器可以运行 PHP 脚本,并且此脚本可以运行。通过在此脚本顶部传递一个简单的 echo 语句进行测试,紧跟在开始 <?php
标记之后(在"
有条件失败
如果条件在第五行失败,则查询将不会执行。我怀疑您想确保每个变量都存在于 $_POST 中,但代码现在没有这样做。相反,请尝试单独检查每个键:
if (isset($_POST['username'] && isset($_POST['password'])...)
向 else
子句添加一些调试输出以确定条件是否失败:
if (...) {
//
} else {
echo "Please enter a value in all required fields."
}
查询失败
代码执行查询,但无法确定查询是否成功完成。对于调试,您可以执行以下操作:
$result = mysqli_query($query) or die('Query failed: ' . mysql_error());
对于生产代码,请检查返回值
if ($result == true){
并创建 else
子句来管理故障
} else {
// Log mysql_error() to an appropriate location
mysql_error()
将显示有关查询或连接中错误的详细信息。
mysql_error
将报告的错误之一是查询错误地引用了数据库、表和列名;数据库、表和列名需要用反引号 (') 而不是单引号 (') 括起来:
$query = "INSERT INTO `user_details`.`user_login_details` (`id`, `username`, `firstname`, `lastname`, `email`, `password`, `age`) VALUES (NULL, '$username', '$firstname', '$lastname', '$email', '$password', '$age')";
只有值应该用单引号括起来
弃用和安全警告
正如其他人所指出的,该代码使用已弃用的mysql_*
函数,并且容易受到SQL注入攻击。考虑升级到 PDO 和准备好的语句作为第一道防线。