Привет я работаю над формой php, которая должна динамически добавлять строку таблицы при нажатии кнопки добавления, и я использую цикл for для сохранения значений, проблема в том, что он не сохраняет данные в моей базе данных и выдает ошибку, что значения цикла моего текстового поля не определены, может кто-нибудь помочь мне вот мой сценарий

<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<script language="javascript" type="text/javascript">
var i=1;
function addRow()
{
          var tbl = document.getElementById('table1');
          var lastRow = tbl.rows.length;
          var iteration = lastRow - 1;
          var row = tbl.insertRow(lastRow);

          var firstCell = row.insertCell(0);
          var el = document.createElement('input');
          el.type = 'text';
          el.name = 'name' + i;
          el.id = 'name' + i;
          el.size = 20;
          el.maxlength = 20;
          firstCell.appendChild(el);

          var secondCell = row.insertCell(1);
          var el2 = document.createElement('input');
          el2.type = 'text';
          el2.name = 'address' + i;
          el2.id = 'address' + i;
          el2.size = 20;
          el2.maxlength = 20;
          secondCell.appendChild(el2);

          var thirdCell = row.insertCell(2);
          var el3 = document.createElement('input');
          el3.type = 'text';
          el3.name = 'contactNum' + i;
          el3.id = 'contactNum' + i;
          el3.size = 20;
          el3.maxlength = 20;
          thirdCell.appendChild(el3);
          alert(i);
          i++;
          frm.h.value=i;
          alert(i);

}
</script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title></head>

<body>
<form action="submit.php" method="post" name="frm" id="frm">
<table width="40%" border="2" cellpadding="0" cellspacing="0" id="table1">
  <tr>
    <td><strong>Name</strong></td>
    <td><strong>Address</strong> </td>
    <td><strong>Contact Num</strong> </td>
  </tr>
  <tr>
    <td><input name="name" type="text" id="name" size="20" maxlength="20" /></td>
    <td><input name="address" type="text" id="address" size="20" maxlength="20" /></td>
    <td><input name="contactNum" type="text" id="contactNum" size="20" maxlength="12" /></td>
  </tr>

</table>
<input type="button" value="Add" onclick="addRow();" />
<input name="Submit" type="submit" value="Submit" />
<label>
<input name="h" type="hidden" id="h" value="0" />
</label>
</form>
</body>
</html>

Вот мой код submit.php

<?php
mysql_connect("localhost", "root", '')or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$num =  $_POST['h'];
for($i=0;$i<=$num;$i++)
{

        $name       = $_POST["name_$i"];
        $address    = $_POST["address_$i"];
        $contactNum = $_POST["contactNum_$i"];

mysql_query("INSERT INTO `com`(`name`, `add`, contact) Values('$name', '$address', '$contactNum')") or die(mysql_error());
}
echo "<h1>Done!</h1>";

?>
1
john 23 Янв 2013 в 17:14

3 ответа

Лучший ответ

Ниже код решит вашу проблему и вставит данные в базу данных.

<script language="javascript" type="text/javascript">
var i=1;
function addRow()
{
      var tbl = document.getElementById('table1');
      var lastRow = tbl.rows.length;
      var iteration = lastRow - 1;
      var row = tbl.insertRow(lastRow);

      var firstCell = row.insertCell(0);
      var el = document.createElement('input');
      el.type = 'text';
      el.name = 'name_' + i;
      el.id = 'name_' + i;
      el.size = 20;
      el.maxlength = 20;
      firstCell.appendChild(el);

      var secondCell = row.insertCell(1);
      var el2 = document.createElement('input');
      el2.type = 'text';
      el2.name = 'address_' + i;
      el2.id = 'address_' + i;
      el2.size = 20;
      el2.maxlength = 20;
      secondCell.appendChild(el2);

      var thirdCell = row.insertCell(2);
      var el3 = document.createElement('input');
      el3.type = 'text';
      el3.name = 'contactNum_' + i;
      el3.id = 'contactNum_' + i;
      el3.size = 20;
      el3.maxlength = 20;
      thirdCell.appendChild(el3);
     // alert(i);
      i++;
      frm.h.value=i;
    //  alert(i);
}
</script>

Внести изменения в соответствии с ниже:

<tr>
    <td><input name="name_0" type="text" id="name_0" size="20" maxlength="20" /></td>
    <td><input name="address_0" type="text" id="address_0" size="20" maxlength="20" /></td>
    <td><input name="contactNum_0" type="text" id="contactNum_0" size="20" maxlength="12" /></td>
</tr>

В submit.php внесены изменения, как показано ниже.

for($i=0;$i<$num;$i++)
0
Devang Rathod 24 Янв 2013 в 08:35

Похоже, что вы увеличиваете «я» слишком много раз.

      i++;
      frm.h.value=i;

Должно быть

      frm.h.value=i;
      i++

Или вы можете настроить цикл for:

     for($i=0; $i < $num; $i++)
2
Joe Brown 23 Янв 2013 в 13:34

Значения текстового поля не определены - в PHP вы ищете name_ $ i (с "_"), а в javascript имена без "_" (el.name = 'name' + i;)

Также обратите внимание, что в вашем javascript ваш цикл начинается с 1 (- в вашем php). Первая строка на стороне клиента идет из HTML, но там вы не поместили ни одного индекса (name = "name" вместо name = "name_0"). Лучше даже не заполнять таблицу какой-либо строкой, а просто вызывать функцию (с i = 0) при загрузке страницы.

0
Alexander 23 Янв 2013 в 13:35