Autor | Zpráva | ||
---|---|---|---|
petr 6 Profil |
#1 · Zasláno: 10. 2. 2011, 22:12:58
zdenek:
„ne, jde mi o to, aby když mám 150 hodnot a 3 slopce, tak aby v každém sloupci bylo 50 hodnot. chápeš?“ Chápu, jinak bych nemohl napsat druhou část mého příspěvku. Nicméně nechápu, proč chceš mít takovou strukturu té tabulky. Tvoje struktura tabulky je tedy taková: sloupec1 sloupec2 sloupec3 --------------------------- aaa bbb ccc a její informační hodnota je stejná, jako u takové tabulky: hodnota cislo_sloupce ------------------------ aaa 1 bbb 2 ccc 3 |
||
zdenek Profil |
#2 · Zasláno: 11. 2. 2011, 14:47:43 · Upravil/a: zdenek
petr 6:
to tvoje řešení je lepší. ale je tam problém. když bude oddělovač řádků ENTER, tak to bude muset být zase od začátku. a těch záznamů může být klidně přes 2 tisíce. tam je ten problém, já to nechci a asi to ani nejde, to zapisovat ručne, takže jestli na to existuje nějaký fígl, tak by se sem celkem hodil :-) EDIT: bude to vypadat asi takhle: hodnota cislo_sloupce ------------------------ aaa 1 bbb 2 ccc 3 abc 1 bca 2 cab 3 a tak dále... |
||
petr 6 Profil |
#3 · Zasláno: 11. 2. 2011, 15:05:46
Pokud bude oddělovač hodnot řádkový zlom, pak kód v [#2] upravíš na
$data=explode('\n',$retez); Cyklus z [#4] upravíš na $i=0; foreach ($data as $hodnota){ $i++; if($i>3) $i=1; //uložení proměnných $hodnota a $i } a tvoje tabulka v databázi bude vypadat jako v tvém předchozím příspěvku, což je totéž, jako druhá tabulka v mém předchozím příspěvku. |
||
zdenek Profil |
#4 · Zasláno: 11. 2. 2011, 15:19:28
petr 6:
ale to budu muset nějak to všechno udělat, a to neumím, jak by to vypadalo?? |
||
zdenek Profil |
#5 · Zasláno: 11. 2. 2011, 18:01:16 · Upravil/a: zdenek
ahoj, začal jsem na tom pracovat a došel jsem až k tomuhle:
<?php include "include/header.php"; include "include/connect.php"; $soubor_name = ($_FILES["soubor"]["name"]); $soubor = ($_FILES["soubor"]["tmp_name"]); $ok = ($_POST["ok"]); if ($ok == "Aufnehmen" && $soubor_name!="") { if (move_uploaded_file($soubor, "./uploads/$soubor_name")) { chmod ("./$soubor_name", 0646); echo "<b>$soubor_name Datei auf den Server hochgeladen</b><BR>"; if (!$ukazatel=fopen("./uploads/$soubor_name",r )) { echo "Doslo k chybe!"; } else { $retez = fpassthru($ukazatel); $data=explode('|',$retez); //.$data=explode('\n',$retez); $i=0; foreach ($data as $hodnota){ $i++; if($i>3) $i=1; mysql_select_db("root"); mysql_query ("INSERT INTO ostatni_odkazy (hodnota, cislo_sloupce) VALUES ('$hodnota', '$i')") or die(mysql_error()); } ?> <table border=1 width=600> <tr><td>SLOUPEC 1</td><td>SLOUPEC 2</td><td>SLOUPEC 3</td> <?php $sql = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo_sloupce=1") or die(mysql_error()); $sqli = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo_sloupce=2") or die(mysql_error()); $sqll = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo_sloupce=3") or die(mysql_error()); while($record = mysql_fetch_array($sql)){ while($records = mysql_fetch_array($sqli)){ while($recordy = mysql_fetch_array($sqll)){ ?> <tr><td><?php echo $record['hodnota'];?></td> <td><?php echo $records['hodnota'];?></td> <td><?php echo $recordy['hodnota'];?></td> </tr> <?php } } } ?> </table> <?php } } } else { ?> <!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" xml:lang="en-US" lang="en-US"> <head> <title>RWS GmbH - ústředny</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body><br><br><br> <div align=center> <table> <tr><td><b>Geben Sie den Dateinamen:</b></td></tr> <FORM ACTION="index.php" METHOD="post" ENCTYPE="multipart/form-data"> <tr><td><INPUT TYPE="file" NAME="soubor" SIZE="40"></td></tr> <tr><td><INPUT TYPE="submit" NAME="ok" VALUE="Aufnehmen"></td></tr> </FORM> </table> </div> </body> </html> <?php } ?> ale nefunguje mi to. čím to je? předem děkuji za odpověď. mám dojem že chyba bude na řádku 22, ale nevím to jistě. |
||
Neas Profil |
#6 · Zasláno: 11. 2. 2011, 20:17:18
nějaká chybová hláška?
|
||
zdenek Profil |
#7 · Zasláno: 11. 2. 2011, 20:33:42
Neas:
právě že ne |
||
Neas Profil |
#8 · Zasláno: 11. 2. 2011, 20:44:52
tak bílá stránka? to může spočívat v chybě při připojení k db.
|
||
zdenek Profil |
#9 · Zasláno: 11. 2. 2011, 20:52:02 · Upravil/a: zdenek
Neas:
ne, připojení je v pořádku. podle mě je chyba na řádku 22. ale nevím, jak to nahradit. |
||
Petr__ Profil * |
#10 · Zasláno: 12. 2. 2011, 00:15:59
zdenek:
„ne, připojení je v pořádku“ Když je připojení v pořádku, tak proč na 29. řádku znovu vybíráte databázi se jménem "root"? |
||
Neas Profil |
#11 · Zasláno: 12. 2. 2011, 12:39:51
jo, toho vybrání sem si původně nevšiml. vybírání databáze během cyklu je poměrně vážná prasárna a sql dotazy na řádcích 40-42 by jistě také šly napsat lépe (tj. do jednoho dotazu). Pak mě poměrně do oka praštil ten cyklus v cyklu v cyklu na řádku 45.
|
||
petr 6 Profil |
#12 · Zasláno: 12. 2. 2011, 12:57:04
Neas:
„Pak mě poměrně do oka praštil ten cyklus v cyklu v cyklu na řádku 45.“ Ono vůbec řádky 40 až 59 jsou hlavně úvahově totálně špatně, jako by sám autor toho kódu vůbec nechápal, jak navrhovat strukturu tabulky v databázi a jak z ní pak vypisovat data v určitém formátu. Popravdě jsem už od začátku podezříval zdeneka, že ty jeho původní tři sloupce v tabulce použije jen pro takovou prkotinu, jakou je vypsání tří hodnot vedle sebe, pro což je to samozřejmě zbytečné, a stačí mít v tabulce jeden sloupec s hodnotami. |
||
zdenek Profil |
#13 · Zasláno: 12. 2. 2011, 14:53:58
petr 6:
cože? |
||
petr 6 Profil |
#14 · Zasláno: 12. 2. 2011, 16:51:20
zdenek:
Na kterou část mého příspěvku je to reakce? V databázi ti stačí mít hodnota ------------ aaa bbb ccc dd eee fff A vypisuješ $i=0; while($recordy = mysql_fetch_array($sqll)){ $i++; if($i>3) $i=1; if($i==1) echo "<tr>"; echo "<td>".$recordy['hodnota']."<td>"; if($i==3) echo "</tr>"; } Ale v žádném případě 3 cykly, v žádném případě 3 sloupce tabulky. Na "seskupování" hodnot po třech ti stačí jeden sloupec s hodnotami. |
||
zdenek Profil |
#15 · Zasláno: 12. 2. 2011, 18:39:54
petr 6:
díky, takhle to bude lepší, ale já teď řeším, jak natáhnout obsah toho souboru do proměné tak, abych s ní pak mohl pracovat. nevíš nějaké vylepšení. konkrétně mluvím o řádku 22 |
||
amon Profil |
#16 · Zasláno: 12. 2. 2011, 20:56:02
$content = file_get_contents($path_to_file); |
||
zdenek Profil |
#17 · Zasláno: 12. 2. 2011, 21:10:05
amon:
díky, ale to nefunguje. |
||
TomasJ Profil |
#18 · Zasláno: 13. 2. 2011, 00:33:51 · Upravil/a: TomasJ
Chyba je tady (konkrétně řádek 17):
if (!$ukazatel=fopen("./uploads/$soubor_name",r )) musíš to r dát do apostrofů (' ') nebo uvozovek (" "). Takže if (!$ukazatel=fopen("./uploads/$soubor_name","r" )) A když tak na to koukám, tak vidím že soubor přesuneš do ./uploads/$soubor_name a pak nastavuješ chmod na soubor o adresář výš (řádky 13 a 15). No další chyba je od řádku 18 až po 22. Nikde nevidím po fopen(); fread(); fclose(); Opravdu je lepší použít funkci file_get_contents(); Oprava: <?php include "include/header.php"; include "include/connect.php"; $soubor_name = $_FILES["soubor"]["name"]; $soubor = $_FILES["soubor"]["tmp_name"]; $ok = $_POST["ok"]; $path = "./uploads/$soubor_name"; if ($ok == "Aufnehmen" && $soubor_name) { if (move_uploaded_file($soubor, $path)) { chmod ($path, 0644); echo "<b>$soubor_name Datei auf den Server hochgeladen</b><BR>"; if (!$ukazatel=file_get_contents($path)) { echo "Soubor nelze precist!"; } else { $data=explode('|',$ukazatel);//$data=explode('\n',$ukazatel); $i=0; foreach ($data as $hodnota){ $i++; if($i>3) $i=1; mysql_query ("INSERT INTO ostatni_odkazy (hodnota, cislo_sloupce) VALUES ('$hodnota', '$i')") or die(mysql_error()); } ?> Cyklus foreach(){} funguje takto: Uvedu příklad: $a = Array("a","b","c"); foreach($a as $hodnota){//Otevře pole $a a postupně vybírá hodnoty. Podle počtu hodnot, cyklus poběží až k poslední. My máme 3 hodnoty v poli, takže cyklus pojede 3x echo $hodnota; //Poprvé v této proměnné bude "a" (bez uvozovek) a naposled v ní bude "c" } |
||
zdenek Profil |
#19 · Zasláno: 13. 2. 2011, 10:56:40 · Upravil/a: zdenek
TomasJ:
díky, už to skoro funguje tak, jak bych si přál. jen bych potřeboval vědět, proč mi nefunguje ten výpis těch dat z tabulky. |
||
zdenek Profil |
#20 · Zasláno: 13. 2. 2011, 13:54:48
ahoj, zase já, prosím vás, proč nefunguje toto?
$i = $record['cislo']; |
||
TomasJ Profil |
#21 · Zasláno: 13. 2. 2011, 20:33:10 · Upravil/a: TomasJ
zdenek:
Kde to používáš? (kde to v kódě je) |
||
TomasJ Profil |
#22 · Zasláno: 13. 2. 2011, 20:48:39 · Upravil/a: TomasJ
Jak už se zmínil petr 6 v [#12], máš cyklus v cyklu, který je v cyklu...
#1 <?php $sql = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo_sloupce=1") or die(mysql_error()); $sqli = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo_sloupce=2") or die(mysql_error()); $sqll = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo_sloupce=3") or die(mysql_error()); //to je ještě vpořádku while($record = mysql_fetch_array($sql)){ //toto je taky v pořádku while($records = mysql_fetch_array($sqli)){ //toto už ne (dokud jede předchozí cyklus) while($recordy = mysql_fetch_array($sqll)){ //to samé (dokud jede předchozí cyklus) ?> <tr><td><?php echo $record['hodnota'];?></td> <td><?php echo $records['hodnota'];?></td> <td><?php echo $recordy['hodnota'];?></td> </tr> <?php } } } ?> Správně je to takto: #2 <?php $sql = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo_sloupce=1") or die(mysql_error()); $sqli = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo_sloupce=2") or die(mysql_error()); $sqll = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo_sloupce=3") or die(mysql_error()); echo"<tr>"; while($record = mysql_fetch_array($sql)){echo "<td>".$record['hodnota']."</td>";} while($records = mysql_fetch_array($sqli)){echo "<td>".$records['hodnota']."</td>";} while($recordy = mysql_fetch_array($sqll)){echo "<td>".$recordy['hodnota']."</td>";} echo"</tr>"; ?> Místo <tr><td><?php echo $record['hodnota'];?></td> <td><?php echo $records['hodnota'];?></td> <td><?php echo $recordy['hodnota'];?></td> použij funkci echo(); jak je v druhém mém kódu na řádcích 6, 7 a 8 Omlouvám se za DP (double post). |
||
petr 6 Profil |
#23 · Zasláno: 13. 2. 2011, 23:35:21
TomasJ:
„Správně je to takto“ Obávám se, že není. Tedy alespoň ne, pokud chce tři záznamy na jedno <tr>. Tvůj řádek 6 (v #2) může klidně vypsat tisíce záznámů z databáze, stejně jako řádek 7 a 8. A <tr> ukončuješ až za tím. |
||
zdenek Profil |
#24 · Zasláno: 15. 2. 2011, 07:42:19
petr 6:
a jak by to chtělo upravit? nefunguje to |
||
petr 6 Profil |
#25 · Zasláno: 15. 2. 2011, 14:23:12
zdenek:
„a jak by to chtělo upravit? nefunguje to“ Asi by to chtělo přepsat tak, aby to fungovalo. |
||
zdenek Profil |
#26 · Zasláno: 15. 2. 2011, 14:56:25
petr 6:
a to by bylo prosím jak? |
||
petr 6 Profil |
#27 · Zasláno: 15. 2. 2011, 14:58:19
Záleží, co je to "to"
|
||
TomasJ Profil |
#28 · Zasláno: 15. 2. 2011, 17:39:08 · Upravil/a: TomasJ
petr 6, zdenek:
Aha nevšiml jsem si, že chce po třech do jednoho <tr> nicméně na funkčnost to vliv nemá, takže jsi Zdeňku něco dal na nesprávné místo. Co takhle nám poslat kód, který máš nyní, ať se tu jen nedohadujeme co máš špatně?... |
||
zdenek Profil |
#29 · Zasláno: 15. 2. 2011, 17:43:44 · Upravil/a: zdenek
TomasJ:
dobře: <?php include "include/header.php"; include "include/connect.php"; $soubor_name = $_FILES["soubor"]["name"]; $soubor = $_FILES["soubor"]["tmp_name"]; $ok = $_POST["ok"]; $path = "./uploads/$soubor_name"; if ($ok == "Aufnehmen" && $soubor_name!="") { if (move_uploaded_file($soubor, $path)) { chmod ($path, 0644); echo "<b>$soubor_name Datei auf den Server hochgeladen</b><BR>"; if (!$ukazatel=file_get_contents($path)) { echo "Soubor nelze precist!"; } else { $data=explode('|',$ukazatel);//$data=explode('\n',$ukazatel); $i=0; foreach ($data as $hodnota){ $i++; if($i>3) { $i=1; } mysql_connect("localhost", "*******", "*******"); mysql_select_db("*******"); //mysql_query("DELETE FROM `ostatni_odkazy`") or die(mysql_error()); mysql_query ("INSERT INTO ostatni_odkazy (hodnota, cislo) VALUES ('$hodnota', '$i')") or die(mysql_error()); } ?> <table border=1 width=600> <tr><td>SLOUPEC 1</td><td>SLOUPEC 2</td><td>SLOUPEC 3</td> <?php mysql_connect("localhost", "****", "******"); $sql = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo=1") or die(mysql_error()); $sqli = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo=2") or die(mysql_error()); $sqll = mysql_query ("SELECT * FROM ostatni_odkazy WHERE cislo=3") or die(mysql_error()); while($record = mysql_fetch_array($sql)){echo "<tr><td>".$record['hodnota']."</td>";} while($records = mysql_fetch_array($sqli)){echo "<td>".$records['hodnota']."</td>";} while($recordy = mysql_fetch_array($sqll)){echo "<td>".$recordy['hodnota']."</td></tr>";} echo "</tr>"; ?> </table> <?php } } } else { ?> <!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" xml:lang="en-US" lang="en-US"> <head> <title>RWS GmbH - ústředny</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body><br><br><br> <div align=center> <table> <tr><td><b>Geben Sie den Dateinamen:</b></td></tr> <FORM ACTION="index.php" METHOD="post" ENCTYPE="multipart/form-data"> <tr><td><INPUT TYPE="file" NAME="soubor" SIZE="40"></td></tr> <tr><td><INPUT TYPE="submit" NAME="ok" VALUE="Aufnehmen"></td></tr> </FORM> </table> </div> </body> </html> <?php } ?> nevíte kde je tedy ta chyba?? |
||
petr 6 Profil |
#30 · Zasláno: 15. 2. 2011, 20:55:47
zdenek:
Opravil sis to, na co jsem tě upozorňoval už v [#14]? Opravil sis to, na co tě TomasJ upozorňoval v [#18]? „kde je tedy ta chyba??“ Jaká chyba? Co to má dělat a nedělá to? Co to dělá a nemá to dělat? Co chceš aby to dělalo? Myslím, že odpovědi už máš, jen je ignoruješ a dáváš sem obsáhlý kód se stále stejnými chybami, které jsme ti už vyřešili. |
||
Téma pokračuje na další straně.
|
0