2012-01-12 224 views
0

我的程序运行方式有问题。情况是我有一个表单要求日期,然后点击按钮提交时,将显示具有相同日期的记录。之后,有一个按钮提取,如果我点击它,结果将导出到CSV文件。导出查询结果

这是我的代码:

<html> 
     <h1> TC/GC Per Sales Frequency Bracket </h1> 
      <body> 
      <?php 
       $df = $_POST['df']; 
       $dt = $_POST['dt']; 
       $db = 'mds_reports'; 

       if($connect = mysql_connect("172.16.8.32", "mds_reports", "password")) 
       $connect = mysql_select_db($db); 
        else die ("Unable to connect".mysql_error()); 

       echo '<form action = "TCFrequencyBracket.php" method = "post">'; 
       echo '<table>'; 

       echo '<tr><td>Date From :</td><td><input name = "df" type = "text" /></td></tr>'; 
       echo '<tr><td>Date To :</td><td><input name = "dt" type = "text" /></td></tr>'; 
       echo '<tr><td><input name = "submit" type = "submit" id = "submit" value = "submit"/></td></tr>'; 
       echo '</table>'; 
       echo '</div>'; 
       echo '</div>'; 
       echo '</form>'; 

       if (isset($_POST['submit'])) 
       { 
        echo '<table border = "1" cellspacing = "1">'; 
        echo '<th>Restaurant Code</th>'; 
        echo '<th>Restaurant Name</th>'; 
        echo '<th>100 & BELOW</th>'; 
        echo '<th>101-200</th>'; 
        echo '<th>201-300</th>'; 
        echo '<th>301-400</th>'; 
        echo '<th>401-500</th>'; 
        echo '<th>501-600</th>'; 
        echo '<th>601-700</th>'; 
        echo '<th>701-800</th>'; 
        echo '<th>801-900</th>'; 
        echo '<th>901-1000</th>'; 
        echo '<th>1001 & ABOVE</th>'; 
        echo '<th>TOTAL TC</th>'; 

        $sql = "SELECT restaurant_master.code, restaurant_master.name, 

           COUNT(CASE WHEN mds_orders.GrossTotal < '100' 
            THEN 1 END), 

           COUNT(CASE WHEN mds_orders.GrossTotal >= '100' AND mds_orders.GrossTotal < '200' 
            THEN 1 END), 

           COUNT(CASE WHEN mds_orders.GrossTotal >= '200' AND mds_orders.GrossTotal < '300' 
            THEN 1 END), 

           COUNT(CASE WHEN mds_orders.GrossTotal >= '300' AND mds_orders.GrossTotal < '400' 
            THEN 1 END), 

           COUNT(CASE WHEN mds_orders.GrossTotal >= '400' AND mds_orders.GrossTotal < '500' 
            THEN 1 END), 

           COUNT(CASE WHEN mds_orders.GrossTotal >= '500' AND mds_orders.GrossTotal < '600' 
            THEN 1 END), 

           COUNT(CASE WHEN mds_orders.GrossTotal >= '600' AND mds_orders.GrossTotal < '700' 
            THEN 1 END), 

           COUNT(CASE WHEN mds_orders.GrossTotal >= '700' AND mds_orders.GrossTotal < '800' 
            THEN 1 END), 

           COUNT(CASE WHEN mds_orders.GrossTotal >= '800' AND mds_orders.GrossTotal < '900' 
            THEN 1 END), 

           COUNT(CASE WHEN mds_orders.GrossTotal >= '900' AND mds_orders.GrossTotal < '1000' 
            THEN 1 END), 

           COUNT(CASE WHEN mds_orders.GrossTotal >= '1000' 
            THEN 1 END), 

           COUNT(mds_orders.GrossTotal) 

           FROM mds_orders 
            JOIN restaurant_master 
             ON mds_orders.RestaurantID = restaurant_master.PKID 

           WHERE mds_orders.OrderDate BETWEEN '$df' AND '$dt' 
             AND mds_orders.StatusFKID = 2 

           GROUP BY restaurant_master.code, restaurant_master.name"; 
        // echo $sql; 

        echo 'Date select from ' . $df; 
        echo ' to ' . $dt; 
        echo '<br /><br />'; 

        $result = mysql_query($sql) 
           or die("SELECT Error: ".mysql_error()); 
        $num_rows = mysql_num_rows($result); 
        print "There are $num_rows records.<br>"; 
        echo '<br />'; 

        while ($get_info = mysql_fetch_row($result)){ 
        print "<tr>\n"; 
        foreach ($get_info as $fields) 
        print "\t<td>$fields</td>\n"; 
        print "</tr>\n"; 
        } 
        echo '</table>'; 

       echo '<form>'; 
       echo '<div>'; 
       echo '</div>'; 
       echo '<table>'; 
       echo '<br><input name = "extract" type = "submit" id = "extract" value = "extract"/></td><td></br></br>'; 
       echo '<tr><td></table></td></td>'; 
       echo '</form>'; 

        $out = ''; 

        if (isset($_POST['extract'])) { 
        $out .= $_POST['extract']; 
        } 

        $filename = $file."_".date("Y-m-d_H-i",time()); 

        print stripslashes($out); 

        exit; 


       } 
      ?> 
     </body> 
</html>` 

现在的错误是,当我尝试打开即使主页面没有显示已显示一个提示程序。而且文件的内容是代码而不是结果。

+2

我无法看到如何显示下载提示。您不会强制下载,您不会输出任何非HTML mime类型,而只是输出html,句点。 – 2012-01-12 01:41:20

+1

除了代码没有做你想要的/期望的,这个代码有一些设计和实现问题(例如使用过时的mysql扩展,[SQL注入](http://unixwiz.net/techtips/sql-injection .html)漏洞,在输出HTML时使用['die'](http://www.phpfreaks.com/blog/or-die-must-die),混合数据访问和输出)。考虑发布在[codereview.SE](http://codereview.stackexchange.com/)上,尽管你真的需要阅读一个好的[PHP开发指南](http://stackoverflow.com/questions/2119083/) 。 – outis 2012-01-12 01:47:16

回答

1

我真的不明白的问题,但有几个问题,我看到:

  • 我没有看到任何书面文件。
  • 您的$out变量获取您的按钮的值,$_POST['extract'],总是extract,仅此而已。
0

您必须检查设置为启用PHP的Web服务器。将服务器设置为运行PHP时,获取页面本身的一种方式是内容。然后服务器确实会提示下载页面而不是运行/执行它。

在解决您的代码问题之前,请确保您的Web服务器可以正确地提供PHP脚本或文件。

接下来看看你如何存储给定的代码包含文件,并检查其扩展名是否.php。

然后检查您是如何将该页面包含在主页面中的,或者是如何访问该页面的。