【问题标题】:Unknown column 'a9162e80e079a0051c8b7f88195a94da' in 'field list' (encrypted password)“字段列表”中的未知列“a9162e80e079a0051c8b7f88195a94da”(加密密码)
【发布时间】:2014-11-06 11:32:21
【问题描述】:

我已经检查并尝试更改我的代码,但仍然出现同样的错误,我已经尝试解决这个问题大约 2 天,每天大约需要 2-3 个小时的思考和更改。

我对此很陌生,找不到错误所在的行。 我在这里研究过这个问题,但仍然找不到答案。尝试添加 '' 仍然没有,我的 mysql 表也存在,我确定。

需要帮助。

if(isset($_POST["register"])){
    $username = protect($_POST['username']);
    $password = protect($_POST['password']);
    $email = protect($_POST['email']);

    if(strlen($username) > 20){
        echo "Username must be less than 20 characters!";
    }elseif(strlen($email) > 100){
        echo "E-mail must be less than 100 characters!";
    }elseif(strlen($username) < 4){
        echo "Username must be more than 4 characters!";
    }elseif(strlen($password) < 4){
        echo "Password must be more than 4 characters!";
    }else{
        $register1 = @mysql_query("SELECT id FROM user WHERE username = '$username' ") or die(@mysql_error());
        $register2 = @mysql_query("SELECT id FROM user WHERE email = '$email' ") or die(@mysql_error());
        if(@mysql_num_rows($register1) > 0){
            echo "That username is already in use!";
        }elseif(mysql_num_rows($register2) > 0){
            echo "That e-mail address is already in use!";
        }else{
            $ins1 = @mysql_query("INSERT INTO stats (gold, attack, defense, food) VALUES (100,10,10,100)") or die(mysql_error());
            $ins2 = @mysql_query("INSERT INTO unit (worker, farmer, warrior, defender, archer, longbowmen, phalanxmen, knight, cavalary) VALUES (5, 5, 0, 0, 0, 0, 0, 0, 0)") or die(mysql_error());
            $ins3 = @mysql_query("INSERT INTO user (username, password, email) VALUES('$_POST[$username]', ".md5('$_POST[$password]')." ,'$_POST[$email]')") or die(mysql_error());
            $ins4 = @mysql_query("INSERT INTO weapon(sword, shield, bow, longbow, towershield, longsword, pike, horse) VALUES (0, 0, 0, 0, 0, 0, 0, 0)") or die(mysql_error());
            $ins5 = @mysql_query("INSERT INTO ranking (attack, defense, overall) VALUES (0,0,0)");
                echo("Congratulations, You have registered!");

        }
    }
}

【问题讨论】:

  • "cant find the line where the error is" 删除所有那些讨厌的错误抑制符号 (@)
  • 当然还有关于使用不推荐使用的方法的通常咆哮。改用 mysqli/pdo,保护一切免受 sql 注入
  • 请看一下password_hash()函数,MD5算法不适合散列密码,因为它太快了(8 Giga hashes每秒使用普通硬件)。

标签: php mysql passwords registration password-encryption


【解决方案1】:

使用 '' 包围您的密码值,否则 mysql 会将文本解释为列名而不是值:

    $ins3 = @mysql_query("INSERT INTO user (username, password, email) VALUES('$_POST[$username]', '".md5('$_POST[$password]')."' ,'$_POST[$email]')") or die(mysql_error());

【讨论】:

    【解决方案2】:

    ".md5('$_POST[$password]')." 替换为'".md5('$_POST[$password]')."'(添加引号)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-06
      • 2011-10-29
      • 2015-01-09
      • 2015-05-10
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      相关资源
      最近更新 更多