Передача значений из выпадающих списков [дубликат]

Вопрос или проблема

У меня есть следующий код для извлечения адресов, который просто не дает никаких результатов, так как не осуществляет связь с моей SQL базой данных. Я проверял, выводя два значения $field и $search, и они извлекаются из формы. Но я не могу передать их в мой SQL-запрос.

<!DOCTYPE html>
<html lang="en">
<head>

<title>Форма поиска</title>
</head>
<form action="addsearch.php" method="POST">
<Select NAME="field">
<Option VALUE="Name">Фамилия</option>
<Option VALUE="First">Имя</option>
<Option VALUE="Comments">Комментарии</option>
 </Select>
    <input type="text" name="query" placeholder="Поиск...">
    <input type="submit" value="Критерии поиска">
</form>
</body>
</html>

<?PHP

$INC_DIR = $_SERVER["DOCUMENT_ROOT"]. "/include/"; 
include($INC_DIR. "*****"); 

$conn = mysqli_connect($hostName, $userName, $password, $databaseName);

// Проверка соединения
if (!$conn) {
die('Не удалось подключиться: ' . mysqli_error($conn));
}

$field = $_POST['field'];
$search = $_POST['query'];

echo "Выбранное поле: ".$field."<br>";
echo "Искомый элемент: ".$search."<br>";

if (isset($_POST['query'])) {
 $search = $conn->real_escape_string($_POST['query']);  
$sql = "SELECT * FROM addresses WHERE '$field' LIKE '%$search%' ";
$find = $_POST['query'];
$result = $conn->query($sql);

$rowcount=mysqli_num_rows($result);

echo "<center>Вы искали <i>".$find."</i><br>";

echo $rowcount." случаев соответствуют вашим параметрам<br><br><br></center>";

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "Адрес: " . $row["id"].".  "."<b>".$row["Last"]."</b>,".$row["First"]." <br>";
        echo $row["Mobile"]."<br>";
        echo $row["Comments"];

echo "<br><br>";

    }
} else {
    echo "0 результатов не найдено. Попробуйте снова";
 }
}

$conn->close();
?>

</body>
</html>

Я передал значения формы как $field = $_POST['field']; и $search = $_POST['query'];. Я затем вывел эти значения, чтобы проверить, что они правильно извлечены – они такие.

Затем я перешел к соединению с базой данных и проверке ISSET и затем попытался найти искомое слово в переменной $search в поле переменной $field. Форма передает запрос, чтобы отобразить то, что я искал, но не дает никаких результатов из SQL базы данных по соответствующим записям.

Ответ или решение

Проблема, которую вы описали, заключается в том, что значения из выпадающего списка и текстового поля корректно передаются, но запрос к базе данных не выполняется должным образом. Давайте убедимся, что все шаги правильно реализованы. Я внесу некоторые изменения в ваш код, чтобы исправить ошибки и улучшить его.

  1. Использование обратных кавычек в SQL-запросе: Ваша ошибка заключается в том, что вы используете одинарные кавычки вокруг переменной $field. Это приводит к тому, что SQL интерпретирует это как строку, а не как имя поля. Вам нужно обернуть имя столбца в обратные кавычки.

  2. Проверка наличия значений: Убедитесь, что вы проверяете запрос перед выполнением SQL, чтобы избежать ошибок.

Вот исправленный код с учетом вышеизложенного:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Search Form</title>
</head>
<body>

<form action="addsearch.php" method="POST">
    <select name="field">
        <option value="Last">Last</option>
        <option value="First">First</option>
        <option value="Comments">Comments</option>
    </select>
    <input type="text" name="query" placeholder="Search...">
    <input type="submit" value="Search Criteria">
</form>

<?php

$INC_DIR = $_SERVER["DOCUMENT_ROOT"]. "/include/";
include($INC_DIR. "*****"); 

$conn = mysqli_connect($hostName, $userName, $password, $databaseName);

// Проверка соединения
if (!$conn) {
    die('Не удалось подключиться: ' . mysqli_error($conn));
}

if (isset($_POST['query']) && isset($_POST['field'])) {
    $field = $conn->real_escape_string($_POST['field']);
    $search = $conn->real_escape_string($_POST['query']);

    echo "Выбранное поле: ".$field."<br>";
    echo "Иск Item: ".$search."<br>";

    $sql = "SELECT * FROM addresses WHERE `$field` LIKE '%$search%'";
    $result = $conn->query($sql);

    if ($result) {
        $rowcount = mysqli_num_rows($result);
        echo "<center>Вы искали <i>".$search."</i><br>";
        echo $rowcount." случаев соответствуют вашим параметрам<br><br><br></center>";

        if ($rowcount > 0) {
            while($row = $result->fetch_assoc()) {
                echo "Адрес: " . $row["id"].".  <b>".$row["Last"]."</b>, ".$row["First"]." <br>";
                echo $row["Mobile"]."<br>";
                echo $row["Comments"];
                echo "<br><br>";
            }
        } else {
            echo "Результатов не найдено. Попробуйте снова.";
        }
    } else {
        echo "Ошибка выполнения запроса: " . $conn->error;
    }
}

$conn->close();
?>
</body>
</html>

Объяснение изменений:

  1. Использованы обратные кавычки: Запрос теперь использует обратные кавычки для обертывания $field, что позволяет MySQL правильно интерпретировать это как имя столбца.

  2. Проверка на наличие значений: Код проверяет, заданы ли оба значения $_POST['query'] и $_POST['field'] перед выполнением запроса.

  3. Обработка ошибок: Добавлен блок, который выводит ошибки SQL, если запрос не удается.

  4. Улучшенно именование: Изменил VALUE атрибуты опций на "Last", "First", и "Comments", чтобы соответствовать вашим ожиданиям о поиске по полям.

Теперь ваш код должен корректно передавать значения из выпадающего списка и текстового поля, а также выполнять поиск по базе данных и отображать результаты.

Оцените материал
Добавить комментарий

Капча загружается...