2017-02-21 19 views
0

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

В список клиента импортируется из базы данных, я написал форму в PHP, как following-

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++; 
     } 

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

<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

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

ответ

2

Это произошло потому, что вы создали элемент <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 
} 
+0

Что делать, если я дал тег формы для всего tr? Или это просто неверно иметь тег td внутри тега формы? – GradDev

+0

Да, это недействительная разметка в любом случае. Но вы можете получить его внутри td так: '

некоторые элементы
' –

+0

Но мне нужна вся строка, представленная. Любой способ сделать это в JavaScript или JQuery? – GradDev

1

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

попробовать это:

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++; 
     } 
+0

Это сработало. Теперь мне нужно перепроектировать таблицу в css, поскольку каждая строка имеет разную ширину. Благодаря! Но я до сих пор задаюсь вопросом, почему не разрешено иметь td или tr тег внутри формы ... – GradDev

+0

Это просто как чашка кофе. Если вы смешаете с солью, соусом чили, это будет очень плохой вкус!:) –

+0

Фактически, из-за неправильного html, ваша форма закрывается до того, как элементы вашей формы сгенерированы –

 Смежные вопросы

  • Нет связанных вопросов^_^