2016-08-03 11 views
0

私は新しい開発者であり、最近私の会社のための簡単なPHP mySQL DBMSのコーディングを終了しました。今度はを稼働させてにして、Webで見つけられるすべてのセキュリティベストプラクティス(例:正規表現、Webディレクトリ外のmysqli_connect.php対スクリプト内の接続文字列、など)私はそれをオンラインにする前に。私はこのコードの外でいくつかの個人情報を編集し、それを職業と置き換えましたが、括弧の中に入れました。私はそれを可能な限りオンラインで掲示したままにしたくありません。mysqli_connect.phpを参照するとPHPExcel Downloaderが中断されます

通常、私はこのように、mysqli_connect.phpするだけで参照して私のデータベースで動作することができる午前:私のDBMSの機能の

require_once ('..\mysqli_connect.php');

ワンボタン「をExcelにダウンロード」です。それは完璧に、が動作しますが、私はファイルの中に直接接続しているときだけです。私は上記の例で行うように私の接続を書くしようとすると、Excelファイルには、次のエラーメッセージが表示されます。私はExcelDownload.php内部で直接接続を書くとき

Excel cannot open the file 'xyz.xlsx' because the file format or extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file.

を、Excelファイルのダウンロードが正しく。接続文字列は次のようになります。

$dbc = @mysqli_connect('[myhost]', '[myusername]', '[mypassword]', '[mydatabase]')

だから、もう一度、基本的には、間接的な接続を参照することは、私のExcelはバグのうちにダウンロードして、私はなぜ知らない原因となります。私は直接接続を呼び出す場合は正常に動作します。どんな助けでも大歓迎です。

おかげで再び、Jibreel

ここ

がExcelDownload.phpを経由して、次のとおりです。

<?php 
session_start(); 

//VERIFY LOGGED IN: Redirects user back to home page if they are not logged in or if they don't have the right privileges. Should be atop every page. 
if(!isset($_SESSION['id'])) 
{header("Location: login.php");} 

//CALLS PHPEXCEL: Creates connection to PHPExcel class library, and creates new instance of PHPExcel. 
//    From there it sets the attributes for some of PHPExcel's methods, to explain how we want the spreadsheet to be designed. 

require_once 'Classes/PHPExcel.php'; 
$objPHPExcel = new PHPExcel(); 
$objPHPExcel->getActiveSheet()->setTitle('OpenOrders'); 
$objPHPExcel->getActiveSheet()->setCellValue('A1', '[my company]'); 

//CONFIRMATION: If Export to Excel button is pushed, then do this 
if(isset($_POST["export_Excel"])) 
{ 


    //DANGER!! UNSECURED DATABASE CONNECTION. BAD PRACTICE. CHANGE IN NEXT VERSION! 
    //GENERATE QUERY: Connects to database -- Once connected, runs select * query and saves the outcome in $result 
    $dbc = @mysqli_connect('[myhost]', '[myusername]', '[mypassword]', '[mydb]') 
    OR die ('Could not connect to MySQL ' . mysqli_connect_error()); 
    $sql = "[myquery]"; 
    $result = mysqli_query($dbc, $sql); 

    //SET HEADING VALUE: Sets the values for the top row of the spreadsheet, which will be the headings. 
    $objPHPExcel->getActiveSheet()->setCellValue('C3', 'OOPONO'); 
    $objPHPExcel->getActiveSheet()->setCellValue('D3', 'Order Status'); 
    $objPHPExcel->getActiveSheet()->setCellValue('E3', 'Order Comments'); 




    //ITERATOR: If there are values inside of $result, starting at row 4, insert values for OOPONO, order status, and comments until $results is totally intereated. 
    if(mysqli_num_rows($result) > 0) 
     { 

      $rownumber = 4; 

      while ($row = mysqli_fetch_array($result)) 
      { 
       $row1 = 'C'.$rownumber; 
        $objPHPExcel->getActiveSheet()->setCellValue($row1, $row["OOPONO"]); 
       $row1 = 'D'.$rownumber; 
        $objPHPExcel->getActiveSheet()->setCellValue($row1, $row["Order_Status"]); 
       $row1 = 'E'.$rownumber; 
        $objPHPExcel->getActiveSheet()->setCellValue($row1, $row["Comments"]); 


       $rownumber = $rownumber + 1; 
      }      
     } 
} 

//DOWNLOAD SETUP: Defines the different attributes of the Excel doc ranging from filename to extension. It also does the finishing touches of setting up the download. 
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
header('Content-Disposition: attachment;filename="OpenOrders.xlsx"'); 
header('Cache-Control: max-age=0'); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save('php://output'); 

?> 

答えて

1

だから、もう一度、基本的には、間接的な接続を参照すると、私のExcelが出てバグにダウンロードする原因となり、Iドン理由は分かりません。私は直接接続を呼び出す場合は正常に動作します。

いいえ! referencing the connection indirectly causesエラーが発生し、エラーメッセージが表示され、ディスプレイに送信されます。エラーメッセージがExcelデータストリームコンテンツの一部になるようにExcel出力もディスプレイに送信され、エラーメッセージがファイルに挿入され、ファイルが破損します。

テキストエディタで開き、ファイル、およびあなたが

+0

を取得している私は、ファイルを開いて、完全にランダムな文字の唯一の束があった実際のエラーメッセージが表示されるはずです。拡張子を.txtに変更しようとしましたが、同じ結果が得られました。結果は長すぎてここに投稿できません。ここからどこに行くのか教えてくれますか? ありがとう:-) –

+0

私はあなたに簡単にお手伝いできません.....私はあなたに問題点を教えてきましたが、あなたのログ、ファイルなどにアクセスできません実際の行に –

+0

私はベストを尽くして、それを自分で解決しようとします。とにかくありがとうございます:) –

関連する問題