如何从动态数量的html文本框中传递多个值来插入语句?

时间:2012-12-28 20:37:38

标签: php javascript html mysql

我正在做一个项目,根据GET方法得到的数字,我显示用于存储多个值的HTML文本框的动态数量。我从1开始以递增的方式给每个文本框唯一的名称+ id(像textbox1,textbox2)。现在我希望当我点击提交按钮时,它应该触发一个插入语句,它会立即插入所有文本框值。我知道我可以通过数组来做,但我的问题是如何在数组中获取所有textbox的值以及如何执行insert语句?

我已完成以下代码:

以下是提交按钮的PHP代码:

 $schedules = array();
    if(isset($_POST['submit']))
    {
        for($d=1; $d<=$_GET['totalDay'] ;$d++)
        {
            array_push($schedules,$_POST['txtSchedule'.'$d']);
        }
        print_r($schedules);
    }

这是html代码:

<form method="post">
<table>
  <tr>
    <td>Day</td>
    <td>Schedule</td>
 </tr>
  <?php
  if(isset($_GET['tour_code']) and ($_GET['totalDay']!=1))
  {
    $tour_code = $_GET['tour_code'];
    $total = $_GET['totalDay'];

    $i=0;
    do
    {
      $i=$i+1;
  ?>
  <tr>
    <td><?php echo $i;?></td>
    <td>
      <input name="txtSchedule<?php echo $i;?>" type="text"  size="30"/>
    </td>
  </tr>
  <?php
      $start = date('Y-m-j',strtotime($start.'+1 days'));
  }while($i!=$total);
  }
  ?>
</table>
<input type="submit" name="submit" value="Add Tour Details" />

但我得到一个空阵列。 注意:$ total来自URLString的$ GET方法。

以下是HTML的输出: enter image description here

4 个答案:

答案 0 :(得分:1)

最简单的事情。您有错误,无法使用

array_push($schedules,$_POST['txtSchedule'.'$d']);

你必须在$ d上使用DOUBLE QUOTES(单引号不会评估d,它会用美元符号读取“txtSchedule $ d”,而不是实际上是0,1,...,n)

array_push($schedules,$_POST['txtSchedule'."$d"]);
//or no quotes at all
array_push($schedules,$_POST['txtSchedule'.$d]);

(这可能会解决你的问题)


但现在让我们来看看如何通过表单命名约定为处理页面中的$ _POST对象提供一个数组

你没有使用数组语法,但你是如此接近。在PHP中,提交的内容需要是预期的格式,并且迭代txtSchedule0,txtSchedule1,... txtScheduleN不是Array(),但是$ _POST []是一个包含每个的数组(给定你的名字你的名字)输入字段,缺少1个小东西 - 方括号)。

您需要做的是命名您的输入,因为数组是数组名称,后跟方括号(arrayName []),这里是如何创建名称为txtSchedule的输入数组(当您print_r($时) _POST ['txtSchedule'])你得到一个Array())

<input name="txtSchedule[<?php echo $i;?>]" type="text"  size="30"/>

当我开始使用PHP时,我遇到了同样的问题,你忘了[&lt;?php echo $ i;?&gt;]

周围的方括号

如果你想对输入数组进行迭代,请确保:

for($i=0; $i < count($_POST['txtSchedule']); $i++){
    echo "They entered " . $_POST['txtSchedule'][$i] . " in the $i" . "th position";  
}

...您使用了&lt; input name =“arrayName [$ i]”&gt; sytax,甚至更简单的&lt; input name =“arrayName []”&gt;因为它按照输入在HTML页面中的顺序自动神奇地生成一个数组。命名约定非常重要,因为你错了(你使用了arrayName0,arrayName1,... arrayNameN而不是arrayName [0],arrayName [1],... arrayName [n]),它将永远不可用把你当成阵列。

答案 1 :(得分:0)

如果我正确理解你的问题,你试图从每个文本框中检索用户输入并将其保存在数组中? 如果是这样,我会使用jquery选择所有文本框并循环遍历它们并检索值

答案 2 :(得分:0)

如果您纯粹关注SQL语法,那么您可以通过提供更多的值集来追加额外的记录以在查询末尾插入:

INSERT INTO myTable (fieldName1, fieldName2) values ("Value1A", "Value1B"), ("Value2A", "Value2B")

如果您查看PHP逻辑,那么我的第一个建议是使用http POST方法而不是GET。然后从处理$_POST字段开始:

$data= array();

foreach($_POST as $key => $value) {
  if (preg_match('/^TextBox\d+$/', $key)) {
    $data[] = $mysqli->real_escape_string($value);
  }
}

根据可用数据

构造SQL查询
if (count($data) > 0) {
  $sql = 'INSERT INTO `myTable` VALUES("' . implode('"),("', $data).'")';

  // log query

  // execute query

  // process query results

  // redirect user to a thankyou page
  header('Location: thankyou.php');
}

请注意,代码假定您在$mysqli

处有一个mysqli连接实例

答案 3 :(得分:-1)

不确定这是否是您正在寻找的,但至少应该给您一个开始..

  String []ar=request.getParameterValues("name");
     String cmd=request.getParameter("cmd");
     if(cmd==null) cmd=""; 
     if(cmd.equals("Submit")){
     for(int i=0;i<ar.length;i++) {
      insert logic;

 <form method="post" action="page3.jsp">
 <br/><input type="text" name="name"/>
 <br/><input type="text" name="name"/>
 <br/><input type="text" name="name"/>

 <br/> <input type="submit" value="Submit" name="cmd"/>
 </form>

Orignal post http://www.daniweb.com/web-development/jsp/threads/197777/insert-dynamic-textbox-value-in-database