Добрый день. Таким образом, у меня есть программа, которая будет извлекать набор строк из MySql в зависимости от опции выбора, которую я нажал в опции выбора в HTML, и отобразить ее в контейнере в HTML. Код работает на первом, но как-то на втором он не запрашивает запрошенные строки. Я уже проверял правильность названий столбцов, и если значение для параметра выбора соответствует "if statement" в моем PHP-коде.
В первом фрагменте кода он работает правильно,
if($_POST["FilterDoc"]=="document_type")
{
$result=mysqli_query($conn,"SELECT * FROM records ORDER BY document_type ASC");
$data = "";
while($rows = mysqli_fetch_assoc($result)){
$document_type = $rows['document_type'];
$date_received = $rows['date_received'];
$application_no = $rows['application_no'];
$hei = $rows['hei'];
$school_name = $rows['school_name'];
$from_co = $rows['from_co'];
$other_govt = $rows['other_govt'];
$contact_person = $rows['contact_person'];
$comment = $rows['comment'];
$program = $rows['program'];
$year_level = $rows['year_level'];
$academic_year = $rows['academic_year'];
$transaction_no = $rows['transaction_no'];
$output = "<table><tr><td>$document_type</td><td>$date_received</td><td>$application_no</td><td>$hei</td><td>$school_name</td><td>$from_co</td><td>$other_govt</td><td>$contact_person</td><td>$comment</td><td>$program</td><td>$year_level</td><td>$academic_year</td><td>$transaction_no</td></tr></table><br>";
$data .= '<a href = "editdoc.php?v='.$transaction_no.'" name="documents">'.$output.'</a>';
}
echo $data ;
}
Но на втором коде, хотя он имеет одинаковую структуру кода, не работает так, как я надеялся,
else if($_POST["FilterDoc"]=="other")
{
$result=mysqli_query($conn,"SELECT * FROM records ORDER BY other_govt ASC");
while($data = mysql_fetch_assoc($result))
$data = "";
while($rows = mysqli_fetch_assoc($result)){
$document_type = $rows['document_type'];
$date_received = $rows['date_received'];
$application_no = $rows['application_no'];
$hei = $rows['hei'];
$school_name = $rows['school_name'];
$from_co = $rows['from_co'];
$other_govt = $rows['other_govt'];
$contact_person = $rows['contact_person'];
$comment = $rows['comment'];
$program = $rows['program'];
$year_level = $rows['year_level'];
$academic_year = $rows['academic_year'];
$transaction_no = $rows['transaction_no'];
$output = "<table><tr><td>$other_govt</td><td>$document_type</td><td>$date_received</td><td>$application_no </td><td>$hei</td><td>$school_name</td><td>$from_co</td><td>$contact_person</td><td>$comment</td><td>$program</td><td>$year_level</td><td>$academic_year</td><td>$transaction_no</td></tr></table><br>";
$data .= '<a href = "editdoc.php?v='.$transaction_no.'" name="documents">'.$output.'</a>';
}
echo $data;
}
Здесь HTML-код для моего выбора,
<select name = "FilterDoc" onchange = "filterby(this);">
<option selected disabled>Filter By</option>
<option value="document_type">Document Type</option>
<option value="date">Date</option>
<option value="hei">HEI</option>
<option value="other">Other Govt.</option>
<option value="person">Person</option></select>
Имя столбца из моей базы данных, которое является other_govt, не является первичным ключом и имеет повторяющиеся значения. Я бы очень признателен вам за вашу помощь. Спасибо!
Запустите запрос SELECT * FROM records ORDER BY other_govt ASC
из MySQL CLI или PHPMyAdmin, чтобы убедиться, что он работает. Проверьте коды ошибок из mysqli_query()
.
Этот цикл удаляет все ваши строки результатов молча:
while($data = mysql_fetch_assoc($result))
$data = "";
Так что ошибка.
Вам может быть проще использовать функцию extract()
чтобы вывести все значения $row
в локальные переменные. Или используйте mysqli_fetch_ojbect($result)
а затем используйте ...<td>{$rows->document}</td>...
для генерации вывода.
Также обычно рекомендуется избегать строк, которые вы htmlspecialchars()
в HTML с помощью htmlspecialchars()
. Предполагая ассоциативный массив:
Ваш код будет генерировать таблицу для каждой строки, возможно, вы не хотите. Поместите теги <table>
вне цикла, <tr>
внутри цикла для каждой строки, затем вы можете перебирать значения столбца:
foreach ($rows as $col => $val) {
$output .= '<td>'.htmlspecialchars($val).'</td>';
}
Вы можете получить столбцы в нужном порядке для таблицы, указав их в SELECT
вместо использования SELECT *
.
Попробуйте следующее
$mQuery = "";
$Filter = $_POST["FilterDoc"];switch ($Filter) {
case "document_type":
$mQuery = "your query for document type";
break; case "other":
$mQuery = "your query for other type";
break; } if (!empty($mQuery)) { {
$result = mysqli_query($conn, $mQuery);
$data = "";
while ($rows = mysqli_fetch_assoc($result)) {
$document_type = $rows['document_type'];
$date_received = $rows['date_received'];
$application_no = $rows['application_no'];
$hei = $rows['hei'];
$school_name = $rows['school_name'];
$from_co = $rows['from_co'];
$other_govt = $rows['other_govt'];
$contact_person = $rows['contact_person'];
$comment = $rows['comment'];
$program = $rows['program'];
$year_level = $rows['year_level'];
$academic_year = $rows['academic_year'];
$transaction_no = $rows['transaction_no'];
$output = "<table><tr><td>$document_type</td><td>$date_received</td><td>$application_no</td><td>$hei</td><td>$school_name</td><td>$from_co</td><td>$other_govt</td><td>$contact_person</td><td>$comment</td><td>$program</td><td>$year_level</td><td>$academic_year</td><td>$transaction_no</td></tr></table><br />";
$data.= '<a href = "editdoc.php?v=' . $transaction_no . '" name="documents">' . $output . '</a>';
}
echo $data;
}
else {
echo "Unknown Filter Request";
}
У вас есть дополнительная строка кода сразу после вашего запроса:
while($data = mysql_fetch_assoc($result))
Все ваши функциональные коды выглядят отлично. Но, вы позвонили
while($data = mysql_fetch_assoc($result))
во втором коде.
Я думаю, что mysql_fetch_assoc нельзя вызывать дважды.
Удалите эту нежелательную строку и проверьте ее.