2016-05-27 9 views
-4

Ich bin Export Datenbank von mysql zu excel aber ich bin immer Fehler wie folgt aus:mysql zu übertreffen mit PHP

enter image description here

und mein Code:

<?php 
session_start(); 
if(!isset($_SESSION['username']) && !isset($_SESSION['password'])) 
{ 

    header("location:../index.php"); 
} 
//header('Pragma: no-cache'); 
include("../config.php"); 
//$id=$_GET['id']; 
include '../PHPExcel/IOFactory.php'; 
include '../PHPExcel/PHPExcel.php'; 
$sqlquery = "SELECT ProjectName As Project, 
     OfficeContact As Office, IndiaContact As india, 
     StartDate As sdate, Notes As notes, 
     Status AS status, DueDate AS ddate, 
     Client AS client, InHouseProject AS inhouse 
    FROM project 
    WHERE ProjectType='Current projects' 
    order by projectid"; 

$select_table = mysql_query($sqlquery); 


// Create new PHPExcel object 
$objPHPExcel = new PHPExcel(); 

// Create a first sheet, representing sales data 
$objPHPExcel->setActiveSheetIndex(0); 
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Project'); 
$objPHPExcel->getActiveSheet()->setCellValue('B1', 'Office Contact'); 
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'India Contact'); 
$objPHPExcel->getActiveSheet()->setCellValue('D1', 'Start date'); 
$objPHPExcel->getActiveSheet()->setCellValue('E1', 'Notes'); 
$objPHPExcel->getActiveSheet()->setCellValue('F1', 'Status'); 
$objPHPExcel->getActiveSheet()->setCellValue('G1', 'Due Date'); 
$objPHPExcel->getActiveSheet()->setCellValue('H1', 'Client'); 
$objPHPExcel->getActiveSheet()->setCellValue('I1', 'In-house project'); 
$i=2; 
while($row=mysql_fetch_assoc($select_table)){ 
$objPHPExcel->getActiveSheet()->setCellValue('A'.$i, $row['Project']); 
$objPHPExcel->getActiveSheet()->setCellValue('B'.$i, $row['Office']); 
$objPHPExcel->getActiveSheet()->setCellValue('C'.$i, $row['india']); 
$objPHPExcel->getActiveSheet()->setCellValue('D'.$i, $row['sdate']); 
$objPHPExcel->getActiveSheet()->setCellValue('E'.$i, $row['notes']); 
$objPHPExcel->getActiveSheet()->setCellValue('F'.$i, $row['status']); 
$objPHPExcel->getActiveSheet()->setCellValue('G'.$i, $row['ddate']); 
$objPHPExcel->getActiveSheet()->setCellValue('H'.$i, $row['client']); 
$objPHPExcel->getActiveSheet()->setCellValue('I'.$i, $row['inhouse']); 
i++; 
} 
// Rename sheet 
$objPHPExcel->getActiveSheet()->setTitle('Current projects'); 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="allproject.xls"'); 
header('Cache-Control: max-age=0'); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('php://output'); 
?> 

Wenn ich mit while-Schleife versuche, arbeitet es mit Header, den ich im Code definiere. Und ich überprüfe auch, dass ohne Code meine php Code für Datenbank und sein Feld arbeitet. Aber mit der obigen While-Schleife wird das obige Bild angezeigt.

+3

Suchen Sie in den Fehlerprotokollen nach dem tatsächlichen Fehler. –

+3

Versuchen Sie, keine Screenshots einzufügen, die nur eine Textfehlermeldung anzeigen. Es ist fast immer besser, den Text des Fehlers einzufügen, damit die Leute danach suchen können. – tadman

+0

lesen Sie dies für wie Fehler berichten zu aktivieren: http://stackoverflow.com/questions/845021/how-to-get-useful-error-messages-in-php –

Antwort

1

Sie $ Symbol für variable verpasst i bei vor dem Schließen der While-Schleife (i ++). Halten Sie und prüfen Sie, es könnte funktionieren.

+3

