2012-12-07 36 views
1

我register.php一切工作正常,当您尝试注册它说,这是所有工作正常,但没有出现在我的数据库。难道我做错了什么?我注册的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

请格式化代码! –

+0

你能格式化你的代码吗,这太难阅读了。 – piddl0r

+3

**警告**您的代码易受SQL注入攻击! –

回答

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()或(在库MySQLi或PDO库等同的功能)的输出将是准确的错误消息的MySQL输出当查询失败。这应该足以帮助您调试问题,所以它对测试非常有用。然而,当你的代码在生产时,你可能不应该打印这样的消息给用户,因为(a)它很乱,(b)通过告诉他们你的查询和你的数据结构给黑客提供了不必要的帮助。一般来说,最好记录这样的错误,以便读取它们,但向用户报告更一般的错误消息。

我希望帮助你的工作出了问题。

+0

谢谢@SDC我试过了,得到了以下结果:有些事情发生了可怕的错误。 SQL错误消息:INSERT命令拒绝用户'用户'@'localhost'表'用户' –

+0

没问题,这样可以让您很好地了解问题的性质。您在mySQL连接中使用的用户无权在用户表上执行插入命令。你需要去你的数据库配置工具(phpMyAdmin,或者你用来设置数据库的任何东西)并修复它。这是一个数据库配置错误;不是你可以在PHP中修复的东西。 – SDC

+0

然而,我的其他观点仍然相关 - 您仍然需要解决您的安全问题! – SDC

0

为什么要添加ID?在你的表中是“autoincrement”id列?

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

,你不执行

echo "Success"; 

因为你用模具()之前和脚本将终止有