Я создаю список клиентов и их детали, которые импортируются из базы данных. В конце каждой строки есть кнопка «Изменить», которая отображает всю информацию об этом клиенте в форме, которая должна быть отредактирована.
Поскольку список клиентов импортируется из базы данных, я написал форму на 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>
Как видите, теги формы печатаются сначала, а затем и остальные. Почему это происходит? Я новичок в этом, вся помощь приветствуется.
Это произошло потому, что вы создали <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
}
Вы не можете добавить форму в атрибуте 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++;
}