| Autor | Zpráva | ||
|---|---|---|---|
| potom Profil |
#1 · Zasláno: 29. 10. 2020, 08:29:00
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 |
#2 · Zasláno: 29. 10. 2020, 08:52:45
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 * |
#4 · Zasláno: 29. 10. 2020, 09:56:01
potom:
Tak asi neexistuje shoda v hesle. Kde se berou proměnné post_*? Btw. “deactive” :-) |
||
| potom Profil |
#5 · Zasláno: 29. 10. 2020, 10:06:05
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 |
#6 · Zasláno: 29. 10. 2020, 10:09:04
Nepomůže dát řádek 5 až před řádek 8?
|
||
| potom Profil |
#7 · Zasláno: 29. 10. 2020, 11:01:33
Zkoušel jsem, nefunguje...
|
||
| Kajman Profil |
#8 · Zasláno: 29. 10. 2020, 13:42:25
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Ů"; |
||
|
Časová prodleva: 6 let
|
|||
0