sha(\'$ password\')返回空集。

我有两个问题。 问题一: 我正在尝试创建一个注册表单,用户可以在其中注册我的网站。 当我运行此mysql语句时,发现重复条目​​出现错误:
$sql \"insert into users(username, password) values(\'$username, sha(\'$password\'))\";
密钥\'password \'的重复条目\'da39a3ee5e6b4b0d3255bfef95601890afd80709 \' 尽管我多次更改了字符串sha(\'$ password \')。 请帮忙。
else{
   include(\"databaseconnection.php\");
   $databaseconnect = connect($host,$user,$password,$database)
      or die(\"couldnot connect to database serever.\\n\");
   $database_select = mysql_select_db($database,$databaseconnect)
      or die(\"could not select dabases.\\n \" .mysql_error());
   $query2 = \"insert into company(username,password)
      values(\'$username\',sha1(\'$password\'))\";
   $result2 = mysql_query($query2,$databaseconnect);
   echo \"you have been registered as \'$companyloginName\' <br/>\";
   header(\"Location:/index.php\");
我的登录PHP脚本如下:
   $result =\"select username, password form users where username =\'$username\' and password = sha(\'$password\');
    if(mysql_num_rows($reuslt)==1){
   echo\"welcome \'$username\";
    }
    
已邀请:
        “ 3”是空字符串的sha1哈希。确保确实将密码插入到SQL查询中,例如,通过回显查询而不是将其发送到SQL Server。 编辑将新信息添加到您的问题后,请查看以下两行:
include(\"databaseconnection.php\");
$databaseconnect = connect($host,$user,$password,$database)
在此,“ 5”是用于连接数据库的密码。包含databaseconnection.php可能会覆盖ѭ5变量中的内容。 尝试按“ 7”键,您可能会自己看到它,SQL查询根本不包含任何密码,或者其中的密码与用户输入的密码不同。     
        首先,我强烈建议不要将MySQL的
sha()
或PHP的
sha1()
单独用于密码哈希。如果您的数据库受到威胁,这会对您的用户造成巨大的安全风险。 请花点时间阅读我之前关于密码哈希的答案,以正确保护您的数据。 其次,您的代码容易受到SQL Injection攻击。使用ѭ10可以转义要预先放入查询中的变量。
$query2 = \"insert into company(username,password)
  values(\'\" . mysql_real_escape_string($username) .
          \"\', sha1(\'\" . mysql_real_escape_string($password) . \"\'))\";
第三,
$password
变量将被
databaseconnection.php
文件覆盖。
include(\"databaseconnection.php\");
$databaseconnect = connect($host,$user, $password ,$database);
重点...   
$databaseconnect = connect($host,$user,
$password
,$database);
因此,稍后在查询中使用的“ 5”仍然包含数据库连接的密码,而不是用户的密码。 在
databaseconnection.php
中更改变量的名称,或者甚至更好,使用数组保存所有配置。
$dbConnectParams = array(\'host\' => \'localhost\'
                         \'user\' => \'myUser\',
                         \'pass\' => \'myPassword\',
                         \'db\' => \'myDB\');
然后,如下更改您的代码:
include(\"databaseconnection.php\");
$databaseconnect = mysql_connect($dbConnectParams[\'host\'],
                           $dbConnectParams[\'user\'],
                           $dbConnectParams[\'pass\'],
                           $dbConnectParams[\'db\']);
由于调用
mysql_connect()
时已经传递了数据库,因此无需调用
mysql_select_db()
。     
        从注释行猜测,可能是您不小心使用了\'databaseconnection.php \'中设置的连接密码,而不是用户密码-您没有显示如何初始化$ password字符串。 还要注意您的sql中不应该出现的逗号:
insert into company(username,password,)
                                     ^
我尚未测试这是否是原因,但您可能应该摆脱它,然后再次测试。 另外,请认真考虑使用pdo / prepare语句来防止sql注入,如果要从用户输入中插入密码,则更应如此。     

要回复问题请先登录注册