PHP форма не вставляется в SQL базу данных - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь протестировать очень простую PHP форму, которая вставляет ввод в базу данных SQL. Соединение работает нормально, но данные не отображаются в базе данных, когда я refre sh его. У меня есть только два файла: индекс. html и процесс. php.

индекс. html:

<html>
<head>Testing</head>
<body>
    <div id="frm">
        <form action="process.php" method=POST>
            <p>
                <label>Username</label>
                <input  type="text" id="stuff" name="stuff">
            </p>
            <p>
                <input type="submit" id="btn" value="Login">
            </p>
        </form>
    </div>
</body>
</html>

Процесс. php:

<?php
    $userinput = $_POST['stuff'];
    $servername = "localhost";
    $username = "root";
    $password = "";
    $database = "testing";

    $conn = new mysqli($servername, $username, $password, $database);

    if ($conn->connect_error)
    {
        die("connection failed: " . $conn->connect_error);
    }

    else
    {
        echo "Connected successfully "; 
        echo $userinput;
        $sql = "INSERT INTO `entries`(`input`) VALUES ('$userinput')";
    }
?>

Ответы [ 4 ]

1 голос
/ 06 февраля 2020

Проблема в том, что вы на самом деле не выполняете запрос. Вы только что присвоили строку запроса переменной, поэтому она не выполняется в MySQL.

Ваш код уязвим для SQL инъекции , поэтому я предлагаю решение:

<?php
$userinput = $_POST['stuff'];
$servername = "localhost";
$username = "root";
$password = "";
$database = "testing";

$conn = new mysqli($servername, $username, $password, $database);

if ($conn->connect_error)
{
    die("connection failed: " . $conn->connect_error);
}
else
{
    echo "Connected successfully "; 
    echo $userinput;
    $sql = "INSERT INTO `entries` (`input`) VALUES (?)";
    if ($stmt = $conn->prepare($sql)) { // Prepare statement
        $stmt->bind_param("s", $userinput); //Bind the string (s), with the content from $userinput to the statement marker (?)
        $stmt->execute(); // Run (execute) the query
        $stmt->close(); //clean up
}

Этот код должен работать и защищать вас от SQL инъекций.

0 голосов
/ 06 февраля 2020

Ваш код не отправляет запрос в базу данных, он открывает соединение, но не отправляет запрос, см. Ниже запрос отправки запроса, если вы используете mysqli в PHP


... else {
  # this submits the query
  $conn -> query ($sql);
}

0 голосов
/ 06 февраля 2020

вам нужно взять функцию mysqli_query из mysqli, которая будет принимать параметр в качестве объекта подключения, например $ conn, а второй параметр будет sql запросом для выполнения. как это

$sql = mysqli_query($conn, "INSERT INTO entries (input) VALUES ('$userinput')");

, чтобы предотвратить sql инъекцию, вы должны использовать PDO, потому что PDO использует paramBind для защиты инъекции.

0 голосов
/ 06 февраля 2020

Не полностью протестировал, но я исправил ваш запрос.

$sql = mysqli_query($conn, "INSERT INTO entries (input) VALUES ('$userinput')");

также измените часть сообщения на: <form action="process.php" method="POST">

Это должно решить проблему для вас

Также убедитесь, что вы используете функцию: mysqli_real_escape_string для избежать злонамеренного ввода пользователя для предотвращения SQL инъекции.

Другое дело: вы можете изменить localhost на 127.0.0.1. Я думаю, что это более надежно, хотя в большинстве случаев то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...