» »

PHP + MySQL excel export pomoč?

PHP + MySQL excel export pomoč?

Housy ::

Zdravo,

na internetu sem našel eno preprosto skripto, ki exportira podatke v excel. Iz baze poberem podatke, te pa nato prikažem v excel datoteki.

Imam pa eno vprašanje, saj mi ta skripta vseeno ne deluje, tako, kot sem pričakoval. V excelu mi na vrhu izpiše tudi linke ter tudi iskalnik oz. celoten obrazec za iskanje, ki ga imam na strani. Tudi stolpec za povprečno ceno mi ne izpiše tako kot treba, saj mi namesto povprečne cene izpiše kar datum. Zakaj se to dogaja, mi res ni jasno.

Jaz bi samo rad, da mi v excel zapiše samo podatke iz baze, torej brez linkov in obrazca, zato me zanima, kaj je potrebno narediti?

slika izpisa v excelu



Koda pa je sledeča:

if(isset($_SESSION["user_logged"])) {
	
	$filename = "prevzemi_" . date('d-m-Y') . ".xls";
	
	header('Content-type: application/ms-excel');
    header('Content-Disposition: attachment; filename='.$filename);

	$search_sql = "SELECT a.*,
	                      b.ime_artikla,
	                      ROUND(AVG(a.cena), 2) AS povprecje,
	                      SUM(a.kvantiteta) AS quantity
	               FROM prevzemi a, artikli b
	               WHERE a.datum
	               BETWEEN '".mysql_real_escape_string($_POST["oddatuma"])."'
	               AND '".mysql_real_escape_string($_POST["dodatuma"])."'
	               AND a.id_artikla = '".mysql_real_escape_string($_POST["id_artikla"])."'
	               AND a.id_artikla = b.id_artikla
	               GROUP BY a.id_artikla
	               ORDER BY a.id_artikla ASC";
	
	$search_qry = mysql_query($search_sql) or die(mysql_error());
			
	$content  = "";
	
	$content .= '<table id="prevzemi">';
	
	$content .= '<tr>
                     <td style="padding: 0px 0px 10px 0px"><b>Ime Artikla</b></td>
                     <td><b>ID</b></td>
                     <td><b>Količina</b></td>
                     <td><b>Povprečna cena</b></td>
                 </tr>';

	while($search = mysql_fetch_array($search_qry)) {
            
        $content .= '<tr>
                         <td>'.$search["ime_artikla"].'</td>
                         <td>'.$search["id_artikla"].'</td>
                         <td>'.$search["quantity"].'</td>
                         <td>'.$search["povprecje"].'</td>
                     </tr>';
	
	}

	$content .= "<tr><td colspan='4'>Od <b>".$_POST["oddatuma"]."</b> do <b>".$_POST["dodatuma"]."</b></td></tr>";
	
	$content .= "</table>";
    
    echo $content;
	
}

?>


Lp in hvala,
Housy
  • zavaroval slike: bluefish ()

Housy ::

Če naredim enak izpis za isto poizvedbo kar na sami strani, pa dela brez problema in prikaže vse pravilno, tako da se mi res niti malo ne sanja, kaj je narobe.

Lp, Housy

Zgodovina sprememb…

  • spremenil: Housy ()

misek ::

Verjetno imaš kje pred tem delom kode kakšen html del s samim obrazcem. Zato najprej pošlje ta html del, nato pa še vsebino tabele. Ob kliku na Išči moraš poslati samo vsebino tabele.

Housy ::

Ja imam index.php datoteko in imam dinamične linke, npr. index.php?page=search. V index.php imam obrazec za iskalnik ja in ko vpišem v iskalnik iskan artikel, je atribut forme, torej action nastavljen na index.php?page=search. Potem pa z $_GET["page"] preverim, kdaj je stran enaka search in če je, potem include-am datoteko excel_export.php, ki mi nato ustvari excel datoteko.

Ob kliku na išči moraš poslati samo vsebino tabele?
Kako pa to storim?

Lp in hvala,
Housy

misek ::

Tvoj problem je, da ti vsa vsebina strani ostane, tudi ko include-aš excel_export.php. Torej v primeru index.php?page=search dobiš osnovno stran + rezultat iskanja.
Torej, če imaš zahtevo za search (page=search), izvedi samo search in vrni rezultat, tako kot imaš v zgornji kodi. Formo pa preskoči.

