-1

不知道问题出在哪里..但是数据没有出现在数据库中..

if(isset($_POST['sign up']))
{
$name=$_REQUEST['username'];
$password=$_REQUEST['password'];
$fname=$_REQUEST['fname'];
$lname=$_REQUEST['lname'];
$email=$_REQUEST['email'];
mysql_query("insert into sign_up ('username','password','fname','lname','email')         VALUES('$name' , md5('$password') , '$fname' , '$lname','$email'");
}
4

4 回答 4

3

问题在于INSERT子句中的列,它们应该用单引号引起来,因为它们是标识符而不是字符串文字。

insert into sign_up (username,password,fname,lname,email) VALUES(...)

由于它们都不是保留关键字,因此它们周围的反引号是可选的。


作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-04-16T14:06:56.987 回答
0

使用 mysql_error() 获取正在发生的错误。如果这是您的全部代码,那么您看起来不像是先建立数据库连接。

于 2013-04-16T14:08:32.983 回答
0

只需删除数据库列名周围的单引号,它应该可以工作:

mysql_query("insert into sign_up (username, password, fname , lname , email) VALUES('$name' , md5('$password') , '$fname' , '$lname','$email'");

MD5()您还需要在插入之前至少对数据进行转义,并且使用散列密码是不安全的。

这里有一个非常好的阅读内容:它只用很少(足够)的文本覆盖了很多内容 - 不仅是散列:

http://www.phptherightway.com/#password_hashing

于 2013-04-16T14:12:27.343 回答
0

我知道答案部分是错误的,但我似乎无法评论你的帖子,我想这可能是因为我是一个新用户......

在将其发布到 Internet 之前,请阅读 SQL 注入。您需要在输入中加入保护。

于 2013-04-16T14:13:47.763 回答