« 1 2 3 »
Autor Zpráva
petr 6
Profil
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
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
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
}
(jedna z možností, jak to upravit)
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
petr 6:

ale to budu muset nějak to všechno udělat, a to neumím, jak by to vypadalo??
zdenek
Profil
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 - &uacute;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
nějaká chybová hláška?
zdenek
Profil
Neas:

právě že ne
Neas
Profil
tak bílá stránka? to může spočívat v chybě při připojení k db.
zdenek
Profil
Neas:

ne, připojení je v pořádku. podle mě je chyba na řádku 22. ale nevím, jak to nahradit.
Petr__
Profil *
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
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
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
petr 6:

cože?
petr 6
Profil
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>";

}
(například, možností výpisu je víc)

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
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
$content = file_get_contents($path_to_file);
zdenek
Profil
amon:

díky, ale to nefunguje.
TomasJ
Profil
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();
a
fclose();

Opravdu je lepší použít funkci
file_get_contents();
jak zmínil amon. Pak bys umazal celý fopen();.

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
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
ahoj, zase já, prosím vás, proč nefunguje toto?
$i = $record['cislo'];
TomasJ
Profil
zdenek:
Kde to používáš? (kde to v kódě je)
TomasJ
Profil
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
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
petr 6:

a jak by to chtělo upravit? nefunguje to
petr 6
Profil
zdenek:
a jak by to chtělo upravit? nefunguje to

Asi by to chtělo přepsat tak, aby to fungovalo.
zdenek
Profil
petr 6:

a to by bylo prosím jak?
petr 6
Profil
Záleží, co je to "to"
TomasJ
Profil
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
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 - &uacute;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
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.
« 1 2 3 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0