首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用多个数组时,只插入第一行数据。

在使用多个数组时,只插入第一行数据。
EN

Stack Overflow用户
提问于 2018-02-03 13:50:32
回答 2查看 201关注 0票数 0

我在表单中使用了四个数组。当只使用两个数组时,它可以工作。但是超过两个数组(以下面的形式)只插入第一个学生的第一个记录。我尝试过使用multiple ,但它不能解决问题。我的PHP表单输出如下。

代码语言:javascript
复制
<form method="post" action="mark.php">
<table id="customers">
    <tr>
        <th>Name</th>
        <th colspan="2"><input type="text" name="subjectid[]" value="Social"></th>
        <th colspan="2"><input type="text" name="subjectid[]" value="Math"></th>
        <th colspan="2"><input type="text" name="subjectid[]" value="English"></th>
    </tr>
    <tr>
        <td><input type="text" name="stdname[]" value="John"></td>

        <td><input type="number" name="theory[]" value=""></td>
        <td><input type="number" name="practical[]" value=""></td>

        <td><input type="number" name="theory[]" value=""></td>
        <td><input type="number" name="practical[]" value=""></td>

        <td><input type="number" name="theory[]" value=""></td>
        <td><input type="number" name="practical[]" value=""></td>

    </tr>
        <td><input type="text" name="stdname[]" value="Rahul"></td>

        <td><input type="number" name="theory[]" value=""></td>
        <td><input type="number" name="practical[]" value=""></td>

        <td><input type="number" name="theory[]" value=""></td>
        <td><input type="number" name="practical[]" value=""></td>

        <td><input type="number" name="theory[]" value=""></td>
        <td><input type="number" name="practical[]" value=""></td>

    </tr>
</table>
    <input type="submit" name="submit1" value="submit"></input>
</form>

PHP代码

代码语言:javascript
复制
<?php }
if(isset($_POST['submit1'])){
    $subjectid = $_POST['subjectid'];
    $theory = $_POST['theory'];
    $practical = $_POST['practical'];
    $stdname = $_POST['stdname'];

    foreach ($theory AS $key => $item) {               
        $sql = "INSERT INTO mark(subjectid, theory, practical, stdname) VALUES (:subjectid, :theory, :practical, :stdname)";
        $query = $con->prepare($sql);
        $query->bindParam(':subjectid', $subjectid[$key]);
        $query->bindParam(':theory', $theory[$key]);
        $query->bindParam(':practical', $practical[$key]);
        $query->bindParam(':stdname', $stdname[$key]);
        $query->execute();
        echo "<script>alert('Mark is inserted')</script>";
        echo("<script>window.location = 'mark.php';</script>");
        } 
}
?>

插入以下输入时

它存储在数据库中,如

但它必须作为

EN

回答 2

Stack Overflow用户

发布于 2018-02-03 13:59:45

似乎prepare正在用最后一条语句进行缓存。你可能会写

代码语言:javascript
复制
$sql = "INSERT INTO mark(subjectid, theory, practical, stdname) VALUES (:subjectid, :theory, :practical, :stdname)";
$query = $con->prepare($sql);
foreach ($theory AS $key => $item) {               

而不是

代码语言:javascript
复制
foreach ($theory AS $key => $item) {               
    $sql = "INSERT INTO mark(subjectid, theory, practical, stdname) VALUES (:subjectid, :theory, :practical, :stdname)";
    $query = $con->prepare($sql);

其他可能的情况可能是违反任何约束,您可能对任何列都有唯一的键约束,并试图在循环中插入相同的值。您可以通过在代码中添加下面一行代码来验证。

代码语言:javascript
复制
echo $query->error;
票数 0
EN

Stack Overflow用户

发布于 2018-02-03 16:35:22

嵌套工程的使用

代码语言:javascript
复制
foreach ($stdname AS $key => $item){
    $query->bindParam(':stdname', $stdname[$key]);
        foreach ($theory AS $key => $item) {               
            $query->bindParam(':subjectid', $subjectid[$key]);
            $query->bindParam(':theory', $theory[$key]);
            $query->bindParam(':practical', $practical[$key]);
            $query->execute();
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48598096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档