Autor | Zpráva | ||
---|---|---|---|
gygabyte Profil * |
#1 · Zasláno: 21. 2. 2009, 17:25:51
Mám kód
<?php if($ok) { mysql_connect("mysql.ic.cz", "ic_gygabyte", "heslooo"); mysql_select_db("klienti"); $usr_name = $_POST['usr_name']; $usr_passw = $_POST['usr_passw']; $dotaz = 'SELECT * FROM klienti WHERE user="$usr_name" AND password="$usr_passw"'; $result=mysql_query($dotaz); $pocet=mysql_num_rows($result); if($pocet==1) { echo "seš tam!"; $login_ok="1"; session_register("login_ok");} else echo "špatné jméno nebo heslo"; ?> <?php } ?> <form action="<?php echo $PHP_SELF ?>" method="POST"> nick<input type="text" name="usr_name"><br> heslo<input type="password" name="usr_passw"><br> <input type="submit" name="ok" value="Login!"> </form> když kliknu na login tak mi vyskočí chyba Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/free/ic.cz/g/gygabyte/root/www/index.php on line 9 Co mum dělat? |
||
yFang Profil |
#2 · Zasláno: 21. 2. 2009, 17:30:11
gygabyte
Chyba je v sql dotazu, konkrétně v tom, že tam máš střdníky. Tím pádem se nevyhledává uživatel, který odpovídá hodnotě proměnné $usr_name, ale uživatel jehož jméno je $usr_name. Prohoď v tom uvozvky a apostrofy. $dotaz = "SELECT * FROM klienti WHERE user='$usr_name' AND password='$usr_passw'"; A jen tak mimochodem, hesla v databázi bych ti doporučil kódovat. |
||
gygabyte Profil * |
#3 · Zasláno: 21. 2. 2009, 17:32:58
Udělal jsem to ale pořád stejná chyba (Odkaz)
btw: šifrovat budu, ale až mi to bude fungovat :) |
||
Joker Profil |
#4 · Zasláno: 21. 2. 2009, 17:38:12
gygabyte
Jak vypadá hodnota $dotaz? Co vypíše mysql_error? Otázky nesouvisející s problémem: - Proč se v databázi dělá "SELECT *...", když se pak žádný ze sloupců záznamu nikde nepoužívá? Proč se nevyselektuje rovnou ten počet (který se pak zjišťuje přes num_rows)? - Posílat data získaná od uživatele přímo do databáze je docela odvaha, s tímhle skriptem bych se myslím dokázal přihlásit na libovolného existujícího uživatele: do políčka pro jméno zadám jeho jméno, následované uvozovkou a dvěma pomlčkami. |
||
gygabyte Profil * |
#5 · Zasláno: 21. 2. 2009, 17:39:33
$dotaz
$dotaz = "SELECT * FROM klienti WHERE user='$usr_name' AND password='$usr_passw'"; |
||
Joker Profil |
#6 · Zasláno: 21. 2. 2009, 17:46:23
gygabyte
Jo, ale jak vypadá výsledný dotaz, který se posílá do databáze? Nechte si ho vypsat. |
||
gygabyte Profil * |
#7 · Zasláno: 21. 2. 2009, 17:50:32
Jak si ho mám nechat vypsat?
(omlouvám se za trapné dotazy ale jsem začátečník...) |
||
yFang Profil |
#8 · Zasláno: 21. 2. 2009, 17:51:06
gygabyte
Nebo si přidej za mysql_query - echo mysql_error(); což ti vypíše chybu v tom dotazu. A pak bys měl ještě vylepšit zabezpečení, takhle je to ideální pro sql injection... |
||
gygabyte Profil * |
#9 · Zasláno: 21. 2. 2009, 18:07:25
Takže nikdo neví kde je chyba? ... :(
|
||
Alphard Profil |
#10 · Zasláno: 21. 2. 2009, 18:34:29 · Upravil/a: Alphard
ignorujete rady
změňte $result=mysql_query($dotaz); na $result=mysql_query($dotaz); if(!$result) echo "<code>$dotaz</code><br>".mysql_error(); |
||
gygabyte Profil * |
#11 · Zasláno: 22. 2. 2009, 09:56:26
Vypíše mi to
No database selected |
||
panther Profil |
#12 · Zasláno: 22. 2. 2009, 10:02:44
gygabyte
„Vypíše mi to No database selected“ tak to vidíš. Nemáš vybránu databázi :-) Existuje databáze „klienti“? |
||
gygabyte Profil * |
#13 · Zasláno: 22. 2. 2009, 10:05:01
Ano existuje....
|
||
gygabyte Profil * |
#14 · Zasláno: 22. 2. 2009, 10:06:25
neexistovala spletl jsem to...
omlouvám se za hodně trapné téma..., ale děkuji za ochotu |
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0