PHP和MYSQL登录系统的网站,卡住用户创建
我想为我的网站编写一个用户登录系统。我在笔记本电脑上运行WAMP并使用Aptana进行开发。我一直在试图让用户创建功能现在工作大约3天。这里这个功能:PHP和MYSQL登录系统的网站,卡住用户创建
function create_new_user($email, $pass, $level){
$db = new PDO('mysql:host=localhost;dbname=jadams', 'root', '');
$insertQuery = "INSERT INTO jadams.user VALUES ($email, $pass, $level);";
$db->query($insertQuery);
return TRUE;
}
我已经重写了该功能几次,使用预处理语句和各种形式的条件检查的,这仅仅是计算出来的希望,最简单的一种。无论我尝试什么,我都无法将插入到数据库中来工作。我已经得到了这个登录功能,通过强制接入用户的工作通过phpmyadmin:
function is_pass_correct($email, $pass){
$db = new PDO('mysql:host=localhost;dbname=jadams', 'root', '');
$email = $db->quote($email);
$selectQuery = "SELECT password FROM jadams.user WHERE email = $email;";
$rows = $db->query($selectQuery);
$db=NULL;
if($rows) {
foreach ($rows as $row) {
if($pass === $row["password"]) {return TRUE;} //MD5
}
}
return FALSE;
}
我的数据库的结构是电子邮件VARCHAR(256)NOT NULL主,密码为varchar(256)NOT NULL,访问INT;我也尝试了有和没有分号的查询。
您错过了要插入值的列名称。
"INSERT INTO jadams.user (email, password, level) VALUES ($email, $pass, $level);"
另外,由于您使用的是PDO库,因此请考虑使用预处理语句来转义不可信数据。
$insertQuery = "INSERT INTO jadams.user (email, password, level)
VALUES (:email, :password, :level)";
$db = $conn->prepare($insertQuery);
$db->execute(array(':email'=>$email,
':password'=>$pass,
':level'=>$level));
我被告知这些是可选的,只要你填写正确,但我修改了代码: $ insertQuery =“INSERT INTO jadams.user(email,password,access)VALUES($ email,$ pass,$ level );“; 仍然没有运气 – SupremeGunman
你有其他的列,如user_id吗? – rbaker86
嗯,我用准备好的语句写了一次,但它没有工作,但我只是复制了这个工作。我想我应该保留旧的代码进行比较。非常感谢! – SupremeGunman
您是否收到错误?
如果不知道完整的数据库结构,很难诊断,但起初看起来可能表中的列与您提供的值不匹配。
从技术上讲,列名不是必需的,但如果您不提供它们,则必须按顺序为每列提供适当的值。如果您没有设置userID
或其他字段,则可能是问题所在。
如果不指定表中的每一列INSERT ... VALUES或INSERT ... SELECT,值列名的列表必须由VALUES列表中提供或SELECT语句。
为了安全起见,我建议明确设置列名像这样:
INSERT INTO
jadams.user (email, password, level)
VALUES ($email, $pass, $level)
个人而言,我更喜欢INSERT INTO ... SET语法。它感觉更具可读性,不太容易混合列。
INSERT INTO
jadams.user
SET
email = $email,
password = $password
level = $level
当然,这并不进入parameter binding,password storage,和其他问题一大堆,你还需要进行思考。
查询结尾的分号也可能导致问题。我知道旧的mysql_ *函数手册明确指出,你应该不是在查询结尾处有分号。但是,在PDO中没有关于这一点的信息。我假设现在在末尾有分号很好,但我会尝试删除它,看看会发生什么。 (可能没有)。
我的数据库的结构是电子邮件varchar(256)不是空主,密码varchar(256)非空,访问int – SupremeGunman
我确实有很多其他安全问题的地址,一旦我得到这个工作。 – SupremeGunman
嗯,我能想到的唯一两件事是类型不匹配,或在查询结束时引起问题的分号。 –
你可以给我们你的用户表中的字段列表吗? –