У меня проблема с созданной мной панелью поиска, у меня нет ошибок, и я знаю, что мой запрос верен, так как моя панель поиска корректно работает в старом mysql-коде. Но поскольку я пытаюсь изменить свой код на mysqli, он не совсем работает. Независимо от того, что пользователь вводит в панель поиска, он всегда указывает «Пожалуйста, введите фразу в строке поиска», независимо от того, пустая панель поиска или нет. Он также не отображает результаты поиска. Поэтому мой вопрос заключается в том, почему он не показывает результаты поиска, если ключевое слово найдено или нет?
Ниже приведен текущий код:
<?php $questioncontent = (isset($_POST['questioncontent'])) ? $_POST['questioncontent'] : ''; $searchquestion = $questioncontent; $terms = explode(" ", $searchquestion); //Query for search bar $questionquery = " SELECT q.QuestionId, q.QuestionContent, o.OptionType, q.NoofAnswers, GROUP_CONCAT(an.Answer ORDER BY an.Answer SEPARATOR ' ') AS Answer, r.ReplyType, q.QuestionMarks FROM Answer an INNER JOIN Question q ON q.AnswerId = an.AnswerId JOIN Reply r ON q.ReplyId = r.ReplyId JOIN Option_Table o ON q.OptionId = o.OptionId WHERE "; $i = 0; foreach ($terms as $each) { $i++; //If one term entered in search bar then perform a LIKE statement to look up the term entered if ($i == 1) { $questionquery .= "q.QuestionContent LIKE ? "; } else { //If multiple terms then add an OR statement to check for multiple keywords $questionquery .= "OR q.QuestionContent LIKE ? "; } } //Order by terms entered in ascending order they have been entered $questionquery .= "GROUP BY q.QuestionId, q.SessionId ORDER BY "; $i = 0; foreach ($terms as $each) { $i++; //if there are multiple terms, then for example there are 2 terms then display content which contains both terms first, then display content which contains only one of those terms if ($i != 1) $questionquery .= "+"; $questionquery .= "IF(q.QuestionContent LIKE ? ,1,0)"; } $questionquery .= " DESC "; //prepare query, bind the terms and execute query $stmt = $mysqli->prepare($questionquery); $stmt->bind_param('ss', $each = '%' . $each . '%', $each = '%' . $each . '%'); $stmt->execute(); $stmt->bind_result($dbQuestionId, $dbQuestionContent, $dbOptionType, $dbNoofAnswers, $dbAnswer, $dbReplyType, $dbQuestionMarks); $questionnum = $stmt->num_rows(); //If search bar is empty and user submits the search bar, then below is the phrase it should display: if (empty($questioncontent)) { echo "Please enter in a phrase in the text box in able to search for a question"; } //Below is the code if no results are found from the search: else if ($questionnum == 0) { echo "<p>Your Search: '$searchquestion'</p>"; echo "<p>Number of Questions Shown from the Search: <strong>$questionnum</strong></p>"; echo "<p>Sorry, No Questions were found from this Search</p>"; } //Finally below is the code that displays the results of the search if search is successful: else { echo "<p>Your Search: '$searchquestion'</p>"; echo"<p>Number of Questions Shown from the Search: <strong>$questionnum</strong></p>"; $output = ""; $output .= " <table border='1' id='resulttbl'> <tr> <th class='questionth'>Question</th> </tr> "; while ($stmt->fetch()) { $output .= " <tr> <td class='questiontd'>{$dbQuestionContent['QuestionContent']}</td> <td class='addtd'><button type='button' class='add' onclick=\"parent.addwindow('{$dbQuestionContent['QuestionContent']}');\">Add</button></td> </tr>"; } $output .= " </table>"; echo $output; } ?>
Вот ссылка на приложение, которое вы можете проверить. Если вы вводите «AAA» в строке поиска, он должен отображать результаты, но он утверждает, что необходимо ввести фразу. ЕСЛИ вы вводите что-то случайное, чтобы поиск не нашел результата, он все еще утверждает, что введите фразу. заявка