1

我的 register.php 一切正常,当您尝试注册时,它说一切正常,但我的数据库中没有任何内容。难道我做错了什么?

<?php
echo "<h1>Register:</h1>";  
$submit = $_POST['submit'];  
//form data  $fullname = strip_tags($_POST['fullname']);  
$username = strip_tags($_POST['username']);  
$password = strip_tags($_POST['password']);  
$repeatpassword = strip_tags($_POST['repeatpassword']);  
if ($submit)  {  
    // check for existance  
    if ($fullname && $username && $password && $repeatpassword)  {  
    if ($password == $repeatpassword)  {
        //check char length of username and fullname  
        if (strlen($username > 25) || strlen($fullname) > 25)  {  
            echo "Length of username or fullname is too long! Max 25 characters for each!";  
        }  else  {
            //check password length  
            if (strlen($password) > 25 || strlen($password) < 6)  {  
                echo "Password must be between 6 and 25 characters";  
            }  else  {  
                //register the user!  
                //encrypt password  
                $password = ($password);  
                $repeatpassword = ($repeatpassword);  
                //open database  
                $connect = mysql_connect("localhost","user","password") 
                    or die ("Couldn't Connect!");  
                mysql_select_db("user_phplogin"); 
                //select database  
                $queryreg = mysql_query("  
                    INSERT INTO `user_phplogin`.`users` (`id`, `fullname`, `username`, `password`) VALUES  (NULL,'$fullname','$username','$password')  "); 
                die("You have been registered! <a href='login.html'> Return to login page</a>");  
                echo "Success!!";  
            }  
        }  
    }  else 
        echo "Your passwords do not match!";  
}  else  
    echo "Please fill in <b>all</b> fields!";  
}
?>
4

2 回答 2

1

我要指出的第一个问题是您正在使用过时的mysql_xx()功能。您应该切换到mysqli_xx()函数或 PDO 库。仅凭这一点并不能解决问题,但指出这一点很重要。

下一个:数据卫生。你正在用strip_tags()函数清理你的数据。这将阻止您的用户发布 HTML 代码,但不足以使您的查询免受 SQL 注入攻击和其他问题的影响。您需要转义数据以使其在 SQL 字符串中安全使用。使用您现有的代码,您需要使用它mysql_real_escape_string()来执行此操作。如果您遵循我的建议并切换到一组不同的 SQL 函数,您将使用mysqli_real_escape_string()PDO::quote()。有关如何使用这些函数的更多信息,请参阅相关的 PHP 手册页。这是非常重要的修复。

第三点:错误处理。请参阅代码的相关部分:

$queryreg = mysql_query("
                INSERT INTO `user_phplogin`.`users` (`id`, `fullname`, `username`, `password`) VALUES  (NULL,'$fullname','$username','$password')  ");
die("You have been registered! <a href='login.html'> Return to login page</a>");
echo "Success!!";

在此代码中,您正在调用查询函数,但无论查询函数返回什么,总是报告“您已注册”消息。查询函数可能会失败并抛出错误,这几乎可以肯定是正在发生的事情,但是您没有做任何事情来检查该错误是什么。

PHP 提供了错误处理函数来帮助您解决这个问题。您需要检查是否$queryreg已填充,如果没有,请报告一条解释错误的消息。例如:

if(!$queryreg) {
    die("Something went horribly wrong. SQL error message: ".mysql_error());
}

mysql_error()or(mysqli 或 PDO 库中的等效函数)的输出将是查询失败时 MySQL 输出的确切错误消息。这应该足以帮助您调试问题,因此对测试很有用。但是,当您的代码在生产中时,您可能不应该向用户打印这样的消息,因为 (a) 它很混乱,并且 (b) 它通过告诉黑客您的查询和数据结构给黑客提供了不必要的帮助。一般来说,最好记录这样的错误,以便您可以阅读它们,但向用户报告更通用的错误消息。

我希望这可以帮助您解决问题。

于 2012-12-07T15:00:17.230 回答
0

为什么要加id?在您的表中是“自动增量”id 列?

$queryreg = mysql_query("INSERT INTO `users` (`fullname`, `username`, `password`) VALUES  ('$fullname','$username','$password')  ");

你没有执行

echo "Success";

因为您之前使用 die() 并且脚本将在那里终止

于 2012-12-07T14:59:58.437 回答