Проблема с 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 шт):
Во-первых, как уже вам сообщил @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. лучше именовать абсолютно всё на английском, а не использовать транслитерацию, читать больно
