Проблема с переключателем неопределенной переменной — где разместить проверку isset

#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'];