#php #mysql #sql #localhost
#php #mysql #sql #localhost
Вопрос:
Мой PHP-скрипт пишет «Данные введены!», но в базе данных нет записей. Вот код.
<?php
$startdate = $_POST['start'];
$enddate = $_POST['end'];
$type = $_POST['type'];
if ($startdate amp;amp; $enddate amp;amp; $type) {
$con=mysqli_connect("localhost", "root", "")or die("Can not connect to DB");
mysqli_select_db($con,"booker")or die("Can not select DB");
mysqli_query($con,"INSERT INTO events(start_date,end_date,type) VALUES('$startdate','$enddate','$type')");
echo "Data entered!";
}
else {
echo "Please fill in the form!";
}
?>
Я выбираю даты с помощью datepicker, а тип выбирается с помощью опции select в html (доступно 3 варианта). Поля html-формы называются start, end, type. Поля в базе данных — start_date, end_date, type. PHP-скрипт выполняется без ошибок, и все кажется нормальным, но в базе данных нет записей.
Комментарии:
1. я думаю, вам нужно проверить формат даты, который вы вводите
$_POST
затем преобразовать в соответствии с требованиями MySQL, например ‘ГГГГ-ММ-ДД’, если вы действительно используете тип данныхDate
, вам также нужно изучить php error_reporting()2. Я думаю, вам нужно проверить наличие ошибок, а не просто предполагать, что все сработало.
3.
echo "Data entered!";
не означает, что ваша вставка выполнена успешно, потому что это сообщение будет отображаться либо запрос выполнен, либо нет.4. прежде всего, поделитесь результатом,
print_r($_POST)
что вы получаете, во-вторых, используйте это, чтобы получить ошибку запросаdie(mysqli_error($con));
в-третьих, ваш код широко открыт для sql-инъекции5. Я проверил соединение на наличие ошибок, и оно работает, сообщение об ошибке отображается, когда что-то меняется. Я также думал о формате даты, но разве я не должен получать все нули в таблице вместо пустой таблицы?
Ответ №1:
Отправьте все даты, которые вы хотите INSERT
с помощью SQL через date()
вот так:
$date = date('Y-m-d', strtotime($_POST['date']));
Комментарии:
1. Можете ли вы объяснить это подробнее? Что заставляет вас думать, что именно эта часть решает проблему?
2. У OP могут возникнуть проблемы с фильтром даты, если даты неправильно отформатированы для работы в SQL.
Ответ №2:
С вашим PHP-скриптом все в порядке. Это просто поступает из входных данных. Убедитесь, что у вас есть стандартный формат, такой как
"YYYY-MM-DD" (use - 'hypen').
MySQL не будет отвечать, если вы используете не тот формат, например
"YYYY/MM/DD" -> this won't work.