使用foreach循环插入多个字段

5

我想在一个表格中插入多个字段时遇到了问题。

这是我的表单:

<h1>Add user</h1>
 <form method="post" action="index.php">

 <table>
    <thead>
        <th>Name</th>
        <th>Age</th>
    </thead>

    <tr>
        <td><input name="name[]" type="text" /></td>
        <td><input name="age[]" type="text" /></td>
    </tr>

    <tr>
        <td><input name="name[]" type="text" /></td>
        <td><input name="age[]" type="text" /></td>
    </tr>

    <tr>
        <td><input name="name[]" type="text" /></td>
        <td><input name="age[]" type="text" /></td>
    </tr>
</table>

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

这里是提交代码:

if (isset($_POST['submit'])) {

    foreach ($_POST as $val) {
        $name = $val['name'];
        $age = $val['age'];

        mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')");
    } 
}

这个查询语句向数据库中插入了数据,但不是我输入的值。

请问有人可以帮助我吗?


1
SQL注入,有人吗? - Mike
没错,我等会儿再修复这个问题,现在必须先修复这个。 - Kim Andersson
6个回答

15

你正在对$_POST进行foreach,而不是对姓名/年龄数组进行。你应该像这样对名称或年龄数组进行foreach:

if (
   !empty($_POST['name']) && !empty($_POST['age']) &&
   is_array($_POST['name']) && is_array($_POST['age']) &&
   count($_POST['name']) === count($_POST['age'])
) {
    $name_array = $_POST['name'];
    $age_array = $_POST['age'];
    for ($i = 0; $i < count($name_array); $i++) {

        $name = mysql_real_escape_string($name_array[$i]);
        $age = mysql_real_escape_string($age_array[$i]);

        mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')");
    } 
}

我还要指出的是,您目前容易受到SQL注入攻击,因此我添加了逃避您的字符串名称/年龄的步骤。

我强烈建议只需进行单个批量插入到数据库中,而不是分别插入每个记录(实现方法由您决定)。从性能角度来看,这种方法几乎总是更可取的。

最后,请不要使用mysql_*函数,因为它们已被弃用。请考虑更改为mysqli或PDO。


谢谢,但是我有解决方案的问题。 - yaqoob

5
if (isset($_POST['submit'])) {

$i = 0;
foreach ($_POST as $val) {
    $name = $_POST['name'][$i];
    $age = $_POST['age'][$i];

    mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')");
    $i++;
  } 
}

这将解决你的问题!

1
foreach($_POST['firstname'] as $key=>$value) {
    $firstname = $_POST['firstname'][$key];
    $lastname = $_POST['tipo'][$key];
    echo "Parte: $lastname";
    echo "<br>"; 
    echo "Tipo: $firstname";
    echo "<br>";
}

你应该添加解释来帮助提问者和其他读者理解这个解决方案。仅有代码的答案是不被鼓励的。 - Goose

0

以下是如何一次插入多行的示例

$query_string = "INSERT INTO YOURTBL_NAME(column_1,column_2)VALUES";
    $data ="";
    for($i=0;$i<count($YOUR FILE ARRAY);$i++)
    {
        $data .='("'.$paramater_1[$i].'","'.$paramater_2.'"),';
    }
     $qry = substr($query_string.$data, 0, -1); 
     $result = mysql_query($qry);

0

这是一段对我来说很好用的稍微简单一些的代码。

if (isset($_POST['submit'])) {
     $i = 0;
     for ((array) $_POST as $val) {
       $sql = "INSERT INTO users (name, age) VALUES (
                   '{$_POST["name"][$i]}','{$_POST["age"][$i]}'
               );
       mysql_query($sql);
       echo (!mysql_affetced_rows()) ? "Query Wrong" : "Query Okay";
       $i++;
     } 
    }

0
$education_institute_array = $_POST['education_institute'];
        $education_qualification_array = $_POST['education_qualification'];
        $education_start_date_array = $_POST['education_start_date'];
        $education_end_date_array = $_POST['education_end_date'];
        $education_note_array = $_POST['education_note'];
        for ($i = 0; $i < count($education_institute_array); $i++) {
            $education_institute = mysql_real_escape_string($education_institute_array[$i]);
            $education_qualification = mysql_real_escape_string($education_qualification_array[$i]);
            $education_start_date = mysql_real_escape_string($education_start_date_array[$i]);
            $education_end_date = mysql_real_escape_string($education_end_date_array[$i]);
            $education_note = mysql_real_escape_string($education_note_array[$i]);
            $sql_education_insert = "INSERT INTO `education` (`user_id`, `education_institute`, `education_qualification`, `education_start_date`, `education_end_date`, `education_note`) VALUES ('$user_id', '$education_institute', '$education_qualification', '$education_start_date', '$education_end_date', '$education_note')";
            $sql_result_education = mysql_query($sql_education_insert);
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接