#php #mysql #forms #radio-button
#php #mysql #формы #переключатель
Вопрос:
Проблема: у меня есть форма поиска с переключателем, которая использует PHP для публикации в базе данных. Если переключатель не установлен, я бы все равно хотел, чтобы остальная часть поиска была запущена. Однако это не так, потому что это создает проблему с неопределенной переменной.
Как я представляю себе решение: я прочитал в Интернете (особенно здесь, в stackoverflow), и, похоже, это должно быть исправлено путем проверки isset, !empty или аналогичного.
Итак, почему вы публикуете?Я поместил проверку в несколько мест в своем коде, но либо остальная часть поиска не выполняется, либо она выполняется, но оставляет столбец пустым (т. Е. Не Отображает информацию базы данных для переменной, на которую ссылается переключатель).
Что я пробовал: это была моя последняя попытка. Он по-прежнему выдает ошибку, а также, даже если это сработает, я думаю, что это может изменить значение в таблице результатов, поэтому оно будет отличаться от фактического значения в базе данных.
«сложность» и «usedbefore» — это переключатели в моем коде.
if (empty($_POST['difficulty']) amp;amp; empty($_POST['usedbefore'])) {
$difficulty = null;
$usedbefore = null;}
else {
$difficulty = $_POST['difficulty'];
$usedbefore = $_POST['usedbefore'];
Tldr; Где я должен разместить проверку isset (или аналогичную), чтобы избежать проблемы с неопределенной переменной для переключателей и при этом выполнить остальную часть кода?
HTML-форма-код:
<h1>Søk etter spørsmål</h1>
<form action="Search.php" method="post">
<div class="container_search_criteria">
<label>Quizspørsmål</label> <input type="text" id="search-question" name="question" title="Quizsspørsmål" placeholder="Søk etter spørsmål">
<label>Kategori:</label> <select name="category">
<option value="Finkultur">Finkultur</option>
<option value="Geografi">Geografi</option>
<option value="Historie">Historie</option>
<option value="Livsstil">Livsstil</option>
<option value="Natur amp; Vitenskap">Natur amp; Vitenskap</option>
<option value="Populærkultur">Populærkultur</option>
<option value="Samfunnsfag">Samfunnsfag</option>
<option value="Sport amp; Spill">Sport amp; Spill</option>
</select>
<label>Sub-kategori</label><input type="text" name="subcategory" class="subcat" id="add-subcategori" title="Sub-kategori" placeholder="Legg til sub-kategori">
<label>Vanskelighetsgrad: </label>
<ul class="difficulty">
<li>1</li>
<li><input type="range" id="points" name="difficulty" min="1" max="5"></li>
<li>5</li>
</ul>
<label>Har du brukt spørsmålet før?</label>
<ul class="usedbefore">
<li><input type="radio" name="usedbefore" value="Ja"></li>
<li>Ja</li>
<li><input type="radio" name="usedbefore" value="Nei"></li>
<li>Nei</li>
</ul>
<label>Hvis ja:</label>
<ul class="details_usedbefore">
<li>Sted</li>
<li><input type="text" class="input_usedbefore" name="search-place" id="search-place" title="Sted brukt før" placeholder="Legg til sted"></li>
<li>Dato</li>
<li><input type="date" class="input_usedbefore" name="search-date" id="search-date" title="Dato brukt før"></li>
</ul>
<button name="submit" class="main_search_button">Søk</button>
<a id="button_link" href="index.htm"><input type="submit" class="secondary_search_button" value="Avbryt"></a>
</div> <!--End form container-->
</div> <!-- End question form container-->
</form>
<?php
include('includes/search.php');
?>
PHP:
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$dbServername = "localhost";
$dbUsername = "root";
$dbPassword = "";
$dbName = "quiz_test";
$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);
if (isset($_POST['submit'])) {
$question = $_POST['question'];
$category = $_POST['category'];
$sub_category = $_POST['subcategory'];
if (empty($_POST['difficulty']) amp;amp; empty($_POST['usedbefore'])) {
$difficulty = null;
$usedbefore = null;}
else {
$difficulty = $_POST['difficulty'];
$usedbefore = $_POST['usedbefore'];
if ($question != "" or $category != "" or $sub_category != "" or $difficulty != "" or $usedbefore != "" ) {
$query = "Select * FROM questions WHERE question LIKE '%$question%' AND category LIKE '%$category%' AND subcategory LIKE '%$sub_category%' AND Difficulty LIKE '%$difficulty%' AND UsedBefore LIKE '%$usedbefore%'";
$result = mysqli_query($conn, $query);
$count = mysqli_num_rows($result);
if ($count > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$question = $row ['question'];
$category = $row ['category'];
$sub_category = $row ['subcategory'];
$difficulty = isset($row['difficulty']);
$usedbefore = isset($row['usedbefore']);
?>
<tr>
<td><?php echo $question;?></td>
<td><?php echo $category;?></td>
<td><?php echo $sub_category;?></td>
<td><?php echo $difficulty; ?></td>
<td><?php echo $usedbefore;?></td>
</tr>
<?php
}
}
}
else {
echo "<h1>" . 'Ingen treff' . "</h1>";
}
}
}
?>
Комментарии:
1. Какая строка выдает ошибку и на какое имя переменной она ссылается?
2. Вы проверяете, являются ли оба пустыми одновременно. Если это не так, то вы пытаетесь назначить
$difficulty = $_POST['difficulty']; $usedbefore = $_POST['usedbefore'];
— но один из них все еще может быть не установлен на данный момент. Вы должны проверить оба по отдельности.3. @ 04FS Обратите внимание: строка 24 прямо сейчас. «= null» в строке 14/15 закрывает столбец, но если я его удалю, я тоже туда попаду.
4. Как я уже сказал, вы должны обрабатывать их по отдельности, а не за один раз. Вы пытаетесь получить доступ к обоим этим параметрам POST, если они оба не были пустыми. Это все еще оставляет возможность того, что один из них был пуст.
5. @04FS Да, извините, я работал над решением и забыл ответить на ваш второй комментарий. Когда я пытаюсь их разделить, ошибка не появляется, но код не работает.
if (isset($_POST['submit'])) { $question = $_POST['question']; $category = $_POST['category']; $sub_category = $_POST['subcategory']; if (empty($_POST['difficulty'])) { $difficulty = null; if (empty($_POST['usedbefore'])) { $usedbefore = null;} else { $difficulty = $_POST['difficulty']; $usedbefore = $_POST['usedbefore'];