使用PHP“插入多个”同时插入所有4行

时间:2015-11-04 04:44:15

标签: php mysql forms insert sql-insert

我正在尝试插入4个相同的表单。但使用PHP的mysql具有不同的值。

当我提交数据时,数据库仅获取最后一个表单中的值并将其插入4次。我试图从提交的所有4中获取值。

int *const

5 个答案:

答案 0 :(得分:1)

输入控件的名称,使它们作为数组发布

<input type="text" name="teamname[G1]">
<input type="text" name="teamname[G2]">

这就是为什么当您使用$varTname = $_POST['teamname']; $varTname时,数组teamname的4个值中的每一个都设置为$varTname['G#'],其中#匹配您为此设置的数字输入字段组。

然后使用for循环来获取数据并执行查询,类似于下面的内容。当你在它时,你也可以修复你的SQL注入漏洞。您可能还希望对数据进行更多卫生以确保

$varTname = $_POST['teamname'];
$varCity = $_POST['city'];
$varBplayer = $_POST['bestplayer'];
$varYearformed = $_POST['yearformed'];
$varWebsite = $_POST['website'];

$stmt = $mysqli->prepare('INSERT INTO Teams (teamname, city, bestplayer, yearformed, website) VALUES (?,?,?,?,?,?)');
$varTname1Bind = "";
$varTnameBind = "";
$varCityBind = "";
$varBplayerBind = "";
$varWebsiteBind = "";

 // assuming they are all strings, adjust where needed
 $stmt->bind_param('sssssss',
    $varTname1Bind,
    $varTnameBind,
    $varCityBind,
    $varBplayerBind,
    $varYearformedBind,
    $varWebsiteBind);

for($i = 1; i < 5; $i++)
{
    $varTname1Bind = $varTname['G'.$i];
    $varTnameBind = $varTname['G'.$i];
    $varCityBind = $varCity['G'.$i];
    $varBplayerBind = $varBplayer['G'.$i];
    $varYearformedBind = $varYearformed['G'.$i];
    $varWebsiteBind = $varWebsite['G'.$i];

    $stmt->execute();
}

可以节省您需要执行的代码

答案 1 :(得分:1)

您可以将input name转换为数组,然后在[]的PHP循环中添加$_POST[]并构建您的$sql通过连接值,直到完成所有值的循环,并将INSERT作为多个值。

<强> HTML:

<label>Team Name:</label> <input type="text" name="teamname[]"><br>
<label>City:</label> <input type="text" name="city[]"><br>
<label>Best Player:</label> <input type="text" name="bestplayer[]"><br>
<label>Year Formed:</label> <input type="text" name="yearformed[]"><br>
<label>Website:</label> <input type="text" name="website[]"><br>

<强> PHP:

<?php
    $sql = "INSERT INTO Teams (teamname, city, bestplayer, yearformed, website) VALUES ";
        for($i = 0 ; $i < count($_POST['teamname']) ; $i++){
            $varTname = $_POST['teamname'][$i];
            $varCity = $_POST['city'][$i];
            $varBplayer = $_POST['bestplayer'][$i];
            $varYearformed = $_POST['yearformed'][$i];
            $varWebsite = $_POST['website'][$i];
            $sql .= "(" .$varTname. " , " .$varCity. " , " .$varBplayer. " , " .$varYearformed. " , " .$varWebsite. "),";   
        }
        $sql = rtrim($sql, ','); // omit the last comma

    // Then Excute your query

?>

这样您就不需要为它们提供唯一的名称name="test1"name="test2"等等,要查看它的实际效果,请检查结果页底部的PHP Fiddle,已经设置了输入字段的值,只需点击提交,然后转到结果页面的底部,查看撰写的INSERT语句。

注意以上SQL只是一个关于如何构建它的演示,不要在没有验证和消毒的情况下使用它。也停止查询这种方式而是使用使用PDOMySQLi准备语句以避免SQL注入。

因此,对于MySQLi准备好的语句,程序风格 - 我使用PDO - 正如您在PHP Fiddle 2中看到的那样,代码是:

<?php

    // you validation goes here
    if (isset($_POST['insert'])) {

        insertTable();
    } else {
        $conn->close(); 
    }

    function insertTable() {
        // enter your credentials below and uncomment it to connect
        //$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');
        $sql = "INSERT INTO Teams (teamname, city, bestplayer, yearformed, website) VALUES";
        $s = '';
        $bind = '';
        for($i = 0 ; $i < count($_POST['teamname']) ; $i++){
            $sql .= " (?, ?, ?, ?, ?)"; 
            $s .= 's';
            $varTname = $_POST['teamname'][$i];
            $varCity = $_POST['city'][$i];
            $varBplayer = $_POST['bestplayer'][$i];
            $varYearformed = $_POST['yearformed'][$i];
            $varWebsite = $_POST['website'][$i];
            $bind .= " , " . $varTname. " , " .$varCity. " , " .$varBplayer. " , " .$varYearformed. " , " .$varWebsite;
        }

        $sql = rtrim($sql, ','); // omit the last comma
        $s = "'" .$s. "'";

        $stmt = mysqli_prepare($link, $sql);
        mysqli_stmt_bind_param($stmt, $s , $bind);
        mysqli_stmt_execute($stmt);
    }
?>

答案 2 :(得分:0)

使用其他名称,例如teamname1teamname2teamname3teamname4

<input type="text" name="teamname1">
<input type="text" name="teamname2">
<input type="text" name="teamname3">
<input type="text" name="teamname4">

获取值: -

$varTname1 = $_POST['teamname1'];
$varTname2 = $_POST['teamname2'];
$varTname3 = $_POST['teamname3'];
$varTname4 = $_POST['teamname4'];

对于插入值: - 。

$sql = "INSERT INTO Teams (teamname)
VALUES ('$varTname1'),
       ('$varTname2'),
       ('$varTname3'),
       ('$varTname4')

或者你可以试试这个: -

<input type="text" name="teamname[]">

获得如下价值: -

$_POST['teamname'][0]

答案 3 :(得分:0)

通常,这是通过创建表单控制器数组来完成的。

<input type="text" name="teamname[]"> 
<input type="text" name="city[]">

然后你可以在帖子请求中获得一个数组。

希望这有帮助!

答案 4 :(得分:0)

尝试这种方法

   $sql = "INSERT INTO Teams (teamname, city, bestplayer,yearformed,website)
   VALUES ('$varTname', '$varCity', '$varBplayer', '$varYearformed', '$varWebsite'),
   ";
   $sql.= query same as abov
   $sql.= query same as abov
   $sql.= query same as abov
   if (!$mysqli->multi_query($sql)) {
    echo "Multi query failed: (" . $mysqli->errno . ") " . $mysqli->error;
   }

在第一次查询后注意.点。
我认为你也应该使用自动增量键。这应该可行。

相关问题