Housy ::

Hvala, sem dal zdaj action kr na excel_export.php in dela.

Pri samem izpisu za povprečno ceno mi kr pri nekaterih izdelkih prikaže kar datum in ne vem zakaj.

Kako lahko to popravim?

Lp in hvala,
Housy

Zgodovina sprememb…

  • spremenil: Housy ()

sumoborac ::

Predvidevam da to ni krivda skripte ampak Excela, ki določene oblike številk ali decimalk prevzame za razne datume in jih samodejno "popravi" in izpiše v novi obliki.

Kako zadevo izklopiš v excelu pa nebivedu. Če v htmlju izpiše pravilno tabelo pol je hec zagotovo v excelu in pretvorbi iz htmlja v excel strukturo.

Sumoborac
Prid sm al pa tm ostan...

Housy ::

Sumoborac, najverjetneje bo to krivo ja, ker ko potem odprem excel datoteko, mi javi spodnje opozorilo.

Datoteka, ki jo poskušate odpreti, "datoteka.xls", je v drugačni obliki, kot je navedeno s pripono datoteke. Preden odprete datoteko, preverite, ali je datoteka poškodovana in ali je iz zaupanja vrednega vira. Ali želite odpreti datoteko?


Nakar stisnem "DA" in mi normalno odpre datoteko, le da je pri povprečni ceni neka zmešnjava in zgleda zamenja številke kar z datumi očitno.

Je možno, da bi moral nastaviti še kakšne headerje? Če ja, katere?

Lp in hvala,
Housy

Zgodovina sprememb…

  • spremenil: Housy ()

sumoborac ::

Realnost je takšna, da html tabela ni pravi ekvivilent excel tabelam, zaradi česar tudi dobiš omenjeno opozorilo. Na način, ki ga uporabljaš kaj več neboš mogel dobiti iz tega. Za cene lahko poskusiš da zamenjaš namesto pike in daš vejico če ne potrebuješ tega excela za nadaljne procesiranje ;)

'.(is_float($search["povprecje"]) ? str_replace(".",",",$search["povprecje"]) : $search["povprecje"]).'


Obstajajo določeni php classi ki imajo zelo razvito podporo za excel datoteke, za tegale sem slišal že kar nekaj pozitivnih komentarjev, tako da če se ti da, lahko poskusiš (potrebuješ PHP compilean z PEAR modulom).

Sumoborac
Prid sm al pa tm ostan...

Housy ::

Žal pretvorba pike v vejico ne deluje, saj še vedno dobim datum pri nekaterih vrsticah.

Bom poskusil kakšen že obstoječ php class. Bom pogledal tega, ki si ga predlagal.

Lp in hvala,
Housy

Zgodovina sprememb…

  • spremenil: Housy ()

sumoborac ::

Preveri če je is_float res prava funkcija... včasih php spremenljivko vzame za string čeprav se notri nahaja številka in jo ne casta avtomatično v float... Poskusi zadevo shrant kot html in preveri če zamenja pike in vejice, če ne, potem poskusi kakšen drugi način npr.

(strpos($search["povprecje"],".") !== false ? str_replace(...) : $search["povprecje"])


Omenjeni klasi znajo bit včasih kar zalogaj, saj podpirajo celoten excel (od worksheetow, do grafov, slik in podobnih zadev)

Sumoborac
Prid sm al pa tm ostan...

Housy ::

Sumoborac ti si mojster hehe =D

Dela zdaj, ful ti hvala =)

Lp, Housy

sumoborac ::

Ni problema, še kdaj :)

Sumoborac
Prid sm al pa tm ostan...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

PHP povezava z Mysql

Oddelek: Izdelava spletišč
16853 (698) snooze77
»

PHP in objektno programiranje (strani: 1 2 )

Oddelek: Programiranje
8511284 (9751) kivi113
»

MySQL BETWEEN dates?

Oddelek: Programiranje
111292 (1206) Housy
»

[php] Knjiga gostov

Oddelek: Izdelava spletišč
293073 (2276) darix
»

[php, mysql] sortiranje izpisa iz baze

Oddelek: Izdelava spletišč
262569 (2088) Binji

Več podobnih tem