Ошибка при попытке сохранить пользовательский ввод в MySQL с PHP

0

Всякий раз, когда я пытаюсь сохранить вход пользователя в базу данных MySQL, он сохраняет пустые строки сразу после загрузки страницы. Вот мой файл index.php:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "dbname";

$uName = mysqli_real_escape_string(mysqli_connect($servername, $username, 
$password, $dbname), $_POST['username']);
$pass = mysqli_real_escape_string(mysqli_connect($servername, $username, 
$password, $dbname), $_POST['password']);

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
} 

$sql = "INSERT INTO users (username, password)
VALUES ('$uName', '$pass')";

if ($conn->query($sql) === TRUE) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

<!DOCTYPE html>
<html>

<body>
<form action="index.php" method="post">
<input type="text" name="username"> <br> <br>
<input type="password" name="password"> <br> <br>
<input type="submit" name="submit">
</form>

</body>

</html>

Пожалуйста, скажите мне, есть ли что-то, что я делаю неправильно. Спасибо

  • 0
    Вы должны сделать одно подключение к вашей базе данных в начале. Затем вы используете одно и то же соединение для каждого звонка. Прямо сейчас вы создаете несколько соединений; один каждый раз, когда вы используете mysqli_real_escape_string() а затем еще один после. Это очень плохо для производительности. Вам также следует использовать подготовленные операторы вместо того, чтобы вручную экранировать и объединять ваши запросы.
  • 0
    Никогда не храните пароли в открытом виде! , Храните только хеши паролей! Используйте PHP password_hash() и password_verify() . Если вы используете версию PHP ниже 5.5 (на что я действительно надеюсь), вы можете использовать библиотеку password_compat для получения той же функциональности.
Показать ещё 4 комментария
Теги:
phpmyadmin

2 ответа

0

См. Измененный код ниже:

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "dbname";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
} 
if(isset($_POST['submit'])){
$uName = mysqli_real_escape_string(mysqli_connect($servername, $username, 
$password, $dbname), $_POST['username']);
$pass = mysqli_real_escape_string(mysqli_connect($servername, $username, 
$password, $dbname), $_POST['password']);

$sql = "INSERT INTO users (username, password)
VALUES ('$uName', '$pass')";

if ($conn->query($sql) === TRUE) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
}
?>

<!DOCTYPE html>
<html>

<body>
<form action="" method="post">
<input type="text" name="username"> <br> <br>
<input type="password" name="password"> <br> <br>
<input type="submit" name="submit">
</form>

</body>

</html>
  • 0
    Этот код все еще имеет кучу проблем: он также создает три разных соединения с базой данных, когда вам нужна только одна. Он также широко открыт для инъекций SQL и сохраняет пароли в виде открытого текста. Я также не вижу смысла в создании соединения с базой данных перед оператором if, поскольку он используется только внутри оператора if.
0
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "dbname";

$conn = mysqli_connect($servername, $username, $password, $dbname);
if(isset($_POST['submit']))
{
  $uName=$_POST['username'];
  $password=$_POST['password'];
  $sql = "INSERT INTO users (username, password) VALUES ('$uName', '$pass')";
 if(mysqli_query($conn, $sql)){
 {
    echo "New record inserted successfully";
 } 
 else 
 {
   echo "There have some problem";
 }

}
?>

Примерьте вот это

  • 0
    Предупреждение! Этот код по-прежнему имеет несколько серьезных проблем: он все еще широко открыт для SQL-инъекций и сохраняет пароли в открытом виде! Это основные проблемы безопасности.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню