Momento di lapsus... Controlli su user e pwd e campo booleano...

  • Creatore Discussione Creatore Discussione Emix
  • Data di inizio Data di inizio

Emix

Utente Attivo
15 Feb 2010
596
0
16
Salve a tutti,
sto finendo di fare lo script per un login completo.. Ma ora sono davanti ad un lapsus incredibile... Io inserisco user e pwd nella pagina di login, mi riporta alla pagina di creazione sessioni, ammesso che l'utente sia stato riconosciuto. Ho inserito un campo nella tabella utenti di tipo booleano "active" settato a 0 di default, se clicco sul link che mi arriva per email il campo active diventa 1. Ora nello script di login eseguo prima la query per cercare l'utente, ma dopo quella non capisco come andare a fargli cercare il campo se è 0 o 1 di quel relativo utente... Vi copio lo spezzone di codice...

PHP:
$query=mysql_query("SELECT * FROM utenti WHERE user='$user' and pwd='$pwd'");
    //verifico che esista un utente con tale username e tale password
    $esiste=mysql_num_rows($query);
    //se $esiste == 0 non cè
    if($esiste > 0){//esiste
        //estraggo usn e pass
        $rows=mysql_fetch_array($query);
	    $utente=1;
//QUI ANDREBBE IL CONTROLLO SUL L'ATTIVO O MENO
        //e li passo in sessione
        $_SESSION['user']=$rows['user'];
        $_SESSION['pwd']=$rows['pwd'];
        //accedo alla/alle pag riservate
        @header('Location:ready.php');
    }else{ //non esiste
	// controlla che siano di un amministratore
    $queryadmin = mysql_query("SELECT * FROM admin WHERE user='$user' AND pwd='$pwd'");
    $esisteadmin=mysql_num_rows($queryadmin);
    //se $esiste == 0 non cè

Grazie per l'eventuale aiuto...
 
PHP:
<?php
$user = mysql_real_escape_string($user);
$pwd  = mysql_real_escape_string($pwd);

$sql = 'SELECT * FROM utenti WHERE user = \'%s\' AND pwd = \'%s\'';
$sql = sprintf($sql, $user, $pwd);

$query = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($query) > 0) {
    $user = mysql_fetch_assoc($query);

    if ($user['active']) {
        $_SESSION['user'] = $user['user'];
        $_SESSION['pwd']  = $user['pwd'];

        header('Location: ready.php');
        die();
    }

    die('Utente non attivo.');
} else {
    $sql = 'SELECT * FROM admin WHERE user = \'%s\' AND pwd = \'%s\'';
    $sql = sprintf($sql, $user, $pwd);

    $query = mysql_query($sql) or die(mysql_error());

    // ...
}
?>
Non capisco però perché crei due tabelle, una per gli utenti e una per gli amministratori: così devi mantenere il doppio del codice. Aggiungi semplicemente un campo admin alla tabella utenti.

Inoltre, spero che tu stia criptando le password.
 
ciao e scusami se ti rispondo solo ora...

PHP:
$user = mysql_real_escape_string($user);
$pwd  = mysql_real_escape_string($pwd);

$sql = 'SELECT * FROM utenti WHERE user = \'%s\' AND pwd = \'%s\'';
$sql = sprintf($sql, $user, $pwd);

$query = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($query) > 0) {
    $user = mysql_fetch_assoc($query);

    if ($user['active']) {
        $_SESSION['user'] = $user['user'];
        $_SESSION['pwd']  = $user['pwd'];

        header('Location: ready.php');
        die();
    }

Questo è uno spezzone di codice che hai scritto.. Perdonami ma che query sono? Non ho capito come funzionano... Inoltre non si potrebbe modificare semplicemente le mie di query per inserire il controllo dell'attivazione o meno? Mi sembrava molto meno complesso...
Inoltre, no stavo cercando di capire come potevo fare per criptare le password in md5... Sai indicarmi qualcosa? o pezzi di codice non so...
 
Ciao,
Forse ti basta modificare la query aggiungendo il campo attivo
Codice:
SELECT * FROM utenti WHERE user='$user' and pwd='$pwd' and active = 1
se esiste ed è attivo vai avanti
 
Ok ma se poi active non è 1 ma 0 vorrei fare in modo che gli dia un messaggio diverso da quello che dice se sono incorretti user e\o pwd...
Uhm che palle cambiano sempre tutto :| mi tocchera ri studiare allora...
 

Discussioni simili