PHP / MYSQLI, как я могу вернуть переменную из while l oop внутри формы для использования в запросе $ _GET в действии / методе этой формы? - PullRequest
0 голосов
/ 30 мая 2020

У меня есть форма html, в которой используется PHP, а l oop для заполнения меню выбора из базы данных MYSQLi. Код ниже;

$query = "SELECT on_programme, last_name, first_name, middle_name, id FROM constant_client WHERE on_programme=1 ";
$result = mysqli_query($conn, $query);

echo '<p><label for="current_clients">Select Client by name: </label>
        <select id="current_clients" name="current_clients">
        <option> -- Select Client -- </option>';

        while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
          echo '<option>'.ucwords($row['last_name']).', '.ucwords($row['first_name']).' '.ucwords($row['middle_name']).'</option>';
        }
echo '</select>'; 

Вышеуказанное работает, форма заполняется необходимыми записями клиентов. Однако затем я хочу использовать эти данные для ссылки на отдельную страницу клиента, которую я пытался использовать с помощью

echo '&emsp;<a href="selected_client.php?id='.$row['id'].'" onClick="this.form.submit()">Go!</a>';

, что не сработало, поэтому я попытался установить действие формы на

action="selected_client.php?id='.$row['id'].'"

методом "GET", который также не сработал. Как вы можете видеть в запросе, я также выбираю «id» из таблицы, чтобы позже я мог вызвать эту часть массива, мне просто не нужно или не хочу повторять ее. При использовании метода действия формы переменная $ row ['id'] не устанавливается, а при использовании метода onClick я получаю ошибку «Попытка получить доступ к смещению массива при значении типа null».

Я полагаю что переменная должна быть установлена ​​до того, как может произойти действие формы, но я не могу представить, как я смогу сделать это, не перемещая while l oop или, по крайней мере, не возвращая из него значение. Можно ли вызвать метод и действие формы при отправке, а не в верхней части формы? Будет ли это иметь какое-то значение?

Edit; в соответствии с просьбой, моя попытка использовать скрытый метод для формы

echo '<input type="submit" name="submit" value="Go!">
<input type="hidden" name="id" value="'.$row['id'].'">';

, который по-прежнему возвращает значение типа null error.

Edit # 2 - весь код встроенный.

$query = "SELECT on_programme, last_name, first_name, middle_name, id FROM constant_client WHERE on_programme=1 ";
$result = mysqli_query($conn, $query);
echo  '<form action="selected_client.php" method="get">
    <fieldset>';

echo '<p><label for="current_clients">Select Client by name: </label>
        <select id="current_clients" name="current_clients">
        <option> -- Select Client -- </option>';

        while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
          echo '<option>'.ucwords($row['last_name']).', '.ucwords($row['first_name']).' '.ucwords($row['middle_name']).'</option>';
        }
echo '</select>';
echo '<input type="submit" name="submit" value="Go!">
<input type="hidden" name="id" value="'.$row['id'].'">';

echo '</fieldset></form>';

1 Ответ

1 голос
/ 30 мая 2020

Добавьте событие onChange и передайте выбранное значение некоторой функции, в этой функции установите скрытое поле с этим выбранным значением. Теперь вы можете отправить форму, и выбранное значение может быть получено. Ниже представлено решение.

$query = "SELECT on_programme, last_name, first_name, middle_name, id FROM constant_client WHERE on_programme=1";
$result = mysqli_query($conn, $query);
echo  '<form action="selected_client.php" method="get">
    <fieldset>';

echo '<p><label for="current_clients">Select Client by name: </label>
        <select id="current_clients" name="current_clients" onChange="setId(this.value);">
        <option value=""> -- Select Client -- </option>';

        while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
          echo '<option value="'.$row['id'].'">'.ucwords($row['last_name']).', '.ucwords($row['first_name']).' '.ucwords($row['middle_name']).'</option>';
        }
echo '</select>';
echo '<input type="submit" name="submit" value="Go!">
<input type="hidden" name="id" id="hidden_field" value="">';

echo '</fieldset></form>';

Добавьте этот скрипт для установки значения в скрытом поле.

<script>
function setId(rowValue){
   document.getElementById("hidden_field").value=rowValue;
}
</script>
...