我是PHP和Mysql的新手。我已经创建了一个注册表单,但输入的值没有保存在我的数据库中。我不知道为什么。我连接到数据库。谁能给我一些见解?顺便说一句,我知道你会说“Mysql”已被弃用。但我刚刚开始学习所有这些是如何工作的。一旦我对流程有了透彻的了解,我就会将代码更改为Mysqli ......
<?php
//form data
$submit = strip_tags($_POST['submit']);
$fname = strip_tags($_POST['fname']);
$lname = strip_tags($_POST['lname']);
$usernamereg = strip_tags($_POST['usernamereg']);
$passwordreg = strip_tags($_POST['passwordreg']);
$email = strip_tags($_POST['email']);
$emailcheck = strip_tags($_POST['emailcheck']);
$date = date("Y-m-d");
if($submit)
{
//check for existence
if($fname&&$lname&&$usernamereg&&$passwordreg&&$email&&$emailcheck)
{
//encrypt password
$password = md5($passwordreg);
if(strlen($usernamereg)>25)
{
echo "Username must be 25 characters or less.";
}
else
{
//checks password length
if(strlen($passwordreg)<6)
{
echo "Passwords must be atleast 6 characters long";
}
else
{
if($email!=$emailcheck)
{
echo "emails to not match";
}
else
{
//open database
$connect = mysql_connect("localhost","root","clandestine");
mysql_select_db("user_db"); //selects database
$queryreg = mysql_query("INSERT INTO users VALUES('','$date','$fname','$lname','$usernamereg','$passwordreg','$email','$emailcheck'");
echo "You have been registered!";
}
}
}
}
else
echo "Please fill in <b>all</b> fields!";
答案 0 :(得分:0)
尝试在INSERT查询中分配列。
$queryreg = mysql_query("INSERT INTO users (`randomField`, `date`, `first_name`, `last_name`, `username`, `password`, `email`, `email_check`) VALUES ('','$date','$fname','$lname','$usernamereg','$passwordreg','$email','$emailcheck'");
第一列应该是什么?
你做过任何健全检查吗? (即,在代码中的某些点将测试数据打印到屏幕上,以确保您的IF语句评估为真?
此外,尝试将INSERT查询保存为变量字符串:
$query = "INSERT INTO.............";
然后将其打印到屏幕上。将该查询复制并粘贴到PHPMyAdmin(如果您有权访问它),并查看您的语句是否有任何错误。 PMA会告诉你哪些错误,如果有的话。
编辑:此外,请不要MD5密码或其他高度敏感的数据。使用安全算法并加密密码。如果你不确定这一切意味着什么:
答案 1 :(得分:0)
如果你这样做,你会得到什么:
$query = "INSERT INTO users
(date, first_name, last_name, username, password, email, email_check)
VALUES
('$date','$fname','$lname','$usernamereg','$passwordreg','$email','$emailcheck')";
mysql_query($query)or die('Error: <br />'.$query.'<br />'.mysql_error());
请注意,删除反引号只是为了简化代码。保留它们是正确的,但在列名中没有空格等,无论如何都应该有效。哦,当然,这不是生产的好方法。真的很清楚调试。