Stránka: 1 z 1
| [ Príspevkov: 23 ] | |
Autor | Správa |
---|
Registrovaný: 30.08.13 Prihlásený: 12.12.13 Príspevky: 64 Témy: 7 | 7 Bydlisko: Senec |
Ahojte, potreboval by som poradit ako spravit aby po kliknuti na button sa mi podla checkboxov vytvoril subor exelu s datami s databazy ? Kód: <div class="tabulka2"> <form name="podrobnosti" method="post"> <table class="tab_2" id="tab_2"> <tr> <td><input id="" class="" type="button" value="Gen XLS" /></td> <td><input id="" class="" type="button" value="Gen XLS" /></td> <td><input id="" class="" type="button" value="Gen XLS" /></td> <td><input id="" class="" type="button" value="Gen XLS" /></td> <td><input id="" class="" type="button" value="Gen XLS" /></td> </tr> <tr> <td class="h" align="center"><b>Inspection Date</b></td> <td class="h" align="center"><b>Model</b></td> <td class="h" align="center"><b>SN from</b></td> <td class="h" align="center"><b>SN to</b></td> <td class="h" align="center"><b>Reason</b></td> <td class="h" align="center"><b>Blocked Qty</b></td> <td class="h" align="center"><b>OK Qty</b></td> <td class="h" align="center"><b>NG Qty</b></td> <td class="h" align="center"><b>Waiting Qty</b></td> </tr> <?php $co="SELECT DISTINCT ID, produce_datum, datum, model, sn_od, sn_do, reason FROM projekt ORDER BY ID ASC"; $vypis=mysql_query($co) or die($vypis. "<br/>" .mysql_error());
while (list($ID, $produce_datum, $datum, $model, $sn_od, $sn_do, $reason) = mysql_fetch_row($vypis)) { $sn_roz = intval(substr($sn_do, -5))-intval(substr($sn_od, -5))+1; $sql1 ="select count(IDx) as ok from db_sn where status='OK' and IDx = $ID"; $sql2 ="select count(IDx) as ng from db_sn where status='NG' and IDx = $ID"; $roz1 = mysql_fetch_assoc(mysql_query($sql1)); $roz1x = $roz1['ok']; $roz2 = mysql_fetch_assoc(mysql_query($sql2)); $roz2x = $roz2['ng']; $wait = $sn_roz-$roz1x-$roz2x;
echo '<tr> <td align="center"><input id="" type="text" name="datum" size="12" value="'.$datum.'" readonly="readonly" /></td> <td align="center"><input id="" type="text" name="model" size="18" value="'.$model.'" readonly="readonly" /></td> <td align="center"><input id="" type="text" name="sn_od" size="18" value="'.$sn_od.'" readonly="readonly" /></td> <td align="center"><input id="" type="text" name="sn_do" size="18" value="'.$sn_do.'" readonly="readonly" /></td> <td align="center"><textarea id="area" name="area" class="area" cols="20" rows="1" readonly="readonly">'.$reason.'</textarea></td> <td align="center">'.$sn_roz.'</td> <td align="center">'.$roz1x.'<input id="" type="checkbox" name="ok_qty" size="15" value="" /> </td> <td align="center">'.$roz2x.'<input id="" type="checkbox" name="ng_qty" size="15" value="" /> </td> <td align="center">'.$wait.'<input id="" type="checkbox" name="waiting_qty" size="15" value="" /> </td> <td align="center"><input id="'.$ID.'" class="show" name="'.$ID.'" value="show sn" type="button" style="cursor: pointer;" onclick="return openWin('.$ID.');" /> </td> <td align="center"><input id="" class="" type="button" value="Gen XLS" /></td> </tr>'; } mysql_close(); ?> </table> </form> </div>
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 | |
Registrovaný: 30.08.13 Prihlásený: 12.12.13 Príspevky: 64 Témy: 7 | 7 Bydlisko: Senec |
Dakujem , vo svojej podstate to funguje , len to ma jeden hacik , nejako nestastne som to napisal a stahuje mi to dva subory co by nebol az taky problem , ale v jednom sa nezobrazuju pismena s diakritikou a v druhom to je vsetko v pohode s casu na cas . Dalsia vec excel mi vyhadzuje problem s koncovkou, ze je to iny format ako je koncovka. Este jedna vec subor mi to vytvori pod localhostom na windowse , ale ked sa to nahodi na server ktori bezi pod linuxom tak to do suboru vypise error hlasku 1. nemozno otvorit a zapisat do suboru. toto v subore file.php Kód: function query_to_csv($query, $filename, $attachment = false, $headers = true) { if($attachment) { $fc = iconv('windows-1250', 'utf-8', file_get_contents($filename)); header( 'Content-Type: text/csv' ); header( 'Content-Disposition: attachment;filename='.$filename); $fp = fopen('File/data_db.xls', 'w') or die("1. Nemozno otvorit a zapisat do suboru."); } else { $fp = fopen($filename, 'w') or die("2. Nemozno otvorit a zapisat do suboru."); } $result = mysql_query($query) or die( mysql_error() ); if($headers) { $row = mysql_fetch_assoc($result); if($row) { fwrite($fp, $fc); fputcsv($fp, array_keys($row)); mysql_data_seek($result, 0); } } while($row = mysql_fetch_assoc($result)) { fputcsv($fp, $row); } fclose($fp); header("Location: ".$_SERVER['SERVER_ROOT']."index.php"); } $sql = "SELECT * FROM db_sn"; query_to_csv($sql, "test.csv", true);
query_to_csv($sql, "test.csv", false); ?>
a tu sa to spusta Kód: <form action="file.php" name="podrobnosti" method="post"> <table class="tab_2" id="tab_2"> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td><input id="xls" class="xls" type="submit" name="xls" value="Gen XLS" style="cursor: pointer;" /></td> <td><input id="xls" class="xls" type="submit" name="xls" value="Gen XLS" style="cursor: pointer;" /></td> <td><input id="xls" class="xls" type="submit" name="xls" value="Gen XLS" style="cursor: pointer;" /></td> <td><input id="xls" class="xls" type="submit" name="xls" value="Gen XLS" style="cursor: pointer;" /></td> <td><input id="xls" class="xls" type="submit" name="xls" value="Gen XLS" style="cursor: pointer;" /></td> </tr> ... </form>
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Tých háčikov je tam viac. 1.) Keď použiješ Content-Disposition attachement, tak sa do súboru uloží to, čo vypíšeš štandardne (napr. pomocou echo). Takže žiadne ukladanie do súboru cez fopen nie je potrebné. Cez fputcsv som to robil napríklad takto Kód: function outputCSV($data) { $output = fopen("php://output", "w"); // otvorí štandardný výstup php foreach ($data as $row) { fputcsv($output, $row); } fclose($output); }
Alebo použi len fopen a fputcsv a header daj preč. Ale takto je to krajšie, keď ti ponúkne uloženie. 2.) Máš tam nekonečnú rekurziu a to je dosť na hovno. Neviem, na čo tam máš na konci tie dva rekurzívne volania, ale odhoď to. 3.) Čo sa tých znakov týka, pravdepodobne nemáš správne nastavené kódovanie súboru. Ulož súbor so zdrojákom ako utf-8 4.) Vzhľadom na prvý bod je to nepodstatné, ale keď ti nechce otvoriť súbor, buď nemáš vytvorenú zložku File, alebo nemáš oprávnenie vytvárať v nej súbory.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 30.08.13 Prihlásený: 12.12.13 Príspevky: 64 Témy: 7 | 7 Bydlisko: Senec |
no nastavene utf -8 mam. Skusal som iba tak namatkovo aj to tvoje ale nic to nerobi tak isto ako uz aj to moje po kliknuti sa to prehodi na to php prazdna stranka Kód: function query_to_csv($query, $filename, $attachment = false, $headers = true) { if($attachment) { $fc = iconv('windows-1250', 'utf-8', file_get_contents($filename)); header( 'Content-Type: text/csv' ); $fp = fopen('file/data.xls', 'w') or die("1. Nemozno otvorit a zapisat do suboru."); } else { $fp = fopen($filename, 'w') or die("2. Nemozno otvorit a zapisat do suboru."); } $result = mysql_query($query) or die( mysql_error() ); if($headers) { $row = mysql_fetch_assoc($result); if($row) { fwrite($fp, $fc); fputcsv($fp, array_keys($row)); mysql_data_seek($result, 0); } } while($row = mysql_fetch_assoc($result)) { fputcsv($fp, $row); } fclose($fp); header("Location: ".$_SERVER['SERVER_ROOT']."index.php"); }
Popravde taketo nieco som este nerobil a toto je moje poprve ... tak neviem presne co s tym
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Skús to takto, všetko v súbore file.php Kód: <?php function outputCSV($data) { $output = fopen("php://output", "w"); // otvorí štandardný výstup php foreach ($data as $row) { fputcsv($output, $row); } fclose($output); }
if( isset($_POST["xls"]) ) { header('Content-type: text/csv'); header('Content-Disposition: attachment; filename="data.csv"'); header('Pragma: no-cache'); $headers = array( 'stlpec1', 'stlpec2', 'stlpec3' ); // mená stlpcov sa musia zhodovať so stĺpcami v databáze! $result = mysql_query($query) or die( mysql_error() ); $csvData = array($headers);
// Pripravím si dáta pre funkciu outputCSV foreach( $result as $row ) { $out = array(); foreach($headers as $key) $out[] = $row[$key]; // vytvorím riadok $csvData[] = $out; // pridám do dát } outputCSV($csvData);
exit(); } ?>
<form action="file.php" method="POST"> <input id="xls" class="xls" type="submit" name="xls" value="Gen XLS" style="cursor: pointer;" /> </form>
A súbor file.php ulož(!!!) s kódovaním utf-8
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 30.08.13 Prihlásený: 12.12.13 Príspevky: 64 Témy: 7 | 7 Bydlisko: Senec |
no tak som to vyskusal a poznatky : 1. vedel som ze to nepojde ale tak ako si to tu poslal tak som to vyskusal , dobre som si myslel preco to nepojde , prazdne query 2. po pridani $query = "SELECT * FROM db_sn"; vypise do subora len array teda nazvy stlpcov
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Poznatky: 1. Ja viem, to si mal doplniť podľa seba 2. Presvedč sa, že máš správny formát dát (a že tam vôbec nejaké máš). Trochu sa na ten kód pozri a skús ho pochopiť.
Prejav aj ty trochu iniciatívy, neurobím ti to tu všetko
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 30.08.13 Prihlásený: 12.12.13 Príspevky: 64 Témy: 7 | 7 Bydlisko: Senec |
Ved to ani nechcem aby si vsetko spravil , to v ziadnom pripade.
No som aj doplnil ale este mi to nejde al snat na to dnes pridem ... trochu som sa uz pozrel ... okej ... zatial mockrat Dakujem za pomoc
|
|
Registrovaný: 30.08.13 Prihlásený: 12.12.13 Príspevky: 64 Témy: 7 | 7 Bydlisko: Senec |
Skusal som spravit , ale stale sa mi tam nieco vyskytlo preco to neslo a toto je co sa mi podarilo, ale stale to ma problemi Kód: $table = 'db_sn'; $filename = tempnam(sys_get_temp_dir(), "csv"); if( isset($_POST["xls"])) { $file = fopen($filename,"w");
$result = mysql_query("show columns from $table"); for ($i = 0; $i < mysql_num_rows($result); $i++) { $colArray[$i] = mysql_fetch_assoc($result); $fieldArray[$i] = $colArray[$i]['Field']; } fputcsv($file,$fieldArray);
$result1 = mysql_query("select * from $table"); for ($i = 0; $i < mysql_num_rows($result1); $i++) { $dataArray[$i] = mysql_fetch_assoc($result1); } foreach ($dataArray as $line) { fputcsv($file,$line); }
fclose($file);
header("Content-Type: application/csv"); header("Content-Disposition: attachment;Filename=sn-models.csv");
readfile($filename); unlink($filename); }
no a do suboru mi to pise: ?š??žýáíéúôä? miesto ľščťžýáíéúôäň, a na konci suboru mi v dvoch riadkoch vypisuje html : <form action="subor.php" method="POST"> <input id="xls" class="xls" type="submit" name="xls" value="Gen XLS" style="cursor: pointer /> Ako sa da spravit (ak sa da) aby mi to napriklad meno zapisalo do bunky A1, priezvysko do bunky B2, datum do bunky C3 atd ?
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Prvé bude problém kódovania. Ulož súbor so zdrojákom ako utf-8, malo by to stačiť. Druhé je problém. Na to už budeš potrebovať inteligentnejší nástroj pre prácu s excelom, nie len hlúpe csv. Napríklad http://phpexcel.codeplex.com/
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 30.08.13 Prihlásený: 12.12.13 Príspevky: 64 Témy: 7 | 7 Bydlisko: Senec |
No medzicasom sa mi podarilo co to najst na nete a spravit cosi taketo : Kód: $query = "SELECT sn, meno, status FROM db_sn"; $res = mysql_query($query);
function xlsBOF() { echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); return; } function xlsEOF() { echo pack("ss", 0x0A, 0x00); return; } function xlsWriteNumber($Row, $Col, $Value) { echo pack("sssss", 0x203, 14, $Row, $Col, 0x0); echo pack("d", $Value); return; } function xlsWriteLabel($Row, $Col, $Value ) { $L = strlen($Value); echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L); echo $Value; return; }
$file_name = "subor_".date('Y-m-d_His'); header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download");; header("Content-Disposition: attachment;filename=$file_name.xls "); header("Content-Transfer-Encoding: binary ");
xlsBOF();
xlsWriteLabel(0,0,"Data - CSV");
xlsWriteLabel(2,0,"Sn"); xlsWriteLabel(2,1,"Name"); xlsWriteLabel(2,2,"Status");
$xlsRow = 3;
while($row=mysql_fetch_array($res)){
xlsWriteLabel($xlsRow,0,$row['sn']);// 0 indicates column number xlsWriteLabel($xlsRow,1,$row['meno']); xlsWriteLabel($xlsRow,2,$row['status']);
$xlsRow++; } xlsEOF(); exit();
je to sice asi trochu pracne ale funguje to co na to vravis ? Subory s kodom zasadne ukladam vzdy do utf-8 (general-ci).
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Ak to funguje, ta je to dobre. Ale to xlsBof vyzerá divne. Radšej by som použil nejakú abstraktnejšiu triedu, hlavne pre prehľadnosť, jednoduchosť a asi aj viac možností.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 30.08.13 Prihlásený: 12.12.13 Príspevky: 64 Témy: 7 | 7 Bydlisko: Senec |
Co na nej vyzera divne ? Aku by si radsej pouzil ? Mne staci ked to stahuje data a konec. Nic viac s tym nebudem teda zatial a snat ani nebudem viac robit, teda ineho, robit. Ano funguje to, len k tomu potrebujem este jednu chybicku krasy odstranit a to je to nech sa stlpce prisposobia dlzke bunky, nech po otvoreni nemusim s tym nic robit.
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Tie funkcie pracujú s excelom na tej najnižšej úrovni - na úrovni bajtov v binárnom súbore. To je akoby si otvoril excelovský súbor v hexa-editore a ručne písal priamo bajty. A to vlastne aj tie funkcie robia. Naozaj, keď budeš chcieť robiť niečo takéto (a nie len s excelom, ale napr aj s pdf, či inými formátmi), nájdi si nejaký, čo najkrajšií a najjednoduchší nástroj. Vidíš, takto vieš akurát zapisovať čísla a stringy. Keby si použil nejakú krajšiu triedu, tak tam máš omnoho viac možností, ktoré sa ti možno aj zídu (možno tam nájdeš aj úpravu šírky stĺpcov) A druhá, vec, keď to po tebe niekto bude čítať, alebo upravovať, otvorí súbor a vybafnú tam na neho takéto hrozné funkcie. Za to keby tam bolo pekne niečo ako $xls = new PHPExcel(); $xls->upravHento(); $xls->zapisHentoTam(); atď, hneď sa v tom lepšie orientuje. A zober si to tak, že ten niekto môžeš byť aj ty, keď to znovu otvoríš po dvoch mesiacoch (o dva mesiace si veru nebudeš pamätať, čo si to tam stváral)
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 30.08.13 Prihlásený: 12.12.13 Príspevky: 64 Témy: 7 | 7 Bydlisko: Senec |
dobre tak si zoberme ze moznost stiahnut a nainstalovat (co ani nemam) tem program co si mi sem hodil link (dakujem) , tak ten kod co som sem dal dnes ako prvy (s celej temy predposledny) ma svoje chyby ale ako tak funguje , co mam teda robit? ako to spravit ?
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
BX píše: Druhé je problém. Na to už budeš potrebovať inteligentnejší nástroj pre prácu s excelom, nie len hlúpe csv. Preco by malo byt CSV hlupe? Samozrejme sa da spravit CSV take, ze vo vysledku bude obsah v bunkach, ktore si clovek praje. Je tu este moznost poslat HTTP header Content-Type: application/vnd.ms-excel a vypisovat beznu HTML tabulku, malo by to takisto fungovat.
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Ďuri, tak nie "potrebovať", ale "by si mal použiť". Jasné, že sa to dá aj takto, len sa ho snažím naviesť na používanie tried, ktoré mu uľahčia život. Elrohir, vidím, že ty si ešte neprišiel do styku s OOP a takýmito triedami. V tom prípade to nechaj tak, ako to máš. Uč sa ďalej, študuj a keď sa dostaneš k OOP a triedam, tak sa pozri aj napríklad na ten phpexcel. Uvidíš, že to nie je nič zložité a ušetrí ti to kopu roboty
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
BX píše: Ďuri, tak nie "potrebovať", ale "by si mal použiť". Jasné, že sa to dá aj takto, len sa ho snažím naviesť na používanie tried, ktoré mu uľahčia život. Samozrejme, ze kazdy priemerny programator by mal byt s OOP zoznameny. Ale to je kanon na vrabce. Moze si to hadzat do dvojrozmerneho pola, pak spravit join("\n", array_map(function($_) { return join(',', $_) }, $pole)) (ak si spravne pamatam PHP, mozno tam bude chybka, ale myslienka sa z toho pochopit da) a zapisat do CSV suboru, hotovo. Nie je treba zbytocne zrat moc pamati. To potom cloveku pripomina tych "programatorov", ktori zacinaju web budovat tak, ze si stiahnu framework pozostavajuci z trilionu suborov, z ktorych vyuziju tak 2%, stratia sa v komplikovanych zapisoch a udrziavatelnost je biedna.
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
No dobre, excel je ešte inteligentný, tam to fakt netreba. Len si neviem predstaviť, že o mesiac bude chcieť generovať trebárs obsah pdf-ka a bude to robiť nejakými funkciami na úrovni bajtov, alebo niečoho podobného. Tak som toto spomenul ako možnosť, aspoň si to teraz pozrie
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 30.08.13 Prihlásený: 12.12.13 Príspevky: 64 Témy: 7 | 7 Bydlisko: Senec |
Co sa OOP tyka tak par kodov som spravil ale nie tolko aby som mohol povedat ze zaklady s toho mam.
Tak v tom prvom kode mam CSV a ako tam zapisem nech mi to zapisuje do buniek ?
No ja momentalne nepouzivam ziaden framework ale ucim sa Nette, co si o nom myslite ?
|
|
Registrovaný: 30.08.13 Prihlásený: 12.12.13 Príspevky: 64 Témy: 7 | 7 Bydlisko: Senec |
Teda otazky mam : ako zapisem teda CSV do buniek , pomohla by rada a druha ako spravim to aby mi to stiahlo data s db podla zaskrtnutych checkboxov a este k tomu aj ci je to riadok alebo stlpec ?
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
1.) Veď si to skús, aha Kód: ;;;;; nieco;nieco;nieco;nieco;nieco ;;;nieco;nieco 2.) Ako len chceš, to je na tebe ako to spravíš. Vieš spracovať checkboxy (vo forme a trebárs $_POST) a tiež vieš SQL.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Stránka: 1 z 1
| [ Príspevkov: 23 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v PHP, ASP | 15 | 1281 | 11.07.2006 11:19 ronny | | v Databázy | 5 | 825 | 02.05.2011 22:48 calimero | | v Databázy | 4 | 561 | 12.08.2017 16:10 BX | | v JavaScript, VBScript, Ajax | 15 | 971 | 05.09.2011 21:20 Pablo Montero | | v PHP, ASP | 5 | 713 | 05.02.2009 13:09 uUsErR | | v PHP, ASP | 0 | 667 | 30.06.2010 12:17 laceky | | v Databázy | 1 | 765 | 24.08.2018 12:24 BX | | v PHP, ASP | 2 | 327 | 26.12.2020 14:28 jakubv | | v PHP, ASP | 16 | 1910 | 27.08.2011 22:48 xanderhell | | v Databázy | 8 | 1495 | 31.10.2008 20:08 El_locco | | v PHP, ASP | 3 | 582 | 13.01.2017 9:59 BX | | v Databázy | 3 | 502 | 25.02.2018 1:22 martinius96 | | v Audio programy | 4 | 2140 | 10.08.2009 14:42 senti125 | | v PHP, ASP | 1 | 334 | 10.07.2012 20:50 Ďuri | | v JavaScript, VBScript, Ajax | 3 | 298 | 12.12.2012 18:14 shaggy | | v HTML, XHTML, XML, CSS | 3 | 433 | 01.03.2009 12:25 Flety |
|