代码之家  ›  专栏  ›  技术社区  ›  amit sutar

如何在PHP中为每个循环插入多行?

  •  1
  • amit sutar  · 技术社区  · 7 年前

    我正在用输入框上载多个文件。我想在mysql表中用不同的id将这些文件添加到多行中,但是现在它对我有效了。

    $paye_path=$obj->uploadMultiplePDF($_FILES['paye_inv'],$com_name); 
    

    以上代码工作正常 uploadMultiplePDF 函数正在为我工作。文件将进入我的文件夹。

    在此之后,我调用insert函数:

    $query  = $obj->insert_pay_slip_data($paye_path,$com_name);
    

    它对我不起作用。这显示了以下错误:

    Warning: Invalid argument supplied for foreach() in
    

    下面是我的插入查询,我在这里使用Frach循环:

    public function insert_pay_slip_data($data,$com_name)
                {
    
                    $con = $this->__construct();
                    $shareArray = array();
                    foreach($data as $shK=>$shVal)
                        {
                            $shareArray[$shK] = $shVal; 
                        } 
                     foreach ($shareArray as $keyshar => $valueshar) 
                     {  
                        $sql = "INSERT INTO `pay_slips`(`paye_id`, `trade_id`, `inv_pdf`, `created_date`, 
                        `created_by`) VALUES (LAST_INSERT_ID(), '".$com_name."','".$valueshar['paye_path']."',NOW(),'".$_SESSION['email']."')";
                        $execute = mysqli_query($con, $sql);
                        return $execute;
                    }
                }
    

    inv_pdf 列文件名应为。如果我上传5个文件 然后在表中创建5个不同的行。但它不起作用。 我可能在foreach循环中出错了。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Ajith    7 年前

    在将值传递给 前额 您需要确保值的类型是 数组

    if(is_array($value)){
       foreach($value as $key => $val){
          // Your code
       }
    }else{
       // Do nothing
    }
    

    要插入,可以使用此代码

    public function insert_pay_slip_data($data,$com_name){
       $con = $this->__construct();
       $shareArray = array();
       foreach($data as $key=>$value){
           $valueArray = explode(",",$value);
           foreach($valueArray as $index=>$path){
              $sql = "INSERT INTO `pay_slips`(`paye_id`, `trade_id`, `inv_pdf`, `created_date`, `created_by`) VALUES (LAST_INSERT_ID(), '".$com_name."','".$path."',NOW(),'".$_SESSION['email']."')";
              $response = mysqli_query($con, $sql);
              if(!$response){
                 // Insertion Failed
              }
           }
       } 
    }
    
        2
  •  2
  •   Charis    7 年前

    在foreach上循环$data之后,在行上做一些断点。你可以 var_dump 它看到了结构,看到了这条线 $shareArray[$shK] = $shVal; 我怀疑你的数据实际上是一个可以这样使用的数组 '".$valueshar['paye_path']."'

    通过在每一行上创建断点来确保数据结构的正确性,也许可以给出一些清晰的解释。也因为循环中的返回语句,如果需要处理1个以上的子数组,函数将提前停止。