鍍金池/ 問答/PHP/ POST 過來的數(shù)據(jù) 為什么會串行

POST 過來的數(shù)據(jù) 為什么會串行

循環(huán)有問題 怎么循環(huán)第二次就這么多行

POST 過來的數(shù)據(jù) 為什么會串行,為什么會讀取上一行的數(shù)據(jù) 我是通過讀取 Excel 表格獲取的數(shù)據(jù)

我只想讀取 Excel 的每行數(shù)據(jù) 不要串行 求辦法

<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_NOTICE);

define('ROOT',dirname(__FILE__).'/');

if ((($_FILES["file"]["type"] == "application/vnd.ms-excel")||($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"))&& ($_FILES["file"]["size"] < 20000))
{
    if ($_FILES["file"]["error"] > 0)
    {
        echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
    else
    {
        if (!empty($_FILES)) {
            $fileInfo = $_FILES['file'];
            //echo '<pre>';
            //print_r($fileInfo);
            //echo '</pre>';
            $fileName = $fileInfo['name'];
            $fileType = $fileInfo['type'];
            $fileTmpName = $fileInfo['tmp_name'];
            $fileError = $fileInfo['error'];
            $fileSize = $fileInfo['size'];

            if ($fileError == UPLOAD_ERR_OK) {
                if (move_uploaded_file($fileTmpName,iconv('utf-8','gb2312','./uploads/'.$fileName))) {
                    $fileDir = dirname(__FILE__);
                    echo '上傳成功'."\n<br/>\n<br/>";

                    //doExcel(iconv('utf-8','gb2312','./uploads/'.$fileName));
                    $file_types = explode(".", $_FILES ['file'] ['name']);
                    $file_type = $file_types [count($file_types) - 1];
                    $ExcelToArrary = new ExcelToArrary();//實例化
                    $res = $ExcelToArrary->read(iconv('utf-8','gb2312','./uploads/'.$fileName), "UTF-8", $file_type);
                    
                    //print_r($res);
                    doData($res);

                } else {
                    
                    echo '上傳失敗';
                }
            } else {
                switch ($fileError) {
                    case 1:
                        echo '上傳的文件超過php.ini中的upload.max.filesize的限制';
                        break;
                    case 2:
                        echo '文件超過表單的MAX_FILE_SIZE的限制';
                        break;
                    case 3:
                        echo '部分表單被上傳';
                        break;
                    case 4:
                        echo '未發(fā)現(xiàn)上傳文件';
                        break;
                    case 6:
                        echo '未發(fā)現(xiàn)臨時文件';
                        break;
                    case 7:
                        echo '文件寫入失敗';
                        break;
                    case 8:
                        echo 'php文件上傳拓展沒有打開';
                        break;
                    default:
                        echo '未知錯誤,請聯(lián)系管理員,happy@13.com';
                        break;
                }
            }
        } else {
            echo '未知錯誤';
        }
    }
}
else
{
    echo $_FILES["file"]["type"];//application/vnd.ms-excel
    echo "Invalid file";
}

function doData($data) {
    //print_R($data);
    //print_R($data[1]);
    $email = [];
    $bodyh = "";
    foreach ($data as $key => $value)
    {
        //print_r($key);//行號
        //print_r($value);
        $len = count($value);
        if($key==1){
            $title = $value;
            //echo $value[0] . $value[1]. $value[2]."\n<br/>";
        }

        if($key>1){
            //echo $value[0] . $value[1]. $value[2]."\n<br/>";
            $bodyys = "";
            for($i=0;$i<$len;$i++)
            {
                $telTo = "";
                $mailTo = "";

                //偽代碼   自已寫
                //if($value[$i]=="手機號特征")
                //{
                //    $telTo = "18600806920";
                //}

                //if($value[$i]=="郵箱特征")
                //{
                //    $mailTo = "xx@qq.com";
                //}
                //偽代碼   自已寫

                
                $bodyys =$bodyys.$title[$i].":".$value[$i];
                
             
                echo "<table style='border:1px solid red'><tr><td>".$title[$i].":".$value[$i]."</tr></td></table>"; //######### 方便看效果
                 
            }

            
            
            $bodyh=$bodyh.$bodyys;
            
            $body[]=$bodyh;
            
            //var_dump($bodyh); 
            $email[] = $data[$key][2].'@qq.com';
            $bodyh = preg_split("^[0-9]*$", $bodyh);
            echo "\n<br/>";
            //var_dump($email);
            

            //以下發(fā)郵件或發(fā)短信  
            //doMail("工資條",$body,"郵箱自已正則匹配出來$mailTo"); //##############
            //以上發(fā)郵件或發(fā)短信
        }
    }
    echo '<form action="email.php" method="POST">';
    foreach ($email as $keyy => $value) {
        echo '<input type="hidden" name="body[]" value="' . $body[$keyy] . '">';
        echo '<input type="hidden" name="email[]" value="' . $value . '">';
        
    }
    echo '<input type="submit" value="發(fā)送郵件">';
    echo '</form>';


}




class ExcelToArrary
{
    public function __construct() {
        require_once 'PHPExcel-1.8/Classes/PHPExcel.php';
        require_once 'PHPExcel-1.8/Classes/PHPExcel/IOFactory.php';
    }
    public function read($filename,$encode,$file_type)
    {
        if (strtolower($file_type) == 'xls')//判斷excel表類型為2003還是2007
        {
            require_once 'PHPExcel-1.8/Classes/PHPExcel/Reader/Excel5.php';
            $objReader = \PHPExcel_IOFactory::createReader('Excel5');
        } elseif (strtolower($file_type) == 'xlsx') {
            require_once 'PHPExcel-1.8/Classes/PHPExcel/Reader/Excel2007.php';
            $objReader = \PHPExcel_IOFactory::createReader('Excel2007');
        }
        $objReader->setReadDataOnly(true);
        $objPHPExcel = $objReader->load($filename);
        $objWorksheet = $objPHPExcel->getActiveSheet();
        $highestRow = $objWorksheet->getHighestRow();
        $highestColumn = $objWorksheet->getHighestColumn();
        $highestColumnIndex = \PHPExcel_Cell::columnIndexFromString($highestColumn);
        $excelData = array();
        for ($row = 1; $row <= $highestRow; $row++) {
            for ($col = 0; $col < $highestColumnIndex; $col++) {
                $excelData[$row][] = (string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
            }
        }
        return $excelData;
    }
}
?>

圖片描述

圖片描述

圖片描述

回答
編輯回答
青裙

有[]的文本框名,說明是個數(shù)組就合并了唄。

2018年2月28日 03:13
編輯回答
礙你眼

試試直接用數(shù)組形式,不要留空。

比如body[1]、body[2],而不是body[]

還有,以后貼代碼,不要截圖,截圖都糊了。

三個以上反撇號(```)單獨一行放在代碼塊前后就是這種效果。
2018年5月4日 18:58
編輯回答
怪痞

還是貼個完整的代碼比較好,截圖只能看局部。如果上面也是一個foreach循環(huán),可以將$email與$body存到一個數(shù)組里同時帶上$key,像這樣

$body[$key]['body']=$bodyh;
$body[$key]['email']=$data[$key][2].'qq.com';

那下面的循環(huán)可以這樣:

foreach($body as $key=>$value){
    echo ...$value['email'];//省略的代碼同上,所以還是貼代碼比較好,可以復(fù)制
    echo ...$value['body'];
}
2017年8月26日 09:08