1

我有一些简单的 PHP 代码,它们将生成具有“car_init$i”和“car_num$i”命名方案的新文本框。其中 $i = 1 并且我使用 i++ 来增加它。我遇到的问题是,虽然用户最多可以生成 70 个文本框,但它可以是 1 到 70 之间的任何数字。因此,如果用户只需要 46 个文本框,我可以在页面上有 46 个文本框作为示例. 所以我会使用 car_num1、car_num2、car_init1、car_init2 等作为我的表单名称。

Car_ID 将是我的自动递增主键,并且我将有 2 列 car_num 和 car_init。是否可以这样做: INSERT INTO dbo (car_init, car_num) VALUES (car_init$i, car_num$i) 然后使用 $i = 1 和 i++ 来增加它,同时将所有值添加到新行?Car_id = 1 将在各自的列中包含 car_num1 和 car_init1 信息,Car_id = 2 将包含 car_num2 和 car_init2 信息,依此类推。

编辑:所以这是我现在拥有的代码:

$car_num = $_POST["car_num"];

foreach($_POST['car_init'] as $key => $car_init)
{
// your insert query
$sql = "INSERT INTO CustBill_cars (C_ID, car_init, car_num) VALUES ('1', '".$car_init."',          '".$car_num[$key]."')";
}

每次我添加到我的数据库时会发生什么,只有我输入的最后一件事被输入。因此,如果我需要 3 辆汽车,那就是 6 个文本框,但只有页面上的最后一个文本框是输入的文本框。

编辑 2:这就是我的文本框的生成方式。所有文本框都按照您所说的方式使用'car_init []'和'car_num []'。

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 

$i = 1; 

while ($i <= $_POST['carAmount'] AND $i <= 70) { 
     // Now print the text box to the screen 
     echo "<b>$i</b>. Car Initial: <input type=\"text\" class='element text small' name=\"car_init[]\" maxlength='4' id='car_init[]' /> ";
     echo "Number: <input type=\"text\" class='element text small' name=\"car_num[]\" maxlength='6' id='car_num[]' /><br>";

     $i++;
} 
} 
4

2 回答 2

1

将您的 html 更改为以下内容:

<input name="car_init[]" />
<input name="car_init[]" />
<input name="car_init[]" />
<input name="car_init[]" />
<input name="car_init[]" />

然后在 php 中,你的变量将是一个数组!

$_POST['car_init'] // is an array!

循环遍历这些并执行多个INSERTs。

foreach ($_POST['car_init'] as $car_num => $car_init) {
    // "INSERT INTO dbo (car_init, car_num) VALUES ('$car_init', $car_num)"
}

根据您的更新进行编辑:

INSERT INTO CustBill_cars (C_ID, car_init, car_num) VALUES ('1', '".$car_init."',          '".$car_num[$key]."')"
  • 将 PDO 与准备好的语句一起使用,而不是使用字符串插值。您似乎很容易受到 sql 注入攻击。
于 2013-06-11T19:53:58.417 回答
1

啊,我想我明白了。

这是个问题:

foreach($_POST['car_init'] as $key => $car_init)
{
    // your insert query
    $sql = "INSERT INTO CustBill_cars (C_ID, car_init, car_num) VALUES ('1', '".$car_init."',          '".$car_num[$key]."')";
}

我假设您正在运行查询$sql?如果是这样,那就只运行$sql包含的最后一个值!你需要:

foreach($_POST['car_init'] as $key => $car_init)
{
    // your insert query
    $sql = "INSERT INTO CustBill_cars (C_ID, car_init, car_num) VALUES ('1', '".$car_init."',          '".$car_num[$key]."')";
    // actually run the query!
}
于 2013-06-13T20:05:50.470 回答