Я новичок в php. Я хотел бы получить значения, выбранные пользователем, из двух разных вариантов выбора.
CODE:
<?php
// Create database connection
$db = mysqli_connect("localhost", "root", "", "organisation");
if (isset($_POST['submit'])) {
$from_date = $_POST['from_date'];
$to_date =$_POST['to_date'];
$result = mysqli_query($db, "SELECT *
FROM images
WHERE year >= '$from_date'
AND year <= '$to_date';");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Gallery</title>
<meta charset = "utf-8">
</head>
<body>
<div id = "header"></div><br>
<form action = "#" method = "post">
<select name = "from_date">
<option value = "2018-01-01">2018-01-01</option>
<option value = "2019-01-01">2019-01-01</option>
<option value = "2020-01-01">2020-01-01</option>
<option value = "2021-01-01">2021-01-01</option>
<option value = "2022-01-01">2022-01-01</option>
</select> BETWEEN
<select name = "to_date">
<option value = "2018-12-31">2018-12-31</option>
<option value = "2019-12-31">2019-12-31</option>
<option value = "2020-12-31">2020-12-31</option>
<option value = "2021-12-31">2021-12-31</option>
<option value = "2022-12-31">2022-12-31</option>
</select>
<input type = "submit" name = "submit" value = "SUBMIT" />
<?php
while ($row = mysqli_fetch_array($result)) {
echo "<div id='img_div'>";
echo "<img src='images/".$row['images']."' >";
echo "</div>";
}
?>
</form>
</body>
</html>
У меня такое чувство, что я делаю очень глупую ошибку, но я рылся в сети последние 2 часа, и это сводит меня с ума, пожалуйста, помогите.
Теперь, когда я это вижу: if (isset($_POST['submit'])) { в этом нет никакого смысла, просто удалите его
Вы берете дату из html и сопоставляете год в запросе.
удаление if (isset ($ _ POST ['submit'])) {дает следующую ошибку: Примечание: неопределенный индекс: to_date, from_date
Для вашего цикла while требуется $result, который будет существовать только после отправки формы. Поэтому перед отправкой убедитесь, что ваша форма действительно «закрыта». Попробуйте включить error_reporting / display_errors.
Бобби Тейблс получит свой фунт мяса. bobby-tables.com
var_dump $ _POST посмотри, получишь ли ты что-нибудь
@JustBaron О, понятно. Любая работа?
разделяют значение столбца year и sql-запроса echo "SELECT * FROM images WHERE year >= '$from_date' AND year <= '$to_date';"?
@ C2486 Я проверил запрос вручную, он работает отлично.
@ C2486 imgur.com/a/x69FgfO
Тогда поделитесь значением столбца year? Еще раз прошу поделиться запросом?
Ребята, дата, очевидно, в порядке, так как она выбрана из 2 раскрывающихся списков, и значения находятся в правильном формате для запроса MySQL
@RiggsFolly: Сомневалась, как это from_date : 2019-01-01 на to_date: 2018-12-31. Также нет проверки, чтобы to_date всегда был больше, чем from_date, и в соответствии с изображением есть только 3 строки / записи. Так что подтверждал, какой параметр даты он использует.
@RiggsFolly а? С каких это пор нужно проверять, была ли отправлена кнопка отправки через POST?
@FedericoklezCulloca Вам всегда нужно проверять, была ли отправлена форма, чтобы вы не запускали код, который зависит от $_POST, содержащий что-то, при первом запуске формы, по ссылке или вручную вводя адрес в адресную строку браузера.
@BBanner В чем собственно проблема? Перед отправкой формы убедитесь, что тег формы правильно закрыт. Включите и отобразите ошибки, это должно дать вам некоторые подсказки о том, где вы ошибаетесь.
К какому типу относится ваше поле year?
@RiggsFolly Я понимаю, но впервые вижу это, проверяя кнопку отправки. В любом случае, не следует ли проверять все действительно необходимые входные данные?
@FedericoklezCulloca Ну да, или проверив if ($_SERVER['REQUEST_METHOD'] == 'POST', но это запускает ответ в полное руководство
@RiggsFolly Я, вероятно, не очень понял, потому что мой комментарий, который вы сказали OP не следовать, был о странности проверяемой кнопки отправки.






пожалуйста, обратитесь к этому коду, он вам поможет. https://www.sourcecodester.com/php/11560/how-select-data-between-two-dates-phpmysql.html
Я вижу, у вас мало представителей, но на самом деле это всего лишь комментарий. Этот тип ответа привлекает отрицательные голоса или помечается как Я не делал DV, и если это произойдет, вы потеряете очки репутации и займет больше времени, чтобы добраться до 50 представителей, которые вам нужно прокомментировать любой вопрос. А до тех пор придерживайтесь тех вопросов, которые задаются правильно, и поэтому на них легко ответить, не требуя пояснений. meta.stackexchange.com/questions/214173/…
Правильно, вы должны помнить жизненный цикл страницы.
При первом запуске этой страницы по ссылке на другой странице или непосредственно путем ввода ее адреса в браузере она не будет отправлена и, следовательно, в массиве $_POST не будет данных.
Вы правильно проверяете это вверху страницы, сделав это
if (isset($_POST['submit']))
но это не остановит запуск вашего кода выборки базы данных позже на странице, и, следовательно, ошибку, поскольку нет действительного $result.
Есть много способов пересказать это, но, возможно, это самый простой.
Поэтому я бы посоветовал вам изменить код примерно так, чтобы убедиться, что вы запускаете код только в зависимости от отправляемой формы, когда она действительно отправляется.
<?php
// Create database connection
$db = mysqli_connect("localhost", "root", "", "organisation");
if (isset($_POST['submit'])) {
$from_date = $_POST['from_date'];
$to_date =$_POST['to_date'];
$result = mysqli_query($db, "SELECT *
FROM images
WHERE year >= '$from_date'
AND year <= '$to_date';");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Gallery</title>
<meta charset = "utf-8">
</head>
<body>
<div id = "header"></div><br>
<form action = "#" method = "post">
<select name = "from_date">
<option value = "2018-01-01">2018-01-01</option>
<option value = "2019-01-01">2019-01-01</option>
<option value = "2020-01-01">2020-01-01</option>
<option value = "2021-01-01">2021-01-01</option>
<option value = "2022-01-01">2022-01-01</option>
</select> BETWEEN
<select name = "to_date">
<option value = "2018-12-31">2018-12-31</option>
<option value = "2019-12-31">2019-12-31</option>
<option value = "2020-12-31">2020-12-31</option>
<option value = "2021-12-31">2021-12-31</option>
<option value = "2022-12-31">2022-12-31</option>
</select>
<input type = "submit" name = "submit" value = "SUBMIT" />
</form>
<?php
// check you have something to process
if (!empty($result) {
while ($row = mysqli_fetch_array($result)) {
echo "<div id='img_div'>";
echo "<img src='images/".$row['images']."' >";
echo "</div>";
}
}
?>
</body>
</html>
Я также переместил ваш тег </form>, чтобы форма корректно закрывалась перед выводом изображений.
You may also find that the query returns nothing as it is possible to enter a start date that is greater than the end date using the dropdowns, but that is just a matter of adding a check for this.
Also your script is wide open to SQL Injection Attack Even if you are escaping inputs, its not safe! Use prepared parameterized statements in either the
MYSQLI_orPDOAPI's
Вы бы сделали это
$stmt = $db->prepare("SELECT *
FROM images
WHERE year >= ?
AND year <= ?";
$stmt->bind_param('ss', $from_date, $to_date);
$stmt->execute();
// get resultset from prpared statement
$result = $stmt->get_result();
Во-первых, у вас есть риск sql-инъекция, во-вторых, что не работает?