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
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
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
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
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
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'];
?>
  &nbsp;&nbsp;<a href="profile.php?id=<?php
    echo $řádek['id']; ?>">Upravit uživatele</a><br>
<?php
  }
?> 

_____________________________________
SwimX
Profil
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
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á... :-|

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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