Autor | Zpráva | ||
---|---|---|---|
petrr Profil * |
ahojky uz 5 den davam do kupy login formular, udelal sem toto:
1) vytvoril databazi: Návrh databáze: CREATE TABLE `test`.`klienti` ( `id_klienta` INT NOT NULL AUTO_INCREMENT , `uziv_jmeno` VARCHAR( 10 ) NOT NULL , `uziv_heslo` VARCHAR( 10 ) NOT NULL , `prijmeni` VARCHAR( 20 ) NOT NULL , `jmeno` VARCHAR( 20 ) NOT NULL , `email` VARCHAR( 30 ) NOT NULL , PRIMARY KEY ( `id_klienta` ) ) ENGINE = MYISAM ; do tabulky jsem vlozil ilustracni udaje: INSERT INTO `test`.`klienti` (`id_klienta`, `uziv_jmeno`, `uziv_heslo`, `prijmeni`, `jmeno`, `email`) VALUES (NULL, 'karel', 'abc', 'Novák', 'Karel', 'karel@karel.cz'); 2)vytvoril index.php: <html> <body> <font size="5" face="sans-serif">Login </font> <form action="overeni.php" method="POST" name="form1"> <table cellpadding="3" cellspacing="4" border="0"> <tr> <td>Username:</td> <td><input type="text" name="username"></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="password"></td> </tr> <tr> <td><input type="submit" name="submit" value="Log in"/></td> </tr> </table> </form> </body> </html> 3) vytvoril: overeni.php <?php setcookie('txtjmeno', '', time()); setcookie('txtheslo', '', time()); $spojeni =mysql_connect("localhost", "root", ""); mysql_select_db("test"); $sql ="SELECT uziv_heslo FROM klienti WHERE uziv_jmeno='{$_REQUEST['txtjmeno']}'"; $vysledek = mysql_query($sql); if (!$vysledek){ echo "Oveření nelze použít."; exit; } if (!mysql_num_rows($vysledek)): echo "uživatel nenalezen"; exit; else: if (!mysql_result($vysledek, "uziv_heslo") != $_REQUEST['txtheslo']): echo "nesprávné heslo"; exit; else: setcookie ('txtjmeno', $_REQUEST['txtjmeno'], time()+3600); setcookie ('txtheslo', $_REQUEST['txtheslo'], time()+3600); endif; endif; ?> vysledek: Jakmile vypisu do formularu spravne uzivatelske jmeno: "karel" , heslo: "abc" vypise mi to hlasku: "uživatel nenalezen" nevite nekdo kde bude chyba? Děkuji Moderátor nightfish: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Moderátor nightfish: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou.
|
||
tiso Profil |
#2 · Zasláno: 3. 8. 2010, 16:15:43
|
||
xmark Profil |
#3 · Zasláno: 3. 8. 2010, 16:17:31
Nepsal ti tady někdo opakovaně, že máš kód vkládat jako kód?
$sql ="SELECT uziv_heslo FROM klienti WHERE uziv_jmeno='{$_REQUEST['txtjmeno']}'"; toto je nesmysl, patří tam toto: $sql ="SELECT uziv_heslo FROM klienti WHERE uziv_jmeno='".$_REQUEST['txtjmeno']."'"; |
||
petrr Profil * |
po uprave:
<?php setcookie('txtjmeno', '', time()); setcookie('txtheslo', '', time()); $spojeni =mysql_connect("localhost", "root", ""); mysql_select_db("test"); $sql ="SELECT uziv_heslo FROM klienti WHERE uziv_jmeno='".$_REQUEST['txtjmeno']."'"; $vysledek = mysql_query($sql); if (!$vysledek){ echo "Oveření nelze použít."; exit; } if (!mysql_num_rows($vysledek)): echo "uživatel nenalezen"; exit; else: if (!mysql_result($vysledek, "uziv_heslo") != $_REQUEST['txtheslo']): echo "nesprávné heslo"; exit; else: setcookie ('txtjmeno', $_REQUEST['txtjmeno'], time()+3600); setcookie ('txtheslo', $_REQUEST['txtheslo'], time()+3600); endif; endif; ?> ale pořád to vypisuje: "uživatel nenalezen" včem ještě může být chyba? Moderátor nightfish: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
tiso Profil |
#5 · Zasláno: 3. 8. 2010, 16:25:58
… <input type="text" name="username"> … <input type="password" name="password"> … |
||
petrr Profil * |
v cem je chyba v #5???
At ve vysledku do inputu vypisu cokoliv vzdy mi to vyhodi "uživatel nenalezen" čím se ještě může tato chyba dělat??? díky Moderátor nightfish: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou (pokud možno konzistentně v celém příspěvku, ne jen někde).
|
||
nightfish Profil |
#7 · Zasláno: 3. 8. 2010, 16:33:29
petrr:
Doporučuji se podívat na zvýrazněné části v [#5] a porovnat s proměnnými, které používáš v SQL dotazu a při porovnávání. |
||
petrr Profil * |
#8 · Zasláno: 3. 8. 2010, 16:41:29
opraveno, kdyz ted dam refresh a potvrdim nejake udaje vypise mi to chyby:
Warning: mysql_result() expects parameter 2 to be long, string given in C:\xampp\htdocs\tutorial\overeni.php on line 26 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\tutorial\overeni.php:26) in C:\xampp\htdocs\tutorial\overeni.php on line 30 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\tutorial\overeni.php:26) in C:\xampp\htdocs\tutorial\overeni.php on line 31 Vi nekdo co mam spatne?? dekuji |
||
panther Profil |
petrr:
„??“ !! 1. nikdy nepiš tyto příspěvky, kterými chceš na sebe upoutat pozornost. Moderátor Joker: Poznámka, příspěvek ke kterému se toto vztahovalo jsem vyhodil 2. označuj kódy, ať jsou barevně zvýrazněné. Budou se lépe číst.
3. piš s diakritikou, vyžadují ji pravidla. Na body 2 a 3 jsi upozorňován moderátory pod každým příspěvkem. |
||
nightfish Profil |
#10 · Zasláno: 3. 8. 2010, 17:06:12
petrr:
„Warning: mysql_result() expects parameter 2 to be long, string given“ Předáváš funkci mysql_result() špatné parametry. Podívej se do manuálu jak to má být správně. Protože moderátorské poznámky zdá se nečteš, napíšu ti to sem do příspěvku: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou. Pokud budeš i nadále porušovat pravidla, budeš mít problémy. |
||
petrr Profil * |
Podle manuálu je to správně obsané, jaké špatné parametry můžu vlkádat? přeposílám Vám ještě jednou kód:
<?php setcookie('txtjmeno', '', time()); setcookie('txtheslo', '', time()); $spojeni = mysql_connect("localhost", "root", ""); mysql_select_db("test"); //10 $sql ="SELECT uziv_heslo FROM klienti WHERE uziv_jmeno='".$_REQUEST['txtjmeno']."'"; $vysledek = mysql_query($sql); if (!$vysledek): echo "Oveření nelze použít."; exit; endif; //20 if (!mysql_num_rows($vysledek)): echo "uživatel nenalezen"; exit; else: if (mysql_result($vysledek, "uziv_heslo") != $_REQUEST['txtheslo']): echo "nesprávné heslo"; exit; else: setcookie ('txtjmeno', $_REQUEST['txtjmeno'], time()+3600); setcookie ('txtheslo', $_REQUEST['txtheslo'], time()+3600); endif; endif; ?> (Promiňte za gramatické chyby....) |
||
nightfish Profil |
#12 · Zasláno: 3. 8. 2010, 17:33:15
petrr:
„Podle manuálu je to správně obsané, jaké špatné parametry můžu vlkádat?“ Jaký je podle manuálu význam jednotlivých parametrů? |
||
petrr Profil * |
#13 · Zasláno: 3. 8. 2010, 17:35:01
Když zadám správnou kombinaci hesla a jména vypíše mi to toto:
Warning: mysql_result() expects parameter 2 to be long, string given in C:\xampp\htdocs\tutorial\overeni.php on line 28 nesprávné heslo Když zadám správné uživatelské jméno bez hesla vypíše mi to toto: Warning: mysql_result() expects parameter 2 to be long, string given in C:\xampp\htdocs\tutorial\overeni.php on line 28 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\tutorial\overeni.php:28) in C:\xampp\htdocs\tutorial\overeni.php on line 33 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\tutorial\overeni.php:28) in C:\xampp\htdocs\tutorial\overeni.php on line 34 Nevím si vůbec rady, co tam může být špatně? |
||
petrr Profil * |
#14 · Zasláno: 3. 8. 2010, 17:39:55
petrr>nightfish #12
Jak to myslíte význam jednotlivých parametrů? txtjmeno=jméno uživatele, txtheslo=heslo uživatele. Děkuji |
||
shaggy Profil |
#15 · Zasláno: 3. 8. 2010, 17:40:30
petrr:
„Warning: mysql_result() expects parameter 2 to be long, string given“ vs (riadok 28) „if (mysql_result($vysledek, "uziv_heslo")“ Ak nevieš čítať a/alebo po anglicky, tak sa to budeš musieť doučiť. Bez toho sa v programovaní ďalej nepohneš. Ešte aj manuál jasne hovorí, že druhý parameter má byť integer a ty tam posielaš string. |
||
nightfish Profil |
#16 · Zasláno: 3. 8. 2010, 17:59:50
petrr:
„Jak to myslíte význam jednotlivých parametrů?“ Funkci mysql_result můžeš poslat dva až tři parametry. Zajímá mě, jaký je význam toho kterého parametru. Třeba první parametr je odkaz na připojení k databázi... |
||
AM_ Profil |
#17 · Zasláno: 3. 8. 2010, 18:06:41
[#14] petrr
a kde se tyto proměnní v $_POST berou? ve tvém formuláři jsou pouze pole username a password. „Podle manuálu je to správně obsané“ programování se nedá učit opisováním, ani obisováním, musíš pochopit princip. Tím, že opíšeš příklad z učebnice a ještě zřejmě špatně, se toho moc nenaučíš. |
||
petrr Profil * |
#18 · Zasláno: 3. 8. 2010, 19:50:15
ok, beru na vedomi ucim se priklady i teorii, všichni jste patrně zkušenější, proto prosím někoho aby mi poradil co jak přepsat aby to fungovalo? Děkuji
|
||
AM_ Profil |
#19 · Zasláno: 3. 8. 2010, 20:04:57
a k čemu bude, když ti to řekneme? navedli jsme tě velice přesně, tak na to zkus přijít sám, nebo se nad problémem zamysli a polož dotaz tak, aby bylo vidět, že víš, o čem je řeč. Koneckonců mysql_result() má na php.net jasně popsané, jak se parametry zadávají, pokud umíš anglicky, měl bys zjistit, kde je chyba.
|
||
Alphard Profil |
#20 · Zasláno: 3. 8. 2010, 20:11:07
petrr:
Předpokládáte, že vám databáze vrátí jediný záznam, tj. jediný řádek. Manuál vám říká, že druhý parametr určituje číslo řádku a začíná se číslovat od 0. Zároveň se očekává integer, což je číslo. Např. 0. Je opravdu tak těžké domyslet, co by tam mohlo být? |
||
petrr Profil * |
#21 · Zasláno: 3. 8. 2010, 20:27:59
Chápu že během vypisovani chyb to vypisuje čísla špatných řádků i to že by to měl byt integer(číselná hodnota místo textové), ale nevim jak to přepsat?
|
||
Davex Profil |
#22 · Zasláno: 3. 8. 2010, 20:43:04
Ano, asi nevíš jak přepsat řetězec na číslo.
Řetězec vypadá takto: "uziv_heslo"
Číslo vypadá takto: 0
Jak to tedy přepsat? |
||
petrr Profil * |
#23 · Zasláno: 3. 8. 2010, 20:46:42
takže to mám přepsat takto:
if (mysql_result($vysledek, 0) != $_REQUEST['txtheslo']) ? |
||
petrr Profil * |
#24 · Zasláno: 3. 8. 2010, 20:58:41
když to zapíši takto:
if (mysql_result($vysledek, 0)) pak mi to i po úspěšně vypsaném jménu a heslu vypsuje hlášku: "nesprávné heslo" jak to tedy jinak zapsat? |
||
denCo Profil |
#25 · Zasláno: 3. 8. 2010, 21:06:49 · Upravil/a: denCo
nieje toto náhodou zle?
setcookie('txtjmeno', '', time()); pretože time() vráti momentálny čas, takže cookies sa hneď aj vymažú nie? setcookie('txtjmeno', '', time() + 3600); //cookie na jednu hodinu EDIT// Ops, nevšimol som si deklaráciu, čo má neskôr v kóde, ale aj tak nechápem to nastavovanie cookies čo je na začiatku kódu |
||
petrr Profil * |
#26 · Zasláno: 3. 8. 2010, 21:15:20
nene ten time nepomaha - porad to vypisuje "nesprávné heslo", nemuzu prijit na tu chybu?
|
||
Alphard Profil |
#27 · Zasláno: 3. 8. 2010, 21:17:10 · Upravil/a: Alphard
[#24] petrr
To je správně (doplňuji: pokud tam není více stejných uživatelských jmen). Už se neukazují ani chyby. Zkusil jste si vypsat mysql_result($vysledek, 0) a $_REQUEST['txtheslo'] ?
|
||
Nox Profil |
#28 · Zasláno: 3. 8. 2010, 21:17:36 · Upravil/a: Nox
tak si vypiš co je v obou proměnných před ifem (použij třeba var_dump()) ...zase pozdě...
|
||
AM_ Profil |
#29 · Zasláno: 3. 8. 2010, 21:19:01
Davex:
> když to zapíši takto: > > > if (mysql_result($vysledek, 0)) kdo řekl, že tam má být zrovna nula? a co třetí nepovinný parametr? co vlastně chceš, aby ta funkce vrátila? z manuálu: string mysql_result ( resource $result , int $row [, mixed $field = 0 ] ) |
||
petrr Profil * |
když vytvořím kód pomocí #27 takto:
setcookie('txtjmeno', '', time() + 3600); setcookie('txtheslo', '', time() + 3600); $spojeni = mysql_connect("localhost", "root", ""); mysql_select_db("test"); //10 $sql ="SELECT uziv_heslo FROM klienti WHERE uziv_jmeno='".$_REQUEST['txtjmeno']."'"; $vysledek = mysql_query($sql); $_REQUEST['txtheslo']; if (!$vysledek): echo "Oveření nelze použít."; exit; endif; //20 if (!mysql_num_rows($vysledek)): echo "uživatel nenalezen"; exit; else: if (mysql_result($vysledek, 0)): echo "nesprávné heslo"; exit; else: setcookie ('txtjmeno', $_REQUEST['txtjmeno'], time()+900); setcookie ('txtheslo', $_REQUEST['txtheslo'], time()+900); endif; endif; ?> pořád to vypisuje při správné kombinaci hesla a jmena "nesprávné heslo", co dále? Děkuji |
||
Téma pokračuje na další straně.
|
0