-1

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

我已经完成了以下代码:

这是提交按钮的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 的输出: 在此处输入图像描述

4

4 回答 4

1

先说最简单的。你有一个错误,你不能使用

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

您必须在 $d 上使用双引号(单引号不会计算 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 时,我遇到了同样的问题,您忘记了 [<?php echo $i;?>] 周围的方括号

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

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

...您已经使用了 <input name="arrayName[$i]"> 语法,或者更简单地使用 <input name="arrayName[]"> 来自动神奇地生成一个数组,按顺序提交输入在 HTML 页面中。命名约定非常重要,因为你弄错了(你使用 arrayName0,arrayName1,... arrayNameN 而不是 arrayName[0],arrayName[1],...arrayName[n]),它永远不会可用给你一个数组。

于 2012-12-29T09:31:51.713 回答
0

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

于 2012-12-28T20:53:21.680 回答
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

于 2012-12-28T21:01:50.897 回答
-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>

原始帖子http://www.daniweb.com/web-development/jsp/threads/197777/insert-dynamic-textbox-value-in-database

于 2012-12-28T20:56:08.297 回答