Autor Zpráva
potom
Profil
Prosím neškrťte mě, prepared statements jsem začal používat nově.....

$sql = "SELECT * FROM user WHERE `username`=? AND `password` = ?";
$stmt = $conn->prepare($sql); 
$stmt->bind_param("ss", $post_username, crypt($post_password));
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
 $realne_jmeno = $row['name'];
 $opravneni = $row['rights'];
}

To funguje. Nedaří se mi kód přepracovat, abych měl výstup v případě, že bude prázdný výsledek dotazu, snažil jsem se:

$sql = "SELECT * FROM user WHERE `username`=? AND `password` = ?";
$stmt = $conn->prepare($sql); 
$stmt->bind_param("ss", $post_username, crypt($post_password));
$stmt->execute();
$result = $stmt->get_result();
$stmt->store_result();
if  ($stmt->num_rows == 0){
while ($row = $result->fetch_assoc()) {
 $realne_jmeno = $row['name'];
 $opravneni = $row['rights'];
}}
else echo "Nula výsledků....";

ale nefunguje...

A nemám ten kód zbytečně složitý? Nedá se to zjednodušit?

Díky za pomoc.
Kajman
Profil
Načítání dat máte dělat, pokud tam je více řádků než 0, ne když je řádků 0.

$stmt->num_rows > 0
potom
Profil
Díky, moje blbost, ale pořád nefunguje...


Aktualizovaný kód:

$sql = "SELECT * FROM user WHERE `username`=? AND `password` = ? AND deactive = 0 ";
$stmt = $conn->prepare($sql); $stmt->bind_param("ss", $post_username, crypt($post_password));
$stmt->execute(); 

$result = $stmt->get_result();
$stmt->store_result();
if  ($stmt->num_rows > 0){
while ($row = $result->fetch_assoc()) {

 $_SESSION[user] = new User;
$_SESSION[user]->shop = $row[shop];
$_SESSION[user]->level = $row[level]; 
$_SESSION[user]->name = $row[name];
$_SESSION[user]->id = $row[id];


echo $_SESSION[user]->name;
}}
else echo "NULA VÝSLEDKŮ";


Výstup je vždy to echo "NULA VÝSLEDKŮ", ať se zadává, co se zadává.
anonym_
Profil *
potom:
Tak asi neexistuje shoda v hesle. Kde se berou proměnné post_*?

Btw. “deactive” :-)
potom
Profil
NN. Tento dotaz normálně funguje:

//přihlášení uživatele
$sql = "SELECT * FROM user WHERE `username`=? AND `password` = ? AND `deactive` = 0 LIMIT 1 ";
$stmt = $conn->prepare($sql); $stmt->bind_param("ss", $post_username, crypt($post_password);
$stmt->execute(); 
$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {

$_SESSION[user] = new User;
$_SESSION[user]->shop = $row[shop];
$_SESSION[user]->level = $row[level]; 
$_SESSION[user]->name = $row[name];
$_SESSION[user]->id = $row[id];
echo $_SESSION[user]->name;

}


Když chci ošetřit nula výsledků, tak to nefunguje:


//přihlášení uživatele
$sql = "SELECT * FROM user WHERE `username`=? AND `password` = ? AND `deactive` = 0 LIMIT 1 ";
$stmt = $conn->prepare($sql); $stmt->bind_param("ss", $post_username, crypt($post_password));
$stmt->execute(); 
$result = $stmt->get_result();
$stmt->store_result();
if  ($stmt->num_rows > 0){
while ($row = $result->fetch_assoc()) {

$_SESSION[user] = new User;
$_SESSION[user]->shop = $row[shop];
$_SESSION[user]->level = $row[level]; 
$_SESSION[user]->name = $row[name];
$_SESSION[user]->id = $row[id];
echo $_SESSION[user]->name;

}}

else echo "NULA VÝSLEDKŮ";
Kajman
Profil
Nepomůže dát řádek 5 až před řádek 8?
potom
Profil
Zkoušel jsem, nefunguje...
Kajman
Profil
Tak můžete např. jednoduše místo while použít if, když Vás zajímá jen první řádek a k němu dát else.
Serg
Profil
Metody store_result() a get_result() se mezi sebou koušou.

Když se nejdřív zavolá store_result(), tak v $stmt->num_rows bude správný počet řádků, ale get_result() potom vrátí mysqli_result objekt s prázdným polem.
Naopak, když se nejdřív zavolá get_result(), tak potom nebude fungovat $stmt->num_rows.

Je potřeba vybrat jednu z těch dvou metod, a podle toho přizpůsobit procházení vytažených dat z databáze.

Btw, řádky se SESSION (10 - 15) by měly házet milion Notice chyb. To je tak těžký dát ty klíče do úvozovek? (jakože pochybuju že je pro každý klíč vytvořená konstanta)

Jedna z možností jak to řešit:
//přihlášení uživatele
$sql = "SELECT * FROM user WHERE `username`=? AND `password` = ? AND `deactive` = 0 LIMIT 1 ";
$stmt = $conn->prepare($sql); $stmt->bind_param("ss", $post_username, crypt($post_password));
$stmt->execute(); 
$result = $stmt->get_result();
//$stmt->store_result(); - tohle pryč
if  ($result->num_rows > 0){
while ($row = $result->fetch_assoc()) {
 
$_SESSION['user'] = new User;
$_SESSION['user']->shop = $row['shop'];
$_SESSION['user']->level = $row['level']; 
$_SESSION['user']->name = $row['name'];
$_SESSION['user']->id = $row['id'];
echo $_SESSION['user']->name;
 
}}
 
else echo "NULA VÝSLEDKŮ";

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:

0