Autor | Zpráva | ||
---|---|---|---|
PHP_Nemaster Profil |
Dobrý den,
mám takový problém. Četl jsem, že while načte z databáze všechny řádky, ale mně z nějakého důvodu načítá jen jeden. Kód je takový: ____________________________________________________ <?php include "connect.php"; ?> <?php $select = "SELECT username, password, id FROM Profiles"; $query = mysql_query ( $select ) or die ( mysql_error ); while ( $row = mysql_fetch_array ( $query ) ) { $username = $row['username']; $password = $row['password']; $id = $row['id']; } echo "heslo: " .$password. "<br>"; echo "name: " .$username. "<br>"; echo "id: " .$id. "<br>" ; ?> <html> <a href="profile.php?id=<?php echo $id; ?>" >Profile</a> </html> _________________________________________________ To, že mám řádků více, jsem ověřil. A když přidám další řádek, vždy se načte ten naposledy přidaný. Předem děkuji za odpověd'. Moderátor Alphard: Vkládejte prosím kód mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
Chosé Profil * |
<?php include "connect.php"; ?> <?php $select = "SELECT username, password, id FROM Profiles"; $query = mysql_query ( $select ) or die ( mysql_error ); echo "<html>"; while ( $row = mysql_fetch_array ( $query ) ): $username = $row['username']; $password = $row['password']; $id = $row['id']; echo "heslo: " .$password. "<br>"; echo "name: " .$username. "<br>"; echo "id: " .$id. "<br>" ; echo "<a href=\"profile.php?id=$id; \" >Profile</a>"; endwhile; ?> </html> Moderátor Alphard: Vkládejte prosím kód mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
PHP_Nemaster Profil |
#3 · Zasláno: 18. 5. 2009, 19:34:51 · Upravil/a: PHP_Nemaster
Dík. Udělal jsem to, ale hlásí to chybu někde na řádku 14, nemůžu najít kde.
Parse error: parse error, expecting `','' or `';'' in /3w/czweb.org/a/amaga/select.php on line 14 |
||
Lopata Profil |
#4 · Zasláno: 18. 5. 2009, 19:41:43 · Upravil/a: Lopata
OPRAVA: v době psaní tohoto příspěvku jsem ještě nečetl, cos na to napsal.
Chosé to má správně. Jen abys věděl co se pokazilo; v PHP může mít každá proměnná jen jednu hodotu. Tys tedy pokaždé, když se opakoval cyklus přemazal předchozí hodnotu. Proto se Ti ukázal jen posladní záznam -> ten totiž nic nepřemazalo. Kdybys chtěl všechny záznamy "spojit" zkus třeba výraz používající ".=". Tedy: <?php include "connect.php"; ?> <html> <?php $select = "SELECT username, password, id FROM Profiles"; $query = mysql_query ( $select ) or die ( mysql_error ); $username = ''; $password = ''; $id = ''; while ( $row = mysql_fetch_array ( $query ) ) { $username .= $row['username'] . ','; $password .= $row['password'] . ','; $id .= $row['id'] . ','; } echo "hesla: " .$password. "<br>"; echo "names: " .$username. "<br>"; echo "ids: " .$id. "<br>" ; ?> </html> |
||
PHP_Nemaster Profil |
#5 · Zasláno: 18. 5. 2009, 20:11:26
Děkuji, už to funguje.
Ale jak to ted' udělat s těmi odkazy na profily? Přidal jsem to do toho cyklu, jednou mi to fungovalo ( napsalo to odkaz: profile.php?id=19 ), ale podruhý to už napsalo profile.php?id=19,20. Jak můžu udělat, aby se to zobrazilo jako id=19 a id=20 ? |
||
SwimX Profil |
#6 · Zasláno: 18. 5. 2009, 20:19:55
PHP_Nemaster
<?php include "connect.php"; ?> <?php $select = "SELECT username, password, id FROM Profiles"; $query = mysql_query ( $select ) or die ( mysql_error ); echo "<html>"; while ( $row = mysql_fetch_assoc ( $query ) ){ echo "heslo: " .$row['password']. "<br> name: " . $row['username']. "<br> id: " .$row['id']. "<br> <a href=\"profile.php?id={$row['id']}; \" >Profile</a>"; } ?> </html> a taková poznámka, doufám, že nebudeš nikam vypisovat uživatelovo heslo, nehledě na to že by se mělo do DB ukládat hashované např sha1 abys jeho heslo neznal a útočník ti ho nesebral. |
||
PHP_Nemaster Profil |
#7 · Zasláno: 18. 5. 2009, 21:17:30
SwimX: Děkuju. S těmi hesly to vím, je to jen test, v opravdové aplikaci je samozřejmě vypisovat nebudu.
A zároveň děkuji všem, co se mi snažili pomoct. Na tu chybu jsem asi už přišel - ve výpisu je kód z knihy, kterou čtu ( PHP5, MySQL, Apache - Vytváříme webové aplikace ), a všiml jsem si, že tam není pevně definovaná proměnná $řádek['id'], takže se může změnit podle záznamů v databázi ( pokud to chápu správně ). _______________________________________ <?php include "connect.php"; $dotaz = "SELECT username, password, id FROM Profiles " . "ORDER BY username"; $výsledek = mysql_query( $dotaz ) or die( mysql_error() ); while ( $řádek = mysql_fetch_array( $výsledek ) ) { echo $řádek['username'] . " " . $řádek['password']; ?> <a href="profile.php?id=<?php echo $řádek['id']; ?>">Upravit uživatele</a><br> <?php } ?> _____________________________________ |
||
SwimX Profil |
#8 · Zasláno: 18. 5. 2009, 22:28:33
PHP_Nemaster
while ( $řádek = mysql_fetch_array( $výsledek ) ) { tadle řádka do proměnné řádek (což je prasácky pojmenované s diakritikou) ukládá pole. A to pole má prvky jako jsi zadal v SELECTU (username, password, id). Proto v $řádek['username'] máš jeho username atd.. cyklus proběhne (vezme se první řádek z DB) a vypíše. v dalším cyklu, se vezme další řádek, dokud tam nějaký bude. Takže se mění podle záznamů v db. Řešení v [#4] tyto údaje sčítá a odděluje je čárkou do proměnné $username, $hesla, $id. A vypíše je až nakonec, proto se ti stane, že odkazy jsou nefunkční. A používej while ( $řádek = mysql_fetch_assoc( $výsledek ) ) { abys tvořil jen to pole (asociativní), které používáš ;) |
||
Lopata Profil |
#9 · Zasláno: 18. 5. 2009, 23:09:08
SwimX
To nemělo být funkční řešení, to byl pokus o naučení ho, jak nepřemazávat proměnné, proto jsem tam ani žádný odkaz nenapsal. Jen jsem chtěl, aby chápal, co jeho script dělá... :-| |
||
Časová prodleva: 15 let
|
0