php csv生成器未输出文件,多个选择未传递值

php csv生成器未输出文件,多个选择未传递值,php,sql-server-2008,csv,Php,Sql Server 2008,Csv,我正在构建一个CSV生成器,它从多个选择框中选择一个区域,并循环通过所选区域,根据数据库信息为每个项目弹出一个单独的CSV,或者至少应该是这样,它不断弹出一个带有我的头include的PHP文件,然后是一个关于未定义的$filename变量的错误。对于我选择的每个项目,它都不会从多重选择中传递Area_ID。另一个奇怪之处(至少就我所见,可能是正常的,但对我来说似乎很奇怪)是,如果CSVGen函数包含在单独的文件中,则它需要在调用它的页面包含my DB connect include的函数中包含

我正在构建一个CSV生成器,它从多个选择框中选择一个区域,并循环通过所选区域,根据数据库信息为每个项目弹出一个单独的CSV,或者至少应该是这样,它不断弹出一个带有我的头include的PHP文件,然后是一个关于未定义的$filename变量的错误。对于我选择的每个项目,它都不会从多重选择中传递Area_ID。另一个奇怪之处(至少就我所见,可能是正常的,但对我来说似乎很奇怪)是,如果CSVGen函数包含在单独的文件中,则它需要在调用它的页面包含my DB connect include的函数中包含my database connect字符串,如果不使用我已经打开的会话而打开多达20多个新会话,似乎是不切实际的

以下是主页:

<?php
$page_title="CSV Generator";
include("\Include\header.inc");
include("\Include\connect-db.php");
include("\Include\CSVGen.php");

$error="";

$start_date=date("Y-m-d");
$end_date=date("Y-m-d", strtotime("+7 days"));


if(isset($_GET['reg'])) 
{
    $reg=$_GET['reg'];
}

else{
    $reg='1';
}


if($start_date>$end_date){
    $error = 'ERROR: End Date cannot be before Start Date!';
}

if ($error != '')

{

echo '<div class="container">
  <div class="row">
  <div class="alert alert-danger col-md-12">'.$error.'
  </div>
  </div>
  </div>';

}
        $sqlareas="SELECT Area_Name, Region_ID FROM Listings_Areas WHERE region = '$reg'";
        $arearesult= sqlsrv_query($conn, $sqlareas, array(), array("Scrollable"=>"buffered"));
        $areacount = sqlsrv_num_rows($arearesult);


function renderForm($arearesult, $areacount, $start_date, $end_date){
?>

<html>

<head>

</head>

<body>

<div class="container">

<div class="row">
    <form id="form1" name="form1" method="post">
    <div class="col-md-2 col-md-offset-1">

        <p><select name="arealist[]" size="<?php echo $areacount ;?>" multiple="multiple" tabindex="1">

        <?php

        while($areas=sqlsrv_fetch_array($arearesult)){
        echo'<option value="' . $areas['Area_ID'] . '">' . $areas['Area_Name'] . '</option>';
        }
        ?>

        </select>
    </div>

    <div class="col-md-3">   
        <strong>Start Date: </strong> <input type="date" name="start" value="<?php echo $start_date; ?>" />
    </div>
    <div class="col-md-3">  
        <strong> End Date: </strong> <input type="date" name="end" value="<?php echo $end_date; ?>" />
    </div>
    <div class="col-md-2">  
        <input type="submit" name="submit" value="Get CSVs">
    </div>
    </form>

  </div>

</div>

<div class="row">
<?php
}

if (isset($_POST['submit'])){

$start_date=$_POST['start'];
$end_date=$_POST['end'];
$areasselect=$_POST['arealist'];

foreach($areasselect as $selected){
$area_id = $selected;

//echo $area_id . $start . $end;

CSVGEN($area_id, $start_date, $end_date);

}
}

else {renderForm($arearesult, $areacount, $start, $end);}

?>
</div>
应该是:

$sqlareas="SELECT Area_Name, Region_ID, Area_ID FROM Listings_Areas WHERE region = '$reg'";

现在我唯一的问题是,它吐出一个单一的CSV(正确命名为第一个选定的区域)和我的头文件,然后是所有选定区域的数据,而不是一个单独的文件,每个没有头文件,我不明白为什么它会打印。我真的不需要发送顶部带有导航条形码的CSV…

您所做的就是所谓的“条件声明”

while循环中有一个if语句,其中创建/分配了变量$filename(!)。当循环启动且if条件未满足时,$filename未定义,因为从未执行if案例代码

一旦定义,它将保留其最后一次赋值,直到再次满足if条件。这基本上是一个你已经编程的分组休息,不管是有意还是无意,但你错过了一个重要的事实:你的数据必须有序,否则分组休息将无法正常工作

您应该开始调试代码以了解其工作流程。通过首先初始化变量来删除条件声明


而且你应该重新考虑你的编码风格,缩进非常难以阅读,特别是因为你混合了它…

首先在主页上设置错误报告(E\u ALL);ini设置(“显示错误”,1);检查您测试的错误$AreaSelect是否在第一个文件中包含任何内容?另外,您是否尝试过在foreach循环中输出每个区域id,以确保在调用csv生成器之前捕获数据?我已经测试了$areasselect是否有任何内容,因此我删除了循环和var_dump中的回声,据我所知,它包含空值,而不是应该包含的值,尽管我遵循了我在其他地方找到的将多重选择写入数组的示例。您是否尝试过在POST值本身中循环,而不是首先将其分配给变量:foreach($\u POST['arealist']))你有没有浏览过开发者的控制台,检查你选择的ID是否确实被发送到了发布的数据中?代码本身的缩进要好得多,在这里的复制/粘贴过程中出错了,我在发布之后才意识到ctrl-k,但你是对的,我的编码风格不是特别好,这是10多年前我第一次在一门完全用VB编写的课程之外编写代码,也是我唯一一次使用PHP、HTML或SQL。至于条件声明,如果向CSV生成器传递了正确的变量(导致中断的Area_ID未传递),如果我初始化变量,它就可以工作,因为它不能根据每次运行时更改的Area来命名文件。
$sqlareas="SELECT Area_Name, Region_ID FROM Listings_Areas WHERE region = '$reg'";
$sqlareas="SELECT Area_Name, Region_ID, Area_ID FROM Listings_Areas WHERE region = '$reg'";