Программа для извлечения набора строк в PHP имеет ту же структуру кода, но не дает результатов по другой

0

Добрый день. Таким образом, у меня есть программа, которая будет извлекать набор строк из 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, не является первичным ключом и имеет повторяющиеся значения. Я бы очень признателен вам за вашу помощь. Спасибо!

Теги:
if-statement

4 ответа

0
Лучший ответ

Запустите запрос 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 *.

  • 0
    Ой! Я явно не заметил этого. Мое разочарование опередило меня. Спасибо, сэр!
  • 0
    Но могу ли я также спросить, что такое $ lines, $ col и $ val на основе моего кода? Я немного запутался.
Показать ещё 1 комментарий
0

Попробуйте следующее

$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";
}
0

У вас есть дополнительная строка кода сразу после вашего запроса:

while($data = mysql_fetch_assoc($result))
0

Все ваши функциональные коды выглядят отлично. Но, вы позвонили

while($data = mysql_fetch_assoc($result)) во втором коде.

Я думаю, что mysql_fetch_assoc нельзя вызывать дважды.

Удалите эту нежелательную строку и проверьте ее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню