嘿伙计我知道这可能只是一个简单的sql语句,但我无法弄清楚问题。它将用户添加到数据库,但不会添加用户的名字。如果我在第一次命名之前切换sql语句,例如有用户名和电子邮件,那么就不会插入密码开关名称和电子邮件。有谁知道如何解决这个问题,并将所有信息插入到数据库中的正确表中。
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
$db_server = "server";
$db_username = "name";
$db_password = "pass";
$con = mysql_connect($db_server, $db_username, $db_password);if (!$con)
{
die('Could not connect: ' . mysql_error());
}
$database = "Account_Holder";
$er = mysql_select_db($db_username);
if (!$er)
{
print ("Error - Could not select the database");
exit;
}
// table name
$tbl_name=Account_Holder;
// Random confirmation code
//$confirm_code=md5(uniqid(rand()));
// values sent from form
$firstName=$_POST['firstName'];
$email=$_POST['email'];
$password=$_POST['password'];
$username=$_POST['username'];
// Insert data into database
$sql="INSERT INTO $tbl_name(firstname, username, email, password)VALUES('$firstname', '$username', '$email', '$password')";
$result=mysql_query($sql);
echo "You have been added to the database! You may now log on using your username."
?>
<a href ="login.html"> Login Page </a>
</body>
</html>
答案 0 :(得分:3)
我的猜测是$_POST['firstname']
而不是$_POST['firstName']
。
顺便说一句,在将用户输入放入数据库之前,您确实需要清理用户输入。编写SQL注入漏洞对于此代码是微不足道的。首先,通过mysql_real_escape_string()
运行用户提供的值。就目前而言,如果用户输入包含撇号/单引号,则代码将无效。
如果您认为问题是查询产生了错误,请在mysql_error()
之后立即使用mysql_query()
查看是否存在错误。如果没有错误,它将返回一个空字符串。否则,它将返回错误。
另外,如果可能的话,我强烈建议在MySQL中使用散列函数存储密码(使用PASSWORD()
)。
答案 1 :(得分:1)
查看您的代码,除了主要的安全漏洞外,没有什么是错的。也许你从$_POST
数组写了一些错误的值。在数组上执行print_r
以查看确切的名称。
首先,您的代码极易受SQL injection攻击,您应该在每个用户输入上使用mysql_real_escape_string。您可以从不信任任何用户输入。
你应该让你的SQL看起来像:
$sql = "INSERT INTO $tbl_name (firstname, username, email, password) VALUES ('".mysql_real_escape_string($firstname)."', '".mysql_real_escape_string($username)."', '".mysql_real_escape_string($email)."', '".mysql_real_escape_string($password)."')";
我不确定无效空格是否会对查询产生任何影响,但是必须使其更容易阅读。如果你不确定什么是错的,你应该总是使用mysql_error来显示错误,如下所示:
$result=mysql_query($sql) or die(mysql_error());
第三件也是最后一件事。您应该从不将密码作为明文存储在数据库中。为了上帝的爱,请hash它或它: - )
答案 2 :(得分:0)
我认为这是你的问题。你的名字变量有一个名字的国会大厦'N'。将您的代码更改为其中任何一个,它应该可以正常工作。
$sql="INSERT INTO $tbl_name(firstname, username, email, password)VALUES('$firstName', '$username', '$email', '$password')";
或
$firstname=$_POST['firstName'];
另外,我还建议使用PDO而不是常规MySQL。但那只是我......