heavyaris Δημοσ. 20 Σεπτεμβρίου 2010 Δημοσ. 20 Σεπτεμβρίου 2010 παιδιά, έχω φτιάξει ένα online πελατολόγιο με php+mysql, και αυτό που θα ήθελα να ρωτήσω είναι το εξής: Στo phpmyadmin, τα αποτελέσματα ενός query μπορούν να γίνουν export σε xls (Microsoft Excel 2000 ). Εγώ θέλω ακριβώς αυτό! πάνω πάνω στα αποτελέσματα να υπάρχει ένας σύνδεσμος (μαζί με τον σύνδεσμο "εκτύπωση") "export to xls" και μόλις πατάει ο χρήστης να εμφανίζεται το παράθυρο του browser "save as". δεν έχω ιδέα όμως καν πώς να το αναζητήσω στο google. ευχαριστώ.
Επισκέπτης Δημοσ. 20 Σεπτεμβρίου 2010 Δημοσ. 20 Σεπτεμβρίου 2010 google "php export to xls" και επειδή βαριέσαι, εδώ
heavyaris Δημοσ. 20 Σεπτεμβρίου 2010 Μέλος Δημοσ. 20 Σεπτεμβρίου 2010 νασαι καλα φιλε! πιστεψε με, πιο πολυ βαρετό ήταν να κατσω να περιγραψω την απορια μου παρα ενα google search...!
gtroza Δημοσ. 20 Σεπτεμβρίου 2010 Δημοσ. 20 Σεπτεμβρίου 2010 ευχαριστώ natural_sgf ! ότι χρειαζόμουνα ! .
Επισκέπτης Δημοσ. 20 Σεπτεμβρίου 2010 Δημοσ. 20 Σεπτεμβρίου 2010 χαχα, ευχαρίστησε τους Larry Page, Sergey Brin (καθώς και τον content author)
heavyaris Δημοσ. 21 Σεπτεμβρίου 2010 Μέλος Δημοσ. 21 Σεπτεμβρίου 2010 παιδια, έχω ενσωματώσει τον κώδικα >header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=ajareport.xls>"); header("Pragma: no-cache"); header("Expires: 0"); $select = $query; $export = mysql_query($select); $count = mysql_num_fields($export); for ($i = 0; $i < $count; $i++) { $header .= mysql_field_name($export, $i)."\t"; } while($row = mysql_fetch_row($export)) { $line = ''; foreach($row as $value) { if ((!isset($value)) OR ($value == "")) { $value = "\t"; } else { $value = str_replace('"', '""', $value); $value = '"' . $value . '"' . "\t"; } $line .= $value; } $data .= trim($line)."\n"; } $data = str_replace("\r", "", $data); if ($data == "") { $data = "\n(0) Records Found!\n"; } print "$header\n$data"; στο αρχείο php που έχω να εμφανίζει τα αποτελέσματα απο τή βάση. τρέχοντας το λαμβάνω το >Warning: Cannot modify header information - headers already sent by ναί αλλά εάν δεν βάλω τα > header("Content-Disposition: attachment; filename=ajareport.xls>"); header("Pragma: no-cache"); header("Expires: 0"); πώς θα λειτουργήσει;
Επισκέπτης Δημοσ. 21 Σεπτεμβρίου 2010 Δημοσ. 21 Σεπτεμβρίου 2010 http://www.charset.org/ διαβασε εκεί που λέει για το BOM-mark
heavyaris Δημοσ. 21 Σεπτεμβρίου 2010 Μέλος Δημοσ. 21 Σεπτεμβρίου 2010 σε ενα φορουμ βρήκα: http://www.geeklog.net/faqman/index.php?op=view&t=38 >The fix is, obviously, to remove that whitespace from the file. Read the error message carefully. It says "output started at ..." followed by a file name and a line number. That is the file (and line) that you need to edit. Ignore the second file name - that is only a file that included the file that has the whitespace. The first file is the one you have to edit, not the second one. αλλα χρησιμοποιώ το dreamweaver, είναι δυνατόν να αφήνει αόρατα κενα; ---------- Προσθήκη στις 17:57 ---------- Προηγούμενο μήνυμα στις 16:27 ---------- το παρακάτω script δουλεύει, αλλα όπως ήταν αναμενόμενο, το αρχείο xls εμφανίζει οποιονδήποτε ελληνικό χαρακτηρα σε ????? ><?php // Edit the $Host, $User $Password, $DBName and $TableName vars only! // $Host = "localhost"; $User = " "; $Password = " "; $DBName = " _clients"; $TableName = "clients"; // DO NOT EDIT BELOW HERE // $link = mysql_connect ($Host, $User, $Password) or die('Could not connect: ' . mysql_error()); mysql_select_db($DBName) or die('Could not select database'); $select = "SELECT * FROM `".$TableName."`"; mysql_query("SET NAMES 'utf8_unicode_ci'"); mysql_query("SET CHARACTER SET 'utf8_unicode_ci'"); $export = mysql_query($select); $fields = mysql_num_fields($export); for ($i = 0; $i < $fields; $i++) { $csv_output .= mysql_field_name($export, $i) . "\t"; } while($row = mysql_fetch_row($export)) { $line = ''; foreach($row as $value) { if ((!isset($value)) OR ($value == "")) { $value = "\t"; } else { $value = str_replace('"', '""', $value); $value = '"' . $value . '"' . "\t"; } $line .= $value; } $data .= trim($line)."\n"; } $data = str_replace("\r","",$data); header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=database_dump.xls"); header("Pragma: no-cache"); header("Expires: 0"); print $csv_output."\n".$data; exit; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="el"> <head> <title>Download MySQL Table Code</title> </head> <body> </body> </html> τι μπορώ να διορθώσω;
Επισκέπτης Δημοσ. 21 Σεπτεμβρίου 2010 Δημοσ. 21 Σεπτεμβρίου 2010 >SET NAMES utf8; αντί SET NAMES 'utf8_unicode_ci' τα δεδομένα στη βάση πως τα έχεις περάσει;
heavyaris Δημοσ. 22 Σεπτεμβρίου 2010 Μέλος Δημοσ. 22 Σεπτεμβρίου 2010 έτσι τα είχα και πρίν: >mysql_query("SET NAMES 'utf8'"); mysql_query("SET CHARACTER SET 'utf8'"); απλά αντι για ερωτηματικά έπαιρνα: >Ξ Ξ‘ΞΤΕΛΙΔΗΣ ΓΕΩΡΓΙΞΞ£ τα δεδομένα έγιναν import απο ενα csv, πρώην xls, που πάλι είχα προβλήματα και ανέβαιναν στη βάση με ερωτηματικά, αλλα πειραματίστηκα με το collation και το έλυσα. πληροφορίες του πίνακα στο συνημμένο:
Επισκέπτης Δημοσ. 22 Σεπτεμβρίου 2010 Δημοσ. 22 Σεπτεμβρίου 2010 ><meta http-equiv="content-type" content="text/html; charset=UTF-8" /> εσύ του λες φέρτα σε UTF-8 από τη βάση, αλλά στη σελίδα έχεις ><html xmlns="http://www.w3.org/1999/xhtml" lang="el"> οι κωδικοποιήσεις πρέπει να match-άρουν...
heavyaris Δημοσ. 22 Σεπτεμβρίου 2010 Μέλος Δημοσ. 22 Σεπτεμβρίου 2010 σιγουρα, και εγώ εκεί πιστέυω πως είναι το πρόβλημα, συνοψίζοντας, πρεπει να αλλαχθούν τα: >mysql_query("SET NAMES 'utf8'"); mysql_query("SET CHARACTER SET 'utf8'"); >header("Content-Type: application/vnd.ms-excel; charset= greek_general_ci;"); ><html xmlns="http://www.w3.org/1999/xhtml" lang="el"> Ποιό όμως πρέπει να είναι το κοινό με βάση και το screenshot της βάσης; Υ.Γ έχει σημασία η τελευταία γραμμή; αφου δεν εκτυπώνω κάτι στην οθόνη, κατευθείαν βγαίνει το "save as". ---------- Προσθήκη στις 14:01 ---------- Προηγούμενο μήνυμα στις 12:12 ---------- χμ.. διαπίστωσα κάτι ενδιαφέρων, αν το ανοίξω με word, με ρωτάει encoding και εάν δώσω utf-8 φορτώνει κανονικά..
heavyaris Δημοσ. 16 Μαΐου 2011 Μέλος Δημοσ. 16 Μαΐου 2011 παιδιά, επειδή έκανα επέκταση του πελατολόγιου ώστε να μπορώ να κάνω και εισαγωγή πελάτη, όπως είναι λογικό, στα textfield της φόρμας, έβαλα mysql_real_escape_string, με αποτέλεσμα να αποθηκέυεται στην βάση η κάθετος '\'. όταν τα δείχνω τα αποτελέσματα χρησιμοποιώ την stripslashes, όμως κάπως πρέπει να την ενσωματώσω και στο script export to excel το οποίο είναι αυτό: >$xls_query= $_GET['queryEncoded']; //echo $xls_query; // DO NOT EDIT BELOW HERE // $link = mysql_connect ($Host, $User, $Password) or die('Could not connect: ' . mysql_error()); mysql_select_db($DBName) or die('Could not select database'); ////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //$select =base64_decode($xls_query); $xls_query_dec = base64_decode($xls_query); $xls_query_dec; $xls_query_exploded = explode(' LIMIT', $xls_query_dec); $select = $xls_query_exploded[0]; mysql_query("SET NAMES 'utf8'"); mysql_query("SET CHARACTER SET 'utf8'"); $export = mysql_query($select); $fields = mysql_num_fields($export); for ($i = 0; $i < $fields; $i++) { $csv_output .= mysql_field_name($export, $i) . "\t"; } while($row = mysql_fetch_row($export)) { $line = ''; foreach($row as $value) { if ((!isset($value)) OR ($value == "")) { $value = "\t"; } else { $value = str_replace('"', '""', $value); $value = '"' . $value . '"' . "\t"; } $line .= $value; } $data .= trim($line)."\n"; } $data = str_replace("\r","",$data); $csv_output = iconv('utf-8','greek',$csv_output); $data = iconv('utf-8','greek',$data); header("Content-Type: application/vnd.ms-excel; charset= utf8;"); header("Content-Disposition: attachment; filename=database_dump.xls"); header("Content-Transfer-Encoding: binary "); header("Pragma: no-cache"); header("Expires: 0"); print $csv_output."\n".$data; exit; καμμιά ιδέα; ευχαριστω.
heavyaris Δημοσ. 16 Μαΐου 2011 Μέλος Δημοσ. 16 Μαΐου 2011 Ήθελε $value = str_replace('\\', '', $value); τελικά...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.