如何在php中使用带有2个数组变量的foreach

时间:2015-06-29 21:58:11

标签: php mysql arrays

我有这样的代码

    <?php
        include "assets/config/connect.php";

            foreach( $_POST['nim'] as $nim ){
                $kode_mk= $_POST['kode_mk'] ;
                $nilai= $_POST['nilai'] ;
                $tahun_akademik= $_POST['tahun_akademik'] ;
                $sql = " INSERT INTO nilai (nim, kode_mk, nilai, tahun_akademik, id_nilai) VALUES ('$nim', '$kode_mk', '$nilai', '$tahun_akademik', NULL) ";        
                if (!mysql_query($sql)){
                    die('Error: ' . mysql_error());
                }                   
            }
?>

但结果与我的预期不一样

这是结果enter image description here

请帮帮我

3 个答案:

答案 0 :(得分:0)

错误

因此假设kode_mk, nilai, tahun_akademik$_POST中的所有数组,您试图将数组的对象作为字符串插入。首先使用类似implode()的函数将数组转换为字符串。

解决方案:使用PHP Implode()

$array = array('hi', 'my', 'name', 'is');
$string = implode(',', $array); // string = 'hi,my,name,is'

Implode的工作原理如下implode(glue, array),胶水是一个字符串,插入数组的每个元素之间,以字符串形式分隔它们。您可以使用explode(delimiter, string)将字符串反转为数组!

使用代码的示例

    <?php
    include "assets/config/connect.php";

        foreach( $_POST['nim'] as $nim ){
            $kode_mk= implode(', ', $_POST['kode_mk']);
            $nilai= implode(', ', $_POST['nilai']);
            $tahun_akademik= implode(', ', $_POST['tahun_akademik']);

            $sql = " INSERT INTO nilai (nim, kode_mk, nilai, tahun_akademik, id_nilai) VALUES ('$nim', '$kode_mk', '$nilai', '$tahun_akademik', NULL) ";        
            if (!mysql_query($sql)){
                die('Error: ' . mysql_error());
            }                   
        }
?>

说明:

  • 出于以下安全原因尝试使用mysqli而不是mysql扩展名:@messy
  • 看起来你正在循环$_POST['nim'],但是为数据库的列提取相同的$ _POST值。
  • 我们确实可以使用$_POST变量
  • 的格式和语法

答案 1 :(得分:0)

$kode_mk = $_POST['kode_mk'];
$nilai = $_POST['nilai'];
$tahun_akademik = $_POST['tahun_akademik'];

所有变量都是数组,而不是你期望的字符串,你应该

var_dump($_POST);

查看POST数组的整个结构

答案 2 :(得分:0)

您必须向我们展示您的输入数据。您可以使用print_r()var_dump()

执行此操作
print_r($_POST);

从它的外观来看,你的表单输入是数组(复选框?),你需要将它们一起拉成一个字符串或单独使用它们。

此外,如果其值没有变化,则没有理由继续在循环内收集POST值。将它们拉出环路。

最后,不推荐使用mysql_扩展,并且非常不鼓励 - 您不应该使用它来编写新代码。在进行任何插入之前,您还需要验证和清理数据。最简单的方法是参数化查询。