2015-11-30 5 views
0

Я пытаюсь вставить данные в базу данных mysql, это регистрация электронной почты с подтверждением. Уникальное случайное число не вставляется в таблицу базы данных. Пожалуйста, помогите мне. Огромное спасибо.Невозможно вставить данные проверочного кода в базу данных mysql

else { 
    $user_confirm = md5(uniqid(rand())); 
    echo "$user_confirm"; 
    //the form has been posted without, so save it 
    //notice the use of mysql_real_escape_string, keep everything safe! 
    //also notice the sha1 function which hashes the password 
    $sql = "INSERT INTO users(
        user_name, 
        user_pass, 
        user_email, 
        user_date, 
        user_level, 
        user_confirm 
      ) 
      VALUES('" . mysql_real_escape_string($_POST['user_name']) . "', 
        '" . sha1($_POST['user_pass']) . "', 
        '" . mysql_real_escape_string($_POST['user_email']) . "', 
        NOW(), 
        0, 
        '$user_confirm' 
      )"; 

    $email = $_POST["user_email"]; 
    $result = mysql_query($sql); 
+1

Каков тип столбца для 'user_confirm', а также длина столбца. – Ohgodwhy

+2

в качестве побочного элемента, вы не храните свои пароли в db. [Здесь это] (http://stackoverflow.com/a/33665819) для 'mysqli' или' pdo'. Как перк, вы можете найти параметр, проходящий немного менее загадочным и подверженным ошибкам, чем то, как вы это делаете, с устаревшей библиотекой 'mysql_ *' – Drew

+0

Как насчет некоторой проверки ошибок, такой как 'mysql_error()' - делает ее намного проще выяснить, что не так и как исправить. – Tristan

ответ

1

У вас есть две проблемы: $user_confirm является строкой (я сгенерировал beba256f79e888013bb34e5a774fe7f9 с вашим кодом) и вы пытаетесь сохранить его в столбце, предназначенный для целых чисел (INT(11)).

Hashed строки должны храниться в TEXT полях для обеспечения размера строк, порожденных md5() и sha1().

Во-вторых, вы действительно не должны использовать хэши паролей MD5, и вы действительно должны использовать PHP built-in functions для защиты паролей. Если вы используете версию PHP менее 5.5, вы можете использовать password_hash()compatibility pack.


Your script is at risk for SQL Injection Attacks.

Если вы можете, вы должны stop using mysql_* functions. These extensions были удалены в PHP 7. Узнайте о prepared операциях для PDO и MySQLi и рассмотрите использование PDO, it's really pretty easy.

0

Функция MySQL md5 возвращает строку из 32 шестнадцатеричных цифр или NULL, если аргумент был NULL. Используйте varchar (32) вместо int (11) для поля.

Refer to MySQL Document for more info.

Кроме того, убедитесь, что вы добавляете в кавычки строки поля правильно.

Смежные вопросы