#1 2012-06-04 17:37:29

FRychnovsky
Člen
Registrován: 2011-11-13
Příspěvky: 14

Re: Mysqli - prepared statememt

Dobrý den,
vytvářím si přihlašování a mám následující kod:

$db = new mysqli('localhost', 'username', 'password', 'database');
$query = $db->stmt_init();
$query->prepare("SELECT id FROM users WHERE username= ? AND password=?");
$query->bind_param('ss', $_POST["username"], md5($_POST["password"]));
$query->bind_result($userid);
$query->execute();
$query->fetch();
echo $userid;

Což by vypsat id uzivatele: 1, ale vypíšeto 0;
Přitom ale ten samý dotaz přes phphmyadmin:
sql.jpg
Mohl byste mi někdo prosím poradit, co mám špatně?
$_POST["username"] i $_POST["password"] mají hodnotu "test".
Předem děkuji Frychnovsky

Offline

#2 2012-06-05 13:36:48

kksmirice
Endora rádce
Místo: Vrchovnice
Registrován: 2011-11-20
Příspěvky: 6,023
Web

Re: Mysqli - prepared statememt

Zkusil bych vymazat mezeru v dotazu

$query->prepare("SELECT id FROM users WHERE username=? AND password=?");

Nejprve se zeptám, jak funkci voláte? Skriptem pomocí formuláře?
- prověřte si názvy vstupních proměnných

FRychnovsky napsal:

Což by vypsat id uzivatele: 1, ale vypíšeto 0;

Vypíše 0, protože nic nebylo nalezeno - žádná shoda.

Jako druhou připomínku je bezpečnost!

Zařaďte do svého kódu také

$username = $query->real_escape_string($_POST["username"]);
$password = $query->real_escape_string($_POST["password"]);

$query->bind_param('ss', $username, md5($password));

1. Murphyho zákon:
Na počátku nebylo nic. I to se pokazilo!

stránky: CMS test
kontakt - instalace systémů, MySQL, FTP přístup, ...
Instalační balíky vybraných CSM

Problémy spojené s provozem služeb Endora, řešte na tomto fóru.

Offline

#3 2012-06-05 16:58:46

FRychnovsky
Člen
Registrován: 2011-11-13
Příspěvky: 14

Re: Mysqli - prepared statememt

bartama: zatím potřebuju jenom id uživatele,možná později si budu brát i jiné údaje

kksmirice: mezeru jsem dal pryč stále ale id je 0 sad
názvy proměnných i jejich hodnoty jsem kontroloval - OK
viz výpis print_r($_POST):

Array
(
    [username] => test
    [password] => test
)

$query je proměnná třídy mysqli_stmt, která se o ošetření proměnných stará sama

Offline

#4 2012-06-05 17:12:42

kksmirice
Endora rádce
Místo: Vrchovnice
Registrován: 2011-11-20
Příspěvky: 6,023
Web

Re: Mysqli - prepared statememt

Nejsem zběhlý v mysqli. Prozatím používám mysql  wink

Otestujte toto:

$db = new mysqli('localhost', 'username', 'password', 'database');
$query = $db->stmt_init();
$query->prepare("SELECT id FROM users WHERE username=? AND password=?");
$query->bind_param('ss', $_POST["username"], md5($_POST["password"]));

$query->execute();

$query->bind_result($userid);

$query->fetch();
echo $userid;

Dle manuálu:
Note that all columns must be bound after mysqli_stmt_execute() and prior to calling mysqli_stmt_fetch().

EDIT:
kde možno testovat, abych nemusel vymýšlet u sebe?


1. Murphyho zákon:
Na počátku nebylo nic. I to se pokazilo!

stránky: CMS test
kontakt - instalace systémů, MySQL, FTP přístup, ...
Instalační balíky vybraných CSM

Problémy spojené s provozem služeb Endora, řešte na tomto fóru.

Offline

#5 2012-06-05 17:15:28

FRychnovsky
Člen
Registrován: 2011-11-13
Příspěvky: 14

Re: Mysqli - prepared statememt

Tak jsem to zkusil  a pořád id je 0 sad

Offline

#6 2012-06-05 17:19:15

kksmirice
Endora rádce
Místo: Vrchovnice
Registrován: 2011-11-20
Příspěvky: 6,023
Web

Re: Mysqli - prepared statememt

kde možno testovat, abych nemusel vymýšlet u sebe?


1. Murphyho zákon:
Na počátku nebylo nic. I to se pokazilo!

stránky: CMS test
kontakt - instalace systémů, MySQL, FTP přístup, ...
Instalační balíky vybraných CSM

Problémy spojené s provozem služeb Endora, řešte na tomto fóru.

Offline

#7 2012-06-05 17:22:09

FRychnovsky
Člen
Registrován: 2011-11-13
Příspěvky: 14

Re: Mysqli - prepared statememt

Offline

#8 2012-06-05 17:37:48

kksmirice
Endora rádce
Místo: Vrchovnice
Registrován: 2011-11-20
Příspěvky: 6,023
Web

Re: Mysqli - prepared statememt

Zkuste mi poslat zdroják na mejla login(at)kksmirice.hys.cz

Divná diakritika....
Nevylučuji profesionální slepotu - znám to  lol


1. Murphyho zákon:
Na počátku nebylo nic. I to se pokazilo!

stránky: CMS test
kontakt - instalace systémů, MySQL, FTP přístup, ...
Instalační balíky vybraných CSM

Problémy spojené s provozem služeb Endora, řešte na tomto fóru.

Offline

#9 2012-06-05 17:57:14

kksmirice
Endora rádce
Místo: Vrchovnice
Registrován: 2011-11-20
Příspěvky: 6,023
Web

Re: Mysqli - prepared statememt

Zkuste opravit:
Heslo: <input type="password" name="password"value="">
na
Heslo: <input type="password" name="password" value="">

chybí mezera a heslo nemusí být předáno...


Pro HTML 5 doporučuji striktně používat NET zápis u nepárových prvků.


1. Murphyho zákon:
Na počátku nebylo nic. I to se pokazilo!

stránky: CMS test
kontakt - instalace systémů, MySQL, FTP přístup, ...
Instalační balíky vybraných CSM

Problémy spojené s provozem služeb Endora, řešte na tomto fóru.

Offline

Zápatí

Založeno na FluxBB | CZ a SK