我的PHP代码中的insert data sql命令无法正常工作 . 有人可以帮忙吗?
我有一个注册表单,它从输入字段(名称,姓氏,电子邮件,用户名和密码)中获取值
用户在此字段中输入的值应保存到我的表“users”列中(ID [主键/ INT],名称[TEXT],lastname [TEXT],电子邮件[VARCHAR],用户名) [VARCHAR]和密码[VARCHAR]) .
这是我目前的代码:
if (isset ($_POST['name'],$_POST['lastname'],$_POST['email'],$_POST['username'], $_POST['password']))
{
//connect to database
$conn = mysqli_connect ('localhost', 'root', '', 'test_database');
if ($conn)
{
$sql="SELECT username FROM users WHERE username = '" . $_POST['username'] . "';";
$query = mysqli_query ($conn, $sql);
$result = mysqli_fetch_array ($query);
if ($result ['username'])
{
header ('Location: ' . $_SERVER['PHP_SELF'] . '?errno=1');
}
else
{
$sql="INSERT INTO users (ID, name, lastname, e-mail, username, password) VALUES (' ','" .$_POST['name'] . "' ,'" . $_POST['lastname']. "' ,'" . $_POST['email']. "' ,'" . $_POST['username']. "' ,'" . $_POST['password']. "');";
mysqli_query ($conn, $sql);
mysqli_close ($conn);
//registration completed, redirect to index page
//header ('Location:index.php?reg=1');
}
}
else
{
echo 'connection error';
}
}
1 回答
除了
ID
列等空间VALUES (' ',
的注释中已经概述的内容之外,您的电子邮件列名称包含一个连字符,并被解释为e
MINUSmail
并作为数学运算 .将其重命名为
e_mail
或在其周围放置刻度 .阅读以下有关标识符限定符的内容:
在查询上使用
mysqli_error($conn)
会引发语法错误 .旁注:出于几个原因,您应该转义数据,一个是防止SQL注入,如果您的数据可能包含MySQL可能会抱怨的字符,例如
John's Bar & Grill
.您现在的代码是对SQL injection开放的 . 使用prepared statements或PDO与prepared statements .
Passwords
我还注意到您可能以纯文本格式存储密码 . 不建议这样做 .
使用以下之一:
CRYPT_BLOWFISH
crypt()
bcrypt()
scrypt()
On OPENWALL
PBKDF2
PBKDF2 on PHP.net
PHP 5.5的password_hash()函数 .
兼容包(如果PHP <5.5)https://github.com/ircmaxell/password_compat/
其他链接:
Important sidenote about column length:
如果您决定使用
password_hash()
或crypt,请务必注意,如果您当前的密码列的长度低于60,则需要将其更改为(或更高) . 手册建议长度为255 .您需要更改列的长度并重新开始使用新哈希才能使其生效 . 否则,MySQL将无声地失败 .