将每个数据插入不同的行PDO

时间:2014-12-15 02:35:51

标签: php mysql pdo

我有10个同名的输入,我试图在每行中插入它们 但我不知道我该怎么做,我在谷歌搜索,看看是否有任何答案,但失败了。

我希望我能清楚地解释。

我的代码如下:

TQ

我使用PHP循环输入

for($x = 0; $x <= 10; $x++){
    print '
    <tr>
                <td><input class="form-mod" type="text" name="sn[]"/></td>
                <td><input class="form-mod" type="text" name="ename[]"/></td>
                <td><input class="form-mod" type="text" name="hrs[]"/></td>
                <td><input class="form-mod" type="text" name="sales[]"/></td>
                <td><input class="form-mod" type="text" name="wages[]"/></td>
                <td ><input class="form-mod" type="text" name="inc[]"/></td>

            </tr>
    ';
}

PHP代码

    if(isset($_POST['submited'])){
    $rows = array( array($_POST['pc'],$_POST['wn'],$_POST['from'],$_POST['to'],$_POST['sn'],$_POST['ename'],$_POST['hrs'],$_POST['sales'],$_POST['wages'],$_POST['inc'] )


 );

    $args = array_fill(0, count($rows[0]), '?');

    $query = "INSERT INTO wages (program_code,week_no,`from`,`to`,serial_no,name,hrs,sales,wages,incentive) VALUES (".implode(',', $args).")";
    $stmt = $dbo->prepare($query);

    foreach ($rows as $row) 
    {
       $stmt->execute($row);
    } 


    if(!$stmt->rowCount() >= '1'){
        print "unsuccessfully insert";
    }else{
        print "successfully inserted";
    }
}

已更新

我修改了@Vitor Lima类型的代码。我删除了此代码“”implode(',', $row)“”并将其替换为?,?,?,?并且它有效。但是如果我在输入页面中只输入2行值,它仍然会将剩余的8行插入到数据库中,因此2行的值和8是空的。任何想法如何克服

if(isset($_POST['submited'])){
    for($x = 0; $x < 10; $x++){
        $row = array($_POST['pc'], $_POST['wn'], $_POST['from'], $_POST['to'],
                     $_POST['sn'][$x], $_POST['ename'][$x], $_POST['hrs'][$x],
                     $_POST['sales'][$x], $_POST['wages'][$x], $_POST['inc'][$x]);

        $query = "INSERT INTO wages (program_code, week_no,`from`,`to`,serial_no, 
               name,hrs,sales,wages,incentive) VALUES (?,?,?,?,?,?,?,?,?,?)";
        $stmt = $dbo->prepare($query);
        $stmt->execute($row);

        if(!$stmt->rowCount() >= '1'){
            print "unsuccessfully insert";
        }else{
            print "successfully inserted";
        }
    }
}

1 个答案:

答案 0 :(得分:0)

查找您的页面:输入的名称为[],这意味着它们将作为数组传递给服务器,因此,例如,$_POST['sn']将是一个包含10个位置的数组(您可以使用var_dump来证明......)

所以,在你的PHP脚本中,你应该创建一个类似的循环

if(isset($_POST['submited'])){
    for($x = 0; $x < 10; $x++){
        $row = array($_POST['pc'], $_POST['wn'], $_POST['from'], $_POST['to'],
                     $_POST['sn'][$x], $_POST['ename'][$x], $_POST['hrs'][$x],
                     $_POST['sales'][$x], $_POST['wages'][$x], $_POST['inc'][$x]);

        $query = "INSERT INTO(wages  program_code, week_no,`from`, `to`,serial_no, 
               name,hrs,sales,wages,incentive) VALUES (".implode(',', $row).")";
        $stmt = $dbo->prepare($query);
        $stmt->execute($row);

        if(!$stmt->rowCount() >= '1'){
            print "unsuccessfully insert";
        }else{
            print "successfully inserted";
        }
    }
}