Autor | Zpráva | ||
---|---|---|---|
Babemeta Profil * |
#1 · Zasláno: 14. 9. 2010, 18:50:41
Zdravim,
mám jenom kratký dotaz: Začal jsem teď dělat databáze a v databázi mám uloženou tabulku ve které jsou řádky jmeno a heslo s prozatimními daty pokus a pokus. Pak mám přihlašovací formulář, kterzý zpracovává data od uživatele: $jmeno = $_POST['jmeno']; $heslo = $_POST['heslo']; No a teď je problém v tom, že jsem si vypsal data z databáze do proměnné a chtěl jsem je porovnat s proměnnou z formuláře. Problém je, že se mi sice nevypisuje žádná chyba, ale pořád mi to píše, že data nejsou shodná. Kontroloval jsem var_dumpem data z formuláře a ty jsou v pořádku: $jmeno_dat = mysql_query('SELECT Jmeno FROM Uzivatele',$id_spojeni); if (!$jmeno_dat) die('Nepodařilo se nám poslat SQL dotaz do databáze.'); $heslo_dat = mysql_query('SELECT Heslo FROM Uzivatele',$id_spojeni); if (!$heslo_dat) die('Nepodařilo se nám poslat SQL dotaz do databáze.'); if ($jmeno == $jmeno_dat && $heslo == $heslo_dat) echo "Přihlášení proběhlo úspěšně"; else die ("Zadali jste neplatné údaje"); Díky moc |
||
BuGeR Profil |
#2 · Zasláno: 14. 9. 2010, 19:27:25 · Upravil/a: BuGeR
Zkus použít array :)
$jmeno_dat = mysql_fetch_array(mysql_query('SELECT Jmeno FROM Uzivatele',$id_spojeni)); if (!$jmeno_dat["Jmeno"]) die('Nepodařilo se nám poslat SQL dotaz do databáze.'); $heslo_dat = mysql_fetch_array(mysql_query('SELECT Heslo FROM Uzivatele',$id_spojeni)); if (!$heslo_dat["Heslo"]) die('Nepodařilo se nám poslat SQL dotaz do databáze.'); if ($jmeno == $jmeno_dat["Jmeno"] && $heslo["Heslo"] == $heslo_dat) echo "Přihlášení proběhlo úspěšně"; else die ("Zadali jste neplatné údaje"); |
||
Alphard Profil |
#3 · Zasláno: 14. 9. 2010, 19:34:42
|
||
panther Profil |
#4 · Zasláno: 14. 9. 2010, 19:37:01
Babemeta:
smím se zeptat, proč potřebuješ na přihlášení uživatele dva dotazy? Kdybys chtěl vytáhnout ještě adresu, telefon a e-mail, dodal bys sadu dalších 3 dotazů? |
||
Keeehi Profil |
#5 · Zasláno: 14. 9. 2010, 19:41:19 · Upravil/a: Keeehi
Babemeta:
Musíš potom použít mysql_fetch_* (např. mysql_fetch_array )
Navíc tvůj dotaz ti vrátí všechny jména, ale postupně. Při prvním zavolání funkce mysql_fetch_array() se ti vrátí pole ve kterém bude první jméno z výsledku, při druhém zavolání se vrátí druhé jméno, atd.. Vlastně by to chtělo celé předělat. Kontrola přihlášení by mohla vypadat asi takto: $vysledek=mysql_query("SELECT 1 FROM Uzivatele WHERE Jmeno='$jmeno' AND Heslo='$heslo'",$id_spojeni); if(mysql_num_rows($vysledek)==1) echo "Přihlášení proběhlo úspěšně"; else die ("Zadali jste neplatné údaje"); Ovšem je to udělané jinak, než jsi to myslel. Takový modelový příklad: Vypsání všech jmen a hesel do tabulky echo "<table>"; $vysledek=mysql_query("SELECT Jmeno,Heslo FROM Uzivatele",$id_spojeni); while(list($jmeno_db,$heslo_db)=mysql_fetch_row($vysledek)){ echo "<tr><td>$jmeno_db</td><td>$heslo_db</td></tr>"; } echo "</table>"; |
||
Babemeta Profil * |
#6 · Zasláno: 14. 9. 2010, 19:48:15
BuGeR: bohužel pořád ten samý problém :-(
Alphard: Jak jsem psal databázi jsem začal dělat teprve dneska a tohle je moje první práce s ní takže se jenom učím připojovat se číst z ní atd. S druhým uživatelem jsem si toho vědom. Díky za odkaz. |
||
Babemeta Profil * |
#7 · Zasláno: 14. 9. 2010, 19:58:35
Keehi: Díky moc. Zrovna jsem si četl odkaz o funkci WHERE, když jsem si všimnul tvýho příspěvku. Už jsem to pochopil jen mi to vypisuje varování:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/c/castle-lord/prihlaseni.php on line 17 a hned potom zadali jste neplatné údaje, i když jsem zadal platné. Ještě jsem se chtěl zeptat k zapamatování přihlášení je vhodný použít cookies, který budu na každý stránce znovu kontrolovat a budou mít platnost třeba půl hodiny. Nebo je lepší něco jinýho? Díky moc |
||
Babemeta Profil |
#8 · Zasláno: 14. 9. 2010, 20:02:13
Už jsem se konečně zaregistroval takže nebudu muset psát furt nový příspěvky.
Ještě Keehi: takže chápu to dobře, že jakmile vytáhnu nějaký data z databáze automaticky se mi uloží do proměnný $nazev_db ? Díky |
||
Keeehi Profil |
#9 · Zasláno: 14. 9. 2010, 20:55:59
Babemeta:
„Warning: …“ Tipoval bych to na chybu v dotazu. 1) co se vypíše, pokud před ten dotaz napíšeš: echo "SELECT 1 FROM Uzivatele WHERE Jmeno='$jmeno' AND Heslo='$heslo'"; ?
2) co se vypíše, pokud za ten dotaz napíšeš: echo mysql_errno($link) . ": " . mysql_error($link). "\n";
3) určitě se tabulka jmenuje Uzivatele? Není to třeba uzivatele, nebo UZIVATELE (stejně tak sloupce)? „takže chápu to dobře, že jakmile vytáhnu nějaký data z databáze automaticky se mi uloží do proměnný $nazev_db ?“ Bohužel to chápeš špatně. mysql_query pošle dotaz na databázi a vrátí jakýsi "ukazatel" na ten konkrétní dotaz. potom, když zavoláš funkci mysql_fetch_assoc a jako parametr ji předáš tento ukazatel, tak ti vrátí pole. Toto pole vypadá takto: Array( ["jmeno_prvniho_sloupce"]=>"hodnota prvního sloupce" ["jmeno_druheho_sloupce"]=>"hodnota druheho sloupce" ["jmeno_tretiho_sloupce"]=>"hodnota tretiho sloupce" … ) pokud toto pole bude uložené do proměnné pole ( $pole=mysql_fetch_assoc($vysledek) ) pak hodnota druhého sloupce bude přístupná takto: $pole["jmeno_druheho_sloupce"];
Toto pole je však seznamem hodnot prvního řádku výsledku. Pokud bych chtěl druhý řádek, musím funkci mysql_fetch_assoc provést ještě jednou. Kdybych chtěl třetí řádek, musím ji provést potřetí. Takže můj výpis všech jmen a hesel do tabulky by mohl vypadat takto: echo "<table>"; $vysledek=mysql_query("SELECT Jmeno,Heslo FROM Uzivatele",$id_spojeni); for($i=0;$i<mysql_num_rows($vysledek);$i++){ $pole = mysql_fetch_row($vysledek); echo "<tr><td>".$pole["Jmeno"]."</td><td>".$pole["Heslo"]."</td></tr>"; } echo "</table>"; Toto je snad pochopitelné. Mně se to však nezdá elegantní. Proto jsem to zapsal tak, jak jsem to zapsal. Líbí se mi to tak víc. Pokusím se ti to vysvětlit, jak to funguje. nejdůležitější je tento řádek: while(list($jmeno_db,$heslo_db)=mysql_fetch_row($vysledek)){ Tak a ještě to přiřazení list($jmeno_db,$heslo_db)=mysql_fetch_row($vysledek) funkce list funguje takto: Přiřazené pole "rozseká" do proměnných předaných jako parametry. Příklad:
$pole[0]="jabko"; $pole[1]="hrušky"; $pole[2]="švestky"; $list($ovoce1,$ovoce2,$ovoce3)=$pole; echo "Mám rád ovoce, nejraději mám: $ovoce1, $ovoce2, $ovoce3."; //výsledek je tento: Mám rád ovoce, nejraději mám: jabko, hrušky, švestky. |
||
Babemeta Profil |
#10 · Zasláno: 14. 9. 2010, 21:20:19
Díky, že ses tak rozepsal. Základní problém byl v tom, že jsem nikde neviděl definovaný ty proměnný, protoože ještě nemám úplně zažitý rozdíl mezi = a ==. Takhle už to chápu díky.
Když jsem tam dopsal (k tomu přihlašování) to co jsi psal: $vysledek=mysql_query("SELECT 1 FROM Uzivatele WHERE Jmeno='$jmeno' AND Heslo='$heslo'",$id_spojeni); echo "SELECT 1 FROM Uzivatele WHERE Jmeno='$jmeno' AND Heslo='$heslo'"; if(mysql_num_rows($vysledek)==1) echo "Přihlášení proběhlo úspěšně"; else die ("Zadali jste neplatné údaje"); echo mysql_errno($link) . ": " . mysql_error($link). "n"; Vypisuje se tohle: SELECT 1 FROM Uzivatele WHERE Jmeno='pokus' AND Heslo='pokus' Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/c/castle-lord/prihlaseni.php on line 18 Zadali jste neplatné údaje Pokud chceš můžeš se na ten skript podívat tady. Jinak už jsem si na jeden dotaz odpověděl sám: Ne cookies, sessions |
||
panther Profil |
#11 · Zasláno: 14. 9. 2010, 21:22:40 · Upravil/a: panther
Babemeta:
vypiš si mysql_error, máš chybu v dotazu. Základní věc, omílá se tu pořád dokola. EDIT: je tam, ale na špatném místě, kde jsem ho nehledal. |
||
Keeehi Profil |
#12 · Zasláno: 14. 9. 2010, 21:34:58
takto:
$vysledek=mysql_query("SELECT 1 FROM Uzivatele WHERE Jmeno='$jmeno' AND Heslo='$heslo'",$id_spojeni); echo mysql_errno($link) . ": " . mysql_error($link). "n"; |
||
Babemeta Profil |
#13 · Zasláno: 15. 9. 2010, 17:12:03 · Upravil/a: Babemeta
Díky. Tak se mi to vypsalo, že proměnný heslo a jmeno nejsou definovaný...Zkusil jsem si ještě vypsat var_dumpem, ale NULL NULL. Nechápu teda v čem je problém...
Vypisuje to přesně tohle Odesílací formulář: <h3>Přihlášení:</h3> <form action="prihlaseni.php" method="post"> Jméno: <input type="text" name="jmeno"><br> Heslo: <input type="password" name="heslo"><br> <input type="submit" value="Přihlásit se"> A prihlaseni.php: <?php error_reporting(E_ALL); $jmeno = $_POST['jmeno']; $heslo = $_POST['heslo']; var_dump($jmeno); var_dump($heslo); if($jmeno == "" || $heslo == "") die("Musíte vyplnit všechny položky formuláře!"); $id_spojeni = mysql_connect('mysql.webzdarma.cz','castlelord','heslo'); if (!$id_spojeni) die('Spojení s MySQL databází se nezdařilo.'); $vysledek=mysql_query("SELECT 1 FROM Uzivatele WHERE Jmeno='$jmeno' AND Heslo='$heslo'",$id_spojeni); echo mysql_errno($link) . ": " . mysql_error($link). "n"; echo "SELECT 1 FROM Uzivatele WHERE Jmeno='$jmeno' AND Heslo='$heslo'"; if(mysql_num_rows($vysledek)==1) echo "Přihlášení proběhlo úspěšně"; else die ("Zadali jste neplatné údaje"); setcookie('prihlaseni', '$prihlaseni', time()+1800); mysql_close($id_spojeni); ?> (heslo je v kódu uvedeno správně...) |
||
Keeehi Profil |
#14 · Zasláno: 15. 9. 2010, 17:57:49 · Upravil/a: Keeehi
echo mysql_errno($link) . ": " . mysql_error($link). "n"; echo mysql_errno($id_spojeni) . ": " . mysql_error($id_spojeni). "n"; To NULL NULL je tam jenom když se na stránku vleze přímo, když se na ni přijde z toho formuláře, tak už to null null není. |
||
Babemeta Profil |
#15 · Zasláno: 15. 9. 2010, 18:19:55 · Upravil/a: Babemeta
Pardon toho jsem si nevšiml. Upravil jsem to a pak mi to vypisovalo no database selected tak jsem kód upravil takto:
$id_spojeni = mysql_connect('mysql.webzdarma.cz','castlelord','heslo'); if (!$id_spojeni) die('Spojení s MySQL databází se nezdařilo.'); mysql_select_db ('castlelord','$id_spojeni'); $vysledek=mysql_query("SELECT 1 FROM Uzivatele WHERE Jmeno='$jmeno' AND Heslo='$heslo'",$id_spojeni); echo mysql_errno($id_spojeni) . ": " . mysql_error($id_spojeni). "n"; Bohužel teď to vypisuje toto: Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /3w/wz.cz/c/castle-lord/prihlaseni.php on line 14 1046: No database selectedn Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/c/castle-lord/prihlaseni.php on line 19 Zadali jste neplatné údaje Teď zkoušim udělat registraci a vypisuje mi to opět "no database selected" a opět, že mysql_select_db není validní mysql link nebo co. Viz Odkaz |
||
Keeehi Profil |
#16 · Zasláno: 15. 9. 2010, 18:22:20 · Upravil/a: Keeehi
Babemeta:
1) smaž si z diskuse přihlašovací údaje k databázi 2) napiš toto: mysql_select_db ('castlelord','$id_spojeni'); mysql_select_db ('castlelord',$id_spojeni); A aby jsi do příště věděla proč, přečit si o uvozovkách. |
||
Babemeta Profil |
#17 · Zasláno: 15. 9. 2010, 18:27:21
Díky moc. Teď už funguje jak má i registrace. Díky moc.
|
||
Časová prodleva: 14 let
|
0