2015-05-05 4 views
0

У меня возникают проблемы с «INSERT INTO» с MySQL. Я пытаюсь создать таблицу userData, где пользователи могут ввести новое имя пользователя и пароль, а затем подтвердить, что их пользователь был добавлен в базу данных. В настоящее время это всего лишь демонстрационная версия, поэтому не имеет значения, есть ли дубликаты пользователей и т. Д. Вот код, который у меня есть сейчас.INSERT INTO не работает должным образом MySQL

<? include("header.php"); ?> 
<form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
    <!-- Username input --> 
    <p><label for="txtusername" class="text-center">Username:</label> 
    <br><input type="text" title="Enter your new username" name="txtPassword" /></p> 

    <!-- Password input --> 
    <p><label for="txtpassword" class="text-center">Password:</label> 
    <br><input type="password" title="Enter your password" name="txtPassword" /></p> 

    <!-- Password confirmation --> 
    <p><label for="txtpasswordconfirm" class="text-center">Confirm Password:</label> 
    <br><input type="password" title="Confirm your password" name="txtPassword" /></p> 

    <p><input type="submit" name="Submit" value="Submit" /></p> 

</form> 
<? 
//Connect to the user content database 
$con = mysql_connect("localhost","my_username","my_password") or die(mysql_error()); 
mysql_select_db("userData") or die(mysql_error()); 

// Define a variable for the user input 
$input_username = $_POST['txtpassword']; 
$input_password = hash("md5", $_POST['txtusername']); 
$input_password_confirm = hash("md5", $_POST['txtpasswordconfirm']); 

echo "Input username: " . $input_username . "<br>"; 
echo "Input password hash: " . $input_password; 
echo "Input password confirmation hash: " . $input_password_confirm; 
echo "Are the hashes equal: " . hash_equals($input_password, $input_password_confirm); 
if($input_password == $input_password_confirm) { 
    $sql = "INSERT INTO nickpalm_userData (username, passwordHash) 
    VALUES 
    ('$input_username', '$input_password')"; 

    //Attempt to create a new user and show a success message 
    if(mysql_query($sql)) { 
     echo "<script type=\"text/javascript\">alert('Thank you! Your data has been submitted');</script>"; 
    } 
    //If there is an error creating the user, then show an error 
    else { 
     echo "ERROR: " . $user_query . "<br>" . mysql_error($con); 
    } 
} 
?> 

Когда я иду на веб-страницу и попробовать это, нет никаких сообщений о том, что пользователь был добавлен в базу данных, как я предполагал, и он просто обновляет страницу при нажатии на кнопку отправки. Что-то не так с моей формой, или это просто мой недостаток опыта работы с MySql? Вот ссылка на страницу: http://nick-palmer-design.com/projects/CTF/newuser.php

+2

Для MD5 необходимо использовать [password_hash] (http://php.net/manual/en/function.password-hash.php), поскольку последний НЕ защищен. Также [функции mysql_ устарели] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php), и ваш скрипт [открыт для SQL-инъекции] (http://bobby-tables.com/) – Machavity

+0

Узнайте о [подготовленных заявлениях] (http://en.wikipedia.org/wiki/Prepared_statement) и рассмотрите возможность использования [PDO] (http://jayblanchard.net/demystifying_php_pdo.html). –

+1

Я считаю, что эти две строки неверны '$ input_username = $ _POST ['txtpassword']; $ input_password = hash ("md5", $ _POST ['txtusername']); вы устанавливаете отправленный пароль для имени пользователя и хешируете опубликованное имя пользователя в качестве пароля, что приведет к этому - 'if ($ input_password = = $ input_password_confirm) 'to false – Sean

ответ

0

Если я что-то пропустил, это должен быть ваш точный код, преобразованный в MySQLi, - и он также должен работать.

<p><label for="txtpasswordconfirm" class="text-center">Confirm Password:</label> 
    <br><input type="password" title="Confirm your password" name="txtPassword" /></p> 

    <p><input type="submit" name="Submit" value="Submit" /></p> 

</form> 
<? 
//Connect to the user content database 
$con = mysqli_connect("localhost", "my_username", "my_password", "userData") or die("Error " . mysqli_error($con)); 

// Define a variable for the user input 
$input_username = mysqli_real_escape_string($con, $_POST['txtpassword']); 
$input_password = password_hash($_POST['txtusername'], PASSWORD_DEFAULT); 
$input_password_confirm = password_hash($_POST['txtpasswordconfirm'], PASSWORD_DEFAULT); 

echo "Input username: " . $input_username . "<br>"; 
echo "Input password hash: " . $input_password; 
echo "Input password confirmation hash: " . $input_password_confirm; 
echo "Are the hashes equal: " . hash_equals($input_password, $input_password_confirm); 
if($input_password == $input_password_confirm) { 
    $sql = "INSERT INTO `userData` (`username`, `passwordHash`) VALUES ('$input_username', '$input_password')"; 

    //Attempt to create a new user and show a success message 
    if($sql) { 
     echo "<script type=\"text/javascript\">alert('Thank you! Your data has been submitted');</script>"; 
    } 
    //If there is an error creating the user, then show an error 
    else { 
     echo "ERROR: " . $user_query . "<br>" . mysqli_error($con); 
    } 
} 
?> 
Смежные вопросы