我在登录时使用以下代码将电子邮件和密码存储在我的数据库中,但不知何故,它只存储密码。电子邮件字段在数据库中保持为NULL。有什么建议吗?
以下是代码:
<?php
define('DB_NAME', 'XXXXXXX');
define('DB_USER', 'XXXXXXX');
define('DB_PASSWORD', 'XXXXXXX');
define('DB_HOST', 'db.example.com');
$link = mysql_connect (DB_HOST, DB_USER, DB_PASSWORD);
if (!$link) {
die('Could not Connect: ' . mysql_error());
}
$db_selected = mysql_select_db(DB_NAME, $link);
if (!db_selected) {
die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}
$value = $_POST['email'];
$value = $_POST['password'];
$sql = "INSERT INTO demo (email) VALUES ('$value')";
$sql = "INSERT INTO demo (password) VALUES ('$value')";
if (!mysql_query($sql)) {
die('Error: ' . mysql_error());
}
mysql_close();
?>
答案 0 :(得分:4)
您正在覆盖变量
$email = mysql_real_escape_string($_POST['email']);
$pass = mysql_real_escape_string($_POST['password']);
$sql = "INSERT INTO demo (email, password) VALUES ('$email, '$pass')";
答案 1 :(得分:3)
$value = $_POST['email'];
$value = $_POST['password'];
第二个作业会破坏/覆盖第一个作业,所以这段代码按照书面形式运作......你需要这样的东西:
$value1 = $_POST['email'];
$value2 = $_POST['password'];
单独存储它们。你的两个$ sql变量也一样。
除此之外,您还可以直接将用户提供的数据插入到SQL查询中,这意味着您的代码在SQL注入攻击中大张旗鼓。
鉴于这些编码错误的基本性,我建议您在尝试将某些内容放到面向公众的网络服务器上之前提高您的编码技能,否则您很可能会在短时间内将您的网站设为pwn3d。
答案 2 :(得分:-1)
问题在于:
$value = $_POST['email'];
$value = $_POST['password'];
您正在将“$ value”变量的值设置为电子邮件,然后将其重置为密码。
试试这个:
$email = mysql_escape_string($_POST['email']);
$pass = mysql_escape_string($_POST['password']);
然后,确保只设置一次SQL:
$sql = "INSERT INTO demo (email,password) VALUES ('$email','$password')";
但是,我也会确保清理您的输入值。此外,可能需要编辑原始帖子以删除您的数据库名称,密码和主机:)
答案 3 :(得分:-2)
您首先说$ value是电子邮件地址。然后你说$ value是密码。
因此,当您插入时,$ value始终是密码。尝试重命名变量。
$email = $_POST["email"];
$password = $_POST["password"];
$sql = 'INSERT INTO demo (email, password) VALUES ("'.$email.'", "'.$password.'")';
不要忘记保护SQL注入。为此做一些搜索。