Проблема с Mysql и $_POST

Как мне ришить проблему с подключеннием к mysql
когда я пишу $name = $_POST["name"]; то у меня не подключает к mysql, а когда пишу $name = name; то у меня вписувуютса данные но у них пустые поля

вот

и у меня такая форма может в ней ошибка:

                <form method="post" action="" style="display: block; width: 90%; margin: 20px; padding: 20px;">
                    <div class="form-group">
                        <label>Ваше имя:</label>
                        <input type="text" class="form-control" id="name" placeholder="Ваше имя">
                    </div>
                    <div class="form-group">
                        <label>Ваш email:</label>
                        <input type="email" class="form-control" id="email" placeholder="Ваш email">
                    </div>
                    <div class="form-group">
                        <label>Товар:</label>
                        <input type="text" class="form-control" id="product" readonly>
                    </div>
                    <div class="form-group">
                        <label>Цена:</label>
                        <input type="text" class="form-control" id="price" readonly>
                    </div>
                    <input type="submit" class="btn btn-primary">Купить</input>
                </form>

ну а это подключенние к mysql:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "root";
$dbname = "shop";

$name = $_POST["name"];
$email = $_POST["email"];
$product = $_POST["product"];
$price = $_POST["price"];
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO tovar (name, email, product, price)
VALUES ($name, $email, $product, $price)";

if (mysqli_query($conn, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>

я думаю что должно быть так но данные не вписувуются в mysql: (а PhpStorm жалуется но не говорит в чом проблемма)

$name = name;
$email = email;
$product = product;
$price = price;

я в PHP новичок так что не судите строго
и простите за мой русский


Ответы (1 шт):

Автор решения: InDevX

Во-первых, как уже вам сообщил @Quazimorda, нужно делать проверку "пришли ли нужные нам данные" (хотя бы какой-то минимальный isset($_POST), но должен быть).

Во-вторых, лучше разделять front и back-end логику, т.е. вынести в отдельный файл, хотя бы, сохранение. Так же, лучше разделять логику, сделать config и туда поместить данные для подключения к бд, само подключение вынести в отдельный файл и т.п...

В-третьих, нельзя сразу с $_POST массива вставлять данные в запрос. Нужно либо их валидировать, либо использовать подготавливаемые запросы.

Ну, и, касательно вашей проблемы:

$name = $_POST["name"];
...

Так записано было правильно (но нет обработки данных!!) и нет проверки отправлена была форма или нет, то есть у вас при каждом заходе на страницу будет срабатывать сохранение, даже без отправки формы.

Сам же запрос не выполняется ("криво проходит") потому что вы строковые данные вставляете в запрос как целочисленные. Можно просто добавить кавычки к переменным.

$sql = "INSERT INTO tovar (name, email, product, price)
                   VALUES ('$name', '$email', '$product', '$price')";

p.s. лучше именовать абсолютно всё на английском, а не использовать транслитерацию, читать больно

→ Ссылка