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