Référencement sur mysqli_connect.php Breaks PHPExcel Downloader

Je suis un nouveau développeur et j'ai récemment terminé de coder un simple PHP mySQL DBMS pour mon entreprise. Maintenant que j'ai fini de le faire fonctionner , je veux le sécuriser, en mettant en œuvre toutes les meilleures pratiques de security que je peux find sur le Web (Ex: Expressions régulières, ayant mysqli_connect.php en dehors du directory Web vs strings de connection à l'intérieur du script, etc. .) avant de le prendre en ligne. J'ai édité des informations personnelles en dehors de ce code et l'ai remplacé par son travail, mais à l'intérieur de parenthèses. Je ne veux pas le laisser en ligne si possible.

Normalement, je peux travailler avec ma database avec juste une reference à mysqli_connect.php, comme ceci:

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

L'une des fonctions de mon SGBD est un button «download pour excel». Il fonctionne parfaitement, mais seulement lorsque j'ai la connection directement à l'intérieur du file. Si j'essaie d'écrire ma connection comme je le fais dans l'exemple ci-dessus, le file Excel affiche le message d'erreur suivant:

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.

Lorsque j'écris la connection directement dans ExcelDownload.php, le file Excel est correctement téléchargé. La string de connection ressemble à ceci:

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

Donc, encore une fois, le referencement de la connection provoque indirectement que mon téléchargement de Excel s'efface et je ne sais pas pourquoi. Cela fonctionne bien si je convoque directement la connection. Toute aide serait grandement appréciée.

Merci encore, Jibreel

Voici ExcelDownload.php, d'ailleurs:

 <?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 atsortingbutes 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 atsortingbutes 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'); ?> 

Donc, encore une fois, le referencement de la connection provoque indirectement que mon téléchargement de Excel s'efface et je ne sais pas pourquoi. Cela fonctionne bien si je convoque directement la connection.

Non! referencing the connection indirectly causes une erreur, ce qui entraîne un message d'erreur, qui est envoyé à votre écran; et ensuite, la sortie Excel est également envoyée à votre écran, de sorte que le message d'erreur devient une partie du contenu du stream de données Excel et, par conséquent, le message d'erreur est injecté dans le file, ce qui entraîne un file corrompu.

Ouvrez le file dans un éditeur de text, et vous devriez pouvoir voir le message d'erreur réel que vous recevez