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

Добрый день.Итак, у меня есть программа, которая будет извлекать набор строк из MySql в зависимости от опции выбора, которую я щелкнул в опции выбора в HTML, и отобразить ее в контейнере в HTML.Код работает на первом, но как-то на втором он не выбирает строки, которые я запрашивал.Я уже проверил, правильны ли имена столбцов и соответствует ли значение для опции select «выражению if» в моем коде 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 , не является первичным ключом и имеет повторяющиеся значения.Буду очень признателен за вашу помощь.Спасибо!

Ответы [ 4 ]

0 голосов
/ 24 мая 2018

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

$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 голосов
/ 24 мая 2018

Запустите запрос 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>... для генерации вывода.

Также, как правило, рекомендуется избегать вывода строк, которые вы выводите в HTML, с помощью htmlspecialchars().Предполагая ассоциативный массив:

Ваш код будет генерировать таблицу для каждой строки, вероятно, не так, как вы хотите.Поместите теги <table> вне цикла, <tr> внутри цикла для каждой строки, затем вы можете перебирать значения столбцов:

foreach ($rows as $col => $val) {
    $output .= '<td>'.htmlspecialchars($val).'</td>';
}

Вы можете получить столбцы в нужном порядке длятаблицу, указав их в SELECT вместо использования SELECT *.

0 голосов
/ 24 мая 2018

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

while($data = mysql_fetch_assoc($result))
0 голосов
/ 24 мая 2018

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

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

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

Удалить ненужноелинии и проверьте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...