У меня возникают проблемы с «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
Для 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
Узнайте о [подготовленных заявлениях] (http://en.wikipedia.org/wiki/Prepared_statement) и рассмотрите возможность использования [PDO] (http://jayblanchard.net/demystifying_php_pdo.html). –
Я считаю, что эти две строки неверны '$ input_username = $ _POST ['txtpassword']; $ input_password = hash ("md5", $ _POST ['txtusername']); вы устанавливаете отправленный пароль для имени пользователя и хешируете опубликованное имя пользователя в качестве пароля, что приведет к этому - 'if ($ input_password = = $ input_password_confirm) 'to false – Sean