Autor | Zpráva | ||
---|---|---|---|
Jablon Profil |
#1 · Zasláno: 24. 3. 2007, 18:41:13 · Upravil/a: Jablon
Ahoj, Potřebval bych pomoc s přihlašováním pomocí sessions. Problém je v tom, že když se přihlásím hodímě to zpět na přihlašovací formular a kdyz to skusim znovu tak je to ok viz kód dole.
Index.php (slouží jako přihlašovací formulář) <?php @session_start(); $idss1=$_SESSION["idss2"]; include("config.php"); $link=mysql_pconnect($hostitel,$jmeno, $heslo); mysql_select_db($jmeno_db, $link); $pp=MySQL_Query("SELECT * FROM registrace WHERE id='".$idss1."'"); $aa=MySQL_Fetch_Array($pp); $time=time(); $kontrola=$time-$aa[time]; MySQL_Query("UPDATE registrace SET time='$time' WHERE id='".$idss1."'"); if ($aa[id]==$idss1 and $kontrola<="300"): ?> <form action="prihlaseni/login.php" method="GET"> <input type="hidden" name="prihlaseni" value="ano"> <input type="hidden" name="url" value="<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; ?>"> Nick:<br> <input type="text" name="nick1" size="40" maxlength="40"><br> Heslo<br> <input type="text" name="heslo1" size="40" maxlength="40"><br> <a href="registrace.php">Registrace</a> <input type="submit" value="Registrovat se"> </form> <?php else: ?> Jste přihlášeni <a href="logout.php">Odhlásit se</a> Login.php (zapíše se zároveň do databáze) <?php include("../config.php"); $link=mysql_pconnect($host,$jmeno, $heslo); mysql_select_db($jmeno_db, $link); if($prihlaseni=="ano") { $pp=MySQL_Query("SELECT * FROM registrace WHERE nick='$nick1'"); $aa=MySQL_Fetch_Array($pp); if($aa[heslo]==$heslo1 and $aa[ban]=="0") { $time=time(); $IP=$REMOTE_ADDR; $id=MD5($time.$IP); MySQL_Query("UPDATE registrace SET ip='$IP', time='$time', id='$id' WHERE nick='$nick1'"); session_start(); session_register("idss2"); if(!isset($_SESSION["idss2"])) $_SESSION["idss2"]=$id; header("Location: $url"); } else { if ($aa[ban]=="1") { Header("Location:$url?co=ban"); } else { Header("Location:$url?co=ne"); }}} ?> <?php endif; ?> Pls pomoc. |
||
joejoe Profil * |
#2 · Zasláno: 25. 3. 2007, 10:50:32
v takhle napsanem skriptu se spatne orientuje protoze:
- promenne $pp a $aa nejsou moc popisne -> pouzivat takove nazvy promennych, ktere si dobre zapmatujeme a neprepiseme a popisuji co je v nich ulozene: $hostitel -> $config['host']; nebo $pp => $vysledek_dotazu $aa => $radek_vysledku ($row) - $url => $_REQUEST['url'] nebo $_POST['url'] nebo $_GET['url']; - misto $REMOTE_ADDR pouzivat $_SERVER['REMOTE_ADDR'] - misto $pole[neco] pouzivat $pole['neco'] nebo define('neco', 1); $pole[neco]; - overovat si ze operace dopadla uspesne: $link=mysql_pconnect($config['dbhost'] ,$config['dbuser'], $config['dbpass']) or die('mysql_pconnect se napodaril: '.mysql_error()); mysql_select_db($config['dbname'], $link) or die('nepodarilo vybrat databazi'); $query = "SELECT * FROM `uzivatele` WHERE `ip` = '$ip'"; echo $query; // vizualni overeni si jestli je v dotazu promenna $ip $result = mysql_query($query) or die('chyba v sql dotazu: '.$query. ' '.mysql_error()); if ($row = mysql_fetch_array($result)) { print_r($row); } else { die ('sql dotaz vratil prazdny vysledek') } - ukoncit mysql_pconnect() pomoci mysql_close() nebo pouzivat mysql_connect(); - na polozku heslo pouzivat <input type="password" /> - kdyz se posila heslo, tak pouzivat <form method="post" action="..."> (heslo neni videt ani v adresnim radku) - davat do kodu nejake komentare: u nekterych casti bez sirsiho kontextu a podrobnejsiho zkoumani proste netusim jaky byl zamer - vhodne je taky nepsat kod all-in-one jako jeden velky slepenec (nekdo tomu tusim rikal 'spagetovy' kod), ale rozdelit si to nejak sikovne do funkci nebo jeste lip do objektu - napriklad takhle nejak: <? /** * vraci 0 pokud nebylo zadane zadne heslo * vraci 1 pokud jsou udaje spravne * vraci 2 pokud je spatny login * vraci 3 pokud je spatne heslo * vraci 4 pokud je uzivatel zablokovany natrvalo * vraci 5 pokud bylo za poslednich 10 minut vic jak 5 neuspesnych pokusu */ function overUzivatele($uzivatel = null, $heslo= null) { if (!isset($uzivatel)) { return 0; } $hash = md5 // tady bude kod pro overeni spravnosti prihlasovcich udaju return 1; } if (isset($_REQUEST['login'])) { switch(overUzivatele($_REQUEST['login'], $_REQUEST['heslo'])) { case 1: echo 'uspesne prihlaseny'; break; default: ?> <form> <input type="text" name="login"/> <input type="password" name="heslo"/> <input type="submit"/> </form> <? break; } ?> |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0