Autor Zpráva
shooty
Profil
Zdravím, v PHP som začiatočník, a preto by som chcel poprosiť o radu. Momentálne pracujem na prihlasovaní na stránku. Po správnom prihlásení by sa na stránke mala vypísať hláška "Vitajte!". Pokiaľ je zadané zlé heslo, na stránke by sa malo vypísať "Nesprávne heslo!". Lenže mne vypíše "Nesprávne heslo!" pri obi dvoch možnostiach, čiže aj pri správnom prihlásení. Viete mi poradiť kde mám chybu? Vypracovával som to podľa tohto videa, tak preto som prekvapený, že mi to nefunguje. Vopred ďakujem za všetky rady :-)

<?php

session_start();

$lokalita = $_POST['lokalita'];
$heslo = $_POST['heslo'];

if ($lokalita&&$heslo)
{
$connect = mysql_connect("localhost","root","") or die("Nie je možné sa pripojiť!"); 
mysql_select_db("phplogin") or die("Nie je možné nájsť databázu");

$query = mysql_query("SELECT * FROM users WHERE lokalita='$lokalita'");

$numrows = mysql_num_rows($query);

if ($numrows!=0)
{

   while ($row = mysql_fetch_assoc($query)) 
   {
        $dblokalita = $row['lokalita'];
        $dbheslo = $row['heslo'];
   }
   
   if ($lokalita==$dblokalita&&$heslo==$dbheslo)
   {
       echo "Vitajte!";
       $_SESSION['lokalita']=$lokalita;
   }
   else 
      echo "Nesprávne heslo!"; 
   
}
else
   die("Táto lokalita neexistuje!");
   
   
}
else
   die("Prosím zadajte lokalitu a heslo!");
?>
Alphard
Profil
Takže se podmínka na řákdu 26 vždy vyhodnotí negativně. Vypište si hodnoty těch 4 proměnných, jestli je tam to, co tam má být.
shooty
Profil
Premenné sú v poriadku. Vypisuje všetko čo má.
ahoj
Profil *
V tabulce je nejspíš několik stejných lokalit a $_POST['heslo'] se neshoduje s tím heslem v databázi, které přijde na řadu jako poslední.
Proč nedáš to heslo přímo do toho SELECTu jako druhou podmínku k lokalitě?
shooty
Profil
V tabuľke mám len jednú jedinú lokalitu, čiže tam problém nebude.
A ten SELECT po pridaní hesla by mal vyzerať takto?

$query = mysql_query("SELECT * FROM users WHERE lokalita='$lokalita' $heslo='heslo'");
Musím medzi tú lokalitu a heslo ešte niečo zadať, alebo to môže byť tak ako som to napísal?
magnus123
Profil *
Ahoj.

Pokud hledáš pouze heslo a lokalitu pro jednoho uživatele, napsal bych to asi takto:
$query = mysql_query("SELECT heslo, lokalita FROM users WHERE lokalita = '$lokalita' AND heslo = '$heslo'");
Případně na konec dotazu přidat LIMIT 1, pokud ti stačí jeden vyhledaný záznam.
Alphard
Profil
ahoj, magnus123:
A pak ještě escapovat, heslo hashovat. Radši postupně.

[#3] shooty
Nevěřím, ten výraz v podmínce na řádku 26 se vyhodnotí jako false, jinak by se nevykonala else větev. Ty proměnné (všechny 4) jste si vypsal, nebo si jen myslíte, že jsou správné? Jestli jste je vypsal, musíte porovnávat i bílé znaky.
shooty
Profil
magnus123: Skúsil som to tak ako si napísal, a vtedy mi vypíše "Táto lokalita neexistuje!".

Alphard: Vypísal som si len $lokalita a $heslo, pretože neprišiel som nato ako si vypísať $dblokalita a $dbheslo.
Alphard
Profil
[#8] shooty
Úplně stejně jako to předchozí. Jsou to všechno stejné proměnné.
shooty
Profil
Tie prvé dve premenné som vypísal takto:
<?php
     
mysql_connect("localhost", "root","") or die(mysql_error()); 
mysql_select_db("phplogin"); 

$result = mysql_query("SELECT * FROM users") or die(mysql_error()); 

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){ 

echo $row["lokalita"]. " ". $row["heslo"]; 
echo "<br />"; 
 } 
   
?>

Lenže ak tam napíšem namiesto "lokalita" "dblokalita" tak mi nevypíše nič. Je ešte nejaký iný spôsob na vypísanie?
Alphard
Profil
shooty:
Lenže ak tam napíšem namiesto "lokalita" "dblokalita" tak mi nevypíše nič.
No a to je ten problém. Neřešte, jak jinak to vypsat, ale proč jsou ty proměnné prázdné.
Když chcete mít jistotu, použijte var_dump(), měl by vypsat něco jako string nulové délky.
shooty
Profil
Takže, vypísal som si to pomocou var_dump(), a pri všetkých premenných mi vypísalo NULL.
Han
Profil
shooty:
Nevypísal si si to ešte predtým, ako si vytvoril a naplnil premenné údajmi? tj. Pred riadkom 24 v prvom kóde?
Pri zapnutom vypisovaní chýb by to v tomto prípade ešte vyhodilo chybu Undefined variable
shooty
Profil
Han:
A ako zistím, či som to nevypísal ešte predtým?


Problém vyriešený :-)
Začiatočnícka chyba :D V prihlasovacom formulári som nastavil obmedzenie znakov na 15. Ale moje heslo malo až 16 znakov, čiže heslo bolo zadané zle, tým pádom vypísalo že mám zlé zadané heslo. Ospravedlňujem sa, že som Vás obral o čas mojou hlúposťou. A ďakujem za riešenie môjho problému :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: