html — & lt; form & gt; и & lt; / form & gt; теги, напечатанные в php, не выравниваются должным образом

Я создаю список клиентов и их детали, которые импортируются из базы данных. В конце каждой строки есть кнопка «Изменить», которая отображает всю информацию об этом клиенте в форме, которая должна быть отредактирована.

Поскольку список клиентов импортируется из базы данных, я написал форму на PHP следующим образом:

while($row = mysqli_fetch_array($result))
{
echo"   <tr id=".$count.">";
echo"       <form method='post' id='edit_form' action='search_client_details.php?edit=true'>";
echo"       <td><input type='checkbox' id='chkStatus' name='customer' class='chkbox'  value='".$row['client_id']."'></td>";
echo"       <td>".$row['client_name']."</td>";
echo"       <td>".$row['client_address']."</td>";
echo"       <td>".$row['client_type']."</td>";
echo"       <td><input type='submit' name='submit' id='edit_form_submit' value='Edit'  class='btn btn-success' style='background-color:#27ae60; color:#fff'></td>";
echo"       </form>";
echo"   </tr>";

$count++;
}

Он печатает список правильно. Но когда кнопка редактирования нажата, она не работает. Проверка элемента в строке показывает это-

<tr id="1" style="display: table-row;">
<form method="post" id="edit_form" action="search_client_details.php?edit=true"></form>
<td><input type="checkbox" id="chkStatus" name="customer" class="chkbox" value="1"></td>
<td>Name</td>
<td>address</td>
<td>type</td>
<td><input type="submit" name="submit" id="edit_form_submit" value="Edit" class="btn btn-success" style="background-color:#27ae60; color:#fff"></td>

Как видите, теги формы печатаются сначала, а затем и остальные. Почему это происходит? Я новичок в этом, вся помощь приветствуется.

0

Решение

Это произошло потому, что вы создали <td> элемент сразу после открытия тега формы. Ваша HTML-разметка недействительна. Считайте, что это две строки:

echo "<form method='post' id='edit_form' action='search_client_details.php?edit=true'>";
echo"<td><input type='checkbox' id='chkStatus' name='customer' class='chkbox'  value='".$row['client_id']."'></td>";

Вы видите, что вторая строка имеет другое открытие td элемент, который в этом случае недопустим

добавленной

Если вы хотите, чтобы все было отправлено, вы должны использовать массив для имени элемента. Поместите открывающий тег формы вне таблицы и закрывающий тег формы после закрывающего тега таблицы.

<form method='post' id='edit_form' action='search_client_details.php?edit=true'>
<table>
.... any markup
<?php
while($row = mysqli_fetch_array($result))
{
echo"   <tr id=".$count.">";
echo"       <td><input type='checkbox' id='chkStatus' name='customer[]' class='chkbox'  value='".$row['client_id']."'></td>";
echo"       <td>".$row['client_name']."</td>";
echo"       <td>".$row['client_address']."</td>";
echo"       <td>".$row['client_type']."</td>";
echo"   </tr>";

$count++;
}?>
</table>
<input type='submit' name='submit' id='edit_form_submit' value='Edit'  class='btn btn-success' style='background-color:#27ae60; color:#fff'>
</form>

Затем в сторону сервера search_client_details.php, ты можешь использовать for цикл для итерации всего кода:

for( $i = 0,$length = count($_POST['customer']); $i < $length; $i++ ) {
echo $_POST['customer'][$i]; // this will show all the data sending from form
// do the operation here
}
2

Другие решения

Вы не можете добавить форму в атрибуте tr. Вместо этого вы можете вставить новую таблицу в существующую и назначить ее форме

попробуй это:

while($row = mysqli_fetch_array($result))
{
echo "   <tr id=".$count.">";
echo "       <td><form method='post' id='edit_form' action='search_client_details.php?edit=true'><table><tr>";
echo "       <td><input type='checkbox' id='chkStatus' name='customer' class='chkbox'  value='".$row['client_id']."'></td>";
echo "       <td>".$row['client_name']."</td>";
echo "       <td>".$row['client_address']."</td>";
echo "       <td>".$row['client_type']."</td>";
echo "       <td><input type='submit' name='submit' id='edit_form_submit' value='Edit'  class='btn btn-success' style='background-color:#27ae60; color:#fff'></td>";
echo "</tr></table></form></td>";
echo "</tr>";

$count++;
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector