| Autor | Zpráva | ||
|---|---|---|---|
| Slavo Profil |
#1 · Zasláno: 19. 1. 2013, 01:06:30
Zdravicko mam mensi problem... neviem preco ale ked prejde cyklus tak while tak mi potom hodi chybu ze neni definovana dbmeno v podmienke if.. zistil som ze ked prejde cyklus tak vlastne to co je v cykle sa neda predat ako keby dalej na tu podmienku resp. asni vypisat sa to neda.
<?php
if(isSet($_POST["prihlas"])){
if(!empty($_POST["meno"])){
if(!empty($_POST["heslo"])){
$meno=$_POST["meno"];
$heslo=$_POST["heslo"];
//login na db
$dbc=mysqli_connect("***","***","***","***",***);
$dbc->set_charset("utf8");
if(!$dbc){
echo "Pripojenie<br />";
echo "Podrobnosti pripojenia: ",mysqli_connect_error();
exit("Neplatné pripojenie.");}
//query
$query=mysqli_query($dbc,"SELECT hodnota, meno, heslo FROM uzivatelia WHERE meno='$meno'");
if(!$query){
echo "SQL-chyba <br />";
echo "Podrobnosti SQL: ",mysqli_error($dbc);
exit("Neplatný SQL prikaz.");}
//cyklus na db
while($row=mysqli_fetch_array($query)){
$dbhodnota=$row["hodnota"];
$dbmeno=$row["meno"];
$dbheslo=$row["heslo"];}
if($meno==$dbmeno&&$heslo==$dbheslo){
$_SESSION["meno"]=$_POST["meno"];
$_SESSION["hodnota"]=$dbhodnota;
header("Location: miestnosti.php");}else{
echo "Vaše meno alebo heslo nie je správne.";}
mysqli_free_result($query);
}else echo "Prosím zadajte vaše heslo.";
}else echo "Prosím zadajte vaše meno.";
}
?> problem je tu if($meno==$dbmeno&&$heslo==$dbheslo){ hodi ze nemam definovanu premennu dbmeno. Ked som pouzival mysql a nie mysqli mal som uplne iny zapis tak mi to nerobilo. V db je meno aj heslo nastavene na test. Dufam ze mi pomozete v taku neskoru hodinu. Buem vdacny za kazdu radu a co by som mohol na kode napr. zmenit :) Dakujem
|
||
| abc Profil |
#2 · Zasláno: 19. 1. 2013, 01:27:33
Za řádek 28 přidej
echo $dbmeno;
Vypíše to něco? Pokud ne, tak je s největší pravděpodobností v DB prázdné pole meno. Pokud může být prázdné ošetři nějak takto na ř. 28: $dbmeno = isset($row['meno'])? $row['meno'] : ''; |
||
| Slavo Profil |
nie nevypisalo nic.. nechapem tomu.. Dal som spravne hodnoty tak ma to koplo na miestnosti.php no ked zadam zle udaje tak hodi ze neni definovana premenna :/ a to tvoje pomohlo no zaujimalo by ma aj tak v com bol problem :(
a v DB je id=1 hodnota=1 meno=test heslo=test |
||
| abc Profil |
#4 · Zasláno: 19. 1. 2013, 01:52:21
Však je to logické, když zadáš chybné údaje.
Tenhle dotaz SELECT hodnota, meno, heslo FROM uzivatelia WHERE meno='$meno'
vytáhne z DB odpovídající záznam, tudíž, když ve formuláři zadáš jméno, které neexistuje, tak se ti vrátí prázdný vysledek, takže v $row['meno'] nic neni. |
||
| Tori Profil |
Slavo:
- hesla by neměla být ukládaná jako obyč.text, ale jen jako hash (viz např. http://php.vrana.cz/ukladani-hesel.php) - chybí escapování dat v SQL dotazu - while je imho zbytečné, když ten dotaz by měl vrátit max.jeden řádek. Dtto vytváření dalších proměnných, když byste mohl rovnou používat pole $row. - i ověření hesla se dá zapsat do dotazu. - za přesměrováním funkcí header se obvykle ukončuje skript. ř.19 - 36 by mohly teda vypadat takto (řádky 7+8 by tím byly zbytečné): $result = $dbc->query("SELECT hodnota, meno FROM uzivatelia WHERE meno = '".$dbc->escape_string($_POST['meno'])."'
AND heslo = '".$dbc->escape_string($_POST['heslo'])."'");
if ($result === false) {
// popis chyby by se ale na veřejném webu neměl objevit, to je informace jen pro programátora
echo 'Došlo k chybe. '.$dbc->error;
} elseif ($result->num_rows < 1) {
echo 'Prihlasovacie meno alebo heslo boli zadané nesprávne.';
} else {
$row = $result->fetch_assoc();
$_SESSION["meno"] = $row['meno'];
$_SESSION["hodnota"] = $row['hodnota'];
header("Location: miestnosti.php");
exit;
} |
||
| Jan Tvrdík Profil |
#6 · Zasláno: 19. 1. 2013, 08:31:27
Tori:
„i ověření hesla se dá zapsat do dotazu.“ Nicméně z hlediska bezpečnosti je podle mě lepší to nedělat, protože to vyžaduje poslat heslo do databáze v plaintextu, což zvyšuje riziko, že heslo v této podobě někdo odchytne nebo, že skončí v nějakém logu. |
||
| Slavo Profil |
#7 · Zasláno: 19. 1. 2013, 12:21:07
Jaj tak... uz tomu rozumiem.... abc.. tam bola chyba... som si to trosku neuvedomil :) bolo uz neskoro ..dakujem Vam :)
|
||
|
Časová prodleva: 14 let
|
|||
0