Wichtiger ist, dass OP * Debugging * Skills entwickelt. StackOverflow ist * kein * Debugging-Service. Das Posten von Fragen in StackOverflow ist * kein * Ersatz für das Debugging. [https://ericlippert.com/2014/03/05/how-to-debug-small-programs/**] (https://ericlippert.com/2014/03/05/how-to-debug -klein-programme /) – spencer7593

1

Soweit ich sehen kann, sieht Ihr Code gut aus. Aus meiner eigenen Erfahrung wirft PHPExcel leicht 500 Fehler. Manchmal aufgrund von Speichermangel, spezielle Zelle Markup, komplexe Formeln, ..

Ich verwende fast genau den gleichen Code wie Sie für den Export von Abfragen nach Excel. Dieser Code erstellt einen vollständigen Export aus einer Select-Abfrage (mit den gleichen Headern). Wobei

$oResult 

ist Ihr mysqli_query Ergebnis.

$objPHPExcel = new PHPExcel(); 
$objPHPExcel->getProperties()->setCreator("Me"); 
$objPHPExcel->getProperties()->setTitle("Export"); 
$objPHPExcel->getProperties()->setSubject("Export"); 
$objPHPExcel->getProperties()->setDescription("Export"); 

$objPHPExcel->setActiveSheetIndex(0); 
$iColHeaders = 0; 
// Set Headers 
while($oFields = mysqli_fetch_field($oResult)) { 
    $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($iColHeaders, 1, $oFields->name); 
    $iColHeaders++; 
} 

// Set data 
$iRow=1; 
while($oRow = mysqli_fetch_array($oResult)){ 
    $iRow++; //Skip header row 
    for($iCol=0;$iCol<$iColHeaders;$iCol++){ 
     $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($iCol, $iRow, $oRow[$iCol]); 
    } 
} 

$objPHPExcel->getActiveSheet()->setTitle('Export'); 

$sPath = dirname(__FILE__).'/files/'; 
$sFilename = 'Export_'.date('His').'.xlsx'; 
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->save($sPath.$sFilename, __FILE__); 

Und das wirkt wie ein Zauber, der einzige Unterschied, den ich sehe, ist die

setCellValueByColumnAndRow 

anstelle des

setCellValue 

Hoffentlich mit Ihrem Problem hilft.

-1

können Sie diese verwenden und bitte formatieren Sie es Ihr nach:

<?php 
define ("DB_HOST", "localhost"); 
define ("DB_USER", "root"); 
define ("DB_PASS",""); 
define ("DB_NAME","stock1"); 
error_reporting(0); 
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection."); 
$db = mysql_select_db(DB_NAME, $link) or die("Couldn't select database"); 

$setCounter = 0; 

$setExcelName = "download_excal_file"; //downloaded excel file name 

$setSql = "SELECT * FROM roll_table ORDER BY id ASC"; //to select the data from the database 

$setRec = mysql_query($setSql); 

$setCounter = mysql_num_fields($setRec); 

for ($i = 0; $i < $setCounter; $i++) { 
    $setMainHeader .= mysql_field_name($setRec, $i)."\t"; 
} 

while($rec = mysql_fetch_row($setRec)) { 
    $rowLine = ''; 
    foreach($rec as $value)  { 
    if(!isset($value) || $value == "") { 
     $value = "\t"; 
    } else { 
//It escape all the special charactor, quotes from the data. 
     $value = strip_tags(str_replace('"', '""', $value)); 
     $value = '"' . $value . '"' . "\t"; 
    } 
    $rowLine .= $value; 
    } 
    $setData .= trim($rowLine)."\n"; 
} 
    $setData = str_replace("\r", "", $setData); 

if ($setData == "") { 
    $setData = "\nno matching records found\n"; 
} 

$setCounter = mysql_num_fields($setRec); 



//This Header is used to make data download instead of display the data 
header("Content-type: application/octet-stream"); 

header("Content-Disposition: attachment; filename=".$setExcelName."_Reoprt.xls"); 

header("Pragma: no-cache"); 
header("Expires: 0"); 

//It will print all the Table row as Excel file row with selected column name as header. 
echo ucwords($setMainHeader)."\n".$setData."\n"; 
?> 
+0

Warum der Downvote? Die Antwort ist völlig korrekt.Ich habe das selbe verwendet –

2

Verwendung dieser Code

index.php

<?php 
define ("DB_HOST", "localhost"); 
define ("DB_USER", "root"); 
define ("DB_PASS",""); 
define ("DB_NAME","yukti"); 
error_reporting(0); 
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection."); 
$db = mysql_select_db(DB_NAME, $link) or die("Couldn't select database"); 

$setCounter = 0; 

$setExcelName = "download_excal_file"; 

$setSql = "SELECT * FROM login ORDER BY id ASC"; 

$setRec = mysql_query($setSql); 

$setCounter = mysql_num_fields($setRec); 

for ($i = 0; $i < $setCounter; $i++) { 
    $setMainHeader .= mysql_field_name($setRec, $i)."\t"; 
} 

while($rec = mysql_fetch_row($setRec)) { 
    $rowLine = ''; 
    foreach($rec as $value)  { 
    if(!isset($value) || $value == "") { 
     $value = "\t"; 
    } else { 
//It escape all the special charactor, quotes from the data. 
     $value = strip_tags(str_replace('"', '""', $value)); 
     $value = '"' . $value . '"' . "\t"; 
    } 
    $rowLine .= $value; 
    } 
    $setData .= trim($rowLine)."\n"; 
} 
    $setData = str_replace("\r", "", $setData); 

if ($setData == "") { 
    $setData = "\nno matching records found\n"; 
} 

$setCounter = mysql_num_fields($setRec); 



//This Header is used to make data download instead of display the data 
header("Content-type: application/octet-stream"); 

header("Content-Disposition: attachment; filename=".$setExcelName."_Reoprt.xls"); 

header("Pragma: no-cache"); 
header("Expires: 0"); 

//It will print all the Table row as Excel file row with selected column name as header. 
echo ucwords($setMainHeader)."\n".$setData."\n"; 
?> 
0

500 Fehler bedeutet, Sie stehen vor PHP-Ausführungsproblem. Es gibt jetzt ein Problem im Code. Dieses Problem wurde durch die Deaktivierung der Unterstützung virtueller Verzeichnisse verursacht. Dies wurde mit diesem Befehl behoben.

sudo chmod -R 755/var/www