1

こんにちは、追加ボタンが押されたときにテーブル行を動的に追加する必要がある 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>";

?>
4

3 に答える 3

2

「i」を何度もインクリメントしているようです。

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

する必要があります

      frm.h.value=i;
      i++

または、for ループを調整できます。

     for($i=0; $i < $num; $i++)
于 2013-01-23T13:34:36.433 に答える
0

以下のコードは問題を解決し、データベースにデータを挿入します。

<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++)
于 2013-01-24T08:35:00.463 に答える
0

テキストボックスの値は未定義です - PHP では name_$i ("_" 付き) を探し、javascript では名前は "_" なしです (el.name = 'name' + i;)

また、JavaScript ではループが 1 から始まることに注意してください (-php 内)。最初のクライアント側の行は HTML からのものですが、インデックスを配置していません (name="name_0" ではなく name="name")。テーブルに行を入力せず、ページがロードされたときに関数を (i=0 で) 呼び出すだけのほうがよいでしょう。

于 2013-01-23T13:35:45.877 に答える