Autor Zpráva
Jablon
Profil
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 *
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;
}
?>
Toto téma je uzamčeno. Odpověď nelze zaslat.