Autor Zpráva
gygabyte
Profil *
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
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 *
Udělal jsem to ale pořád stejná chyba (Odkaz)
btw: šifrovat budu, ale až mi to bude fungovat :)
Joker
Profil
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 *
$dotaz
$dotaz = "SELECT * FROM klienti WHERE user='$usr_name' AND password='$usr_passw'";
Joker
Profil
gygabyte
Jo, ale jak vypadá výsledný dotaz, který se posílá do databáze? Nechte si ho vypsat.
gygabyte
Profil *
Jak si ho mám nechat vypsat?
(omlouvám se za trapné dotazy ale jsem začátečník...)
yFang
Profil
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 *
Takže nikdo neví kde je chyba? ... :(
Alphard
Profil
ignorujete rady
změňte
$result=mysql_query($dotaz);

na
$result=mysql_query($dotaz); if(!$result) echo "<code>$dotaz</code><br>".mysql_error();
gygabyte
Profil *
Vypíše mi to
No database selected
panther
Profil
gygabyte
Vypíše mi to
No database selected

tak to vidíš. Nemáš vybránu databázi :-)

Existuje databáze „klienti“?
gygabyte
Profil *
Ano existuje....
gygabyte
Profil *
neexistovala spletl jsem to...
omlouvám se za hodně trapné téma..., ale děkuji za ochotu
Toto téma je uzamčeno. Odpověď nelze zaslat.