Ich bin ein neuer Entwickler und habe vor kurzem fertig mit der Programmierung eines einfachen PHP mySQL DBMS für meine Firma. Jetzt, wo ich fertig bin bekomme ich es zu arbeiten, ich möchte es sicher machen, die Umsetzung aller Sicherheits-Best-Practices, die ich im Web finden kann (Bsp .: Reguläre Ausdrücke, mysqli_connect.php außerhalb Web-Verzeichnis vs Verbindungszeichenfolgen im Skript usw.), bevor ich es online nehme. Ich habe einige persönliche Informationen außerhalb dieses Codes bearbeitet und sie durch seine Arbeit ersetzt, aber in Klammern. Ich möchte es nicht, wenn möglich, online verfügbar lassen.Verweise auf mysqli_connect.php bricht PHPExcel Downloader
Normalerweise bin ich in der Lage mit nur einem Referenz mit meiner Datenbank zu arbeiten, um mysqli_connect.php, wie folgt aus:
require_once ('..\mysqli_connect.php');
Eine der Funktionen auf meinem DBMS ist ein ‚Download zu übertreffen‘ Button . Es funktioniert einwandfrei, aber nur wenn ich die Verbindung direkt innerhalb der Datei habe. Wenn ich meine Verbindung versuchen zu schreiben, wie ich oben in dem Beispiel zu tun, zeigt die Excel-Datei die folgende Fehlermeldung:
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.
Wenn ich die Verbindung direkt in der ExcelDownload.php schreiben, die Excel-Download-Datei korrekt . Die Verbindungszeichenfolge sieht wie folgt aus:
$dbc = @mysqli_connect('[myhost]', '[myusername]', '[mypassword]', '[mydatabase]')
Also noch einmal, im Grunde, Verweisen auf die Verbindung indirekt bewirkt, dass meine Excel, um Fehler downloaden und ich weiß nicht, warum. Es funktioniert gut, wenn ich die Verbindung direkt herbeirufe. Jede Hilfe würde sehr geschätzt werden.
Thanks again, Jibreel
Hier ist ExcelDownload.php, übrigens:
<?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');
?>
Ich öffnete die Datei und es gab nur ein paar völlig zufällige Zeichen bekommen. Ich habe versucht, die Erweiterung zu. TXT zu ändern, aber immer noch das gleiche Ergebnis. Das Ergebnis ist zu lang um hier zu posten. Kannst du mir helfen, von hier aus zu wissen, wohin ich gehe? Danke :-) –
Ich kann dir nicht einfach helfen ..... Ich habe dir gesagt, was das Problem ist, aber ich habe keinen Zugriff auf Ihre Protokolle, Ihre Dateien, etc, um Sie zu zeigen zu einer tatsächlichen Linie –
Ok, ich werde dann mein Bestes geben und versuchen, es selbst zu lösen. Danke trotzdem :) –