Problema con login e password

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Dovrei creare un accesso con estrazione dei dati dal db, chiamato utenti. E poi effettuare il login. Inserendo username e Password. Visualizzando possibilmente, il benvenuto pinco pallino (ossia il nome). Chi mi puó aiutare per favore ????
 
Ciao

Ciao Cricric,

Io ho dei codici ma sono incompleti e non funzionanti per il nuovo sito che sto cercando di fare. A parte la pagina d'iscrizione, che quello funziona perfettamente. Il problema principale, secondo me, è che il sistema non riconosce la password e non il motivo. Ho trovato un vecchio esempio che ti posto qua. Considera, che il nuovo db è a livelli, ossia, c'è un campo chiamato autorizzato = 0 e 1 corrisponde a non autorizzato. Ora ti posto quello che ho sperando di cercare di capire come potrlo modificare e renderlo funzionante.

Tabella utenti:

PHP:
create table utenti (

id 		INT UNSIGNED NOT NULL AUTO_INCREMENT,
nome 		VARCHAR(30) NOT NULL,
cognome 	VARCHAR(30) NOT NULL,
username 	VARCHAR(30) NOT NULL,
email           VARCHAR(40) NOT NULL,
password        VARCHAR(255) NOT NULL,
autorizzato 	ENUM('0', '1') DEFAULT '0',
PRIMARY KEY (id)
);

Suggeritami da borgo l'ultima voce. Se sono maggiorenni compoarirà il nome e cognome, se sono minorenni comparirà solo lo username.

Questo è il vecchio codice che adoperavo all'inizio, che sicuramente va modificato, l'ho chiamata provasessione.php:

PHP:
<?php

require_once("connetti.php"); <--- Questo richiama il file di configurazione del db


session_start();
if(isset($_SESSION['login'])){
$id=$_SESSION['login'];
$cerco_user=mysql_query("SELECT * FROM utenti WHERE id='$id'");
while($leggo_dati_user=mysql_fetch_array($cerco_user)){
$login=$leggo_dati_user['login'];
//echo '<font face="Comic Sans MS"> <body bgcolor = "#000000"> <font color="yellow">';
}
}

else{
echo "<form action='' method='POST'>

<CENTER> <h1>


PER ENTRARE DIGITARE LOGIN & PASSWORD
</center> </h1>
<center>

Username: <input type='text' name='username'><br><br>
Password: <input type='password' name='password'><br><br>
<input type='submit' name='logga' value='Loggati'>
</center> </br>
</form>";

//if(isset($_POST['logga']) {

error_reporting(E_ALL ^ E_NOTICE);

if($_POST['logga']){

 
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$pass=md5($password);
//echo $hash;
$cerco=mysql_query("SELECT id FROM utenti WHERE username='$username' AND password='$pass'");
while($prelevo_id=mysql_fetch_array(($cerco))){
$id=$prelevo_id['id'];
}
$x=mysql_num_rows($cerco);
if($x==0){header("Location:failed.html");}
else{$_SESSION['login']=$id;header("Location:benvenuto.php");}

}
}
?>

E poi c'è la pagina riservata, che viene chiamata paginaris.php:


PHP:
<?php

require_once("connetti.php");

session_start();
    if(isset($_POST['username']) || isset($_POST['password']))
{
echo "Ciao " . $_SESSION['username']; 
}else{
echo "Accesso non consentito";
}
?>

Ci sarebbe anche il file login.php, che vorrei mettere tutto insieme, ossia il controllo dello username e della password. Vedi se tante volte nei codici che ho postato, mi puoi dare una mano a modificarli. Grazie. Aspetto come al solito tue notizie. Intanto provo anche il codice opostato, nella discussione che mi hai inviato, non si sa mai nella vita che mi funzioni.
 
In questa parte di codice devi aggiungere in sessione il nome Utente se poi vuoi visualizzarlo in un altra pagina

PHP:
 // aggiungi alla select anche il nome utente
 $cerco = mysql_query("SELECT id,username FROM utenti WHERE username='$username' AND password='$pass'");
        while ($prelevo_id = mysql_fetch_array(($cerco))) {
            // preleva anceh la username
            $id = $prelevo_id['id'];
            $username = $prelevo_id['username'];
        }
        $x = mysql_num_rows($cerco);
        if ($x == 0) {
            header("Location:failed.html");
        } else {
            // metti in sessione anche il nome utente
              $_SESSION['username'] = $username;
              $_SESSION['login'] = $id;
            header("Location:benvenuto.php");
        }

ho fatto tre modifiche commentate
 
Ciao

Ciao,

ti ringrazio. Ma se il fatto che non riesco a connettermi persiste, cosa debbo fare ??? Ho resettato anche la tabella più di una volta. Sai ogni tanto si sputtana. Ora riprovosubito il codice. Ah la parte riguardante la pagina riservata ??? C'è anche quella per caso ???
 
la pagina riservata andrebbe scritta piu omeno cosi

PHP:
<?php
require_once("connetti.php");

session_start();

if ($_SESSION['username']) {
    
    echo "Ciao " . $_SESSION['username'];
} else {
    echo "Accesso non consentito";
}
?>

anche se sarebbe meglio creare una funzione che controlli melgio la validita della sessione, ma si puo aggiungere piu avanti

il fatto che non riesco a connettermi persiste
sarà un problema di connetti.php
che errore ti restituisce?
 
Ciao

Ciao,

nessun errore, non mi fa entrare. ora provo i due codici che mi hai dato e vediamo se tante volte risolvo. Sono sempre più cinvinto che dipenda dalla criptazione della password non so il perchè bah.
 
Ciao

Ciao,

Allora non capisco un tubo del perchè non va. Comunque. Ti posto il codice che tu mi ha fatto, magari sbaglio io non lo so. Mi fa inkazzare...

Questo si chiama login.php

PHP:
<?php

require_once("connetti.php");

if (!isset($_POST['log'])) {
   
        
    ?>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Loggati</title>

        <center>   <H1>AREA RISERVATA: PREGO EFFETTUARE IL LOGIN </H1>

            <form action= '' method="POST">

                <font face="Comic Sans MS">

                
Username: <input type="text" name="username"  maxlength="30" size ="32"> <br> <br>
Password: <input type="password" name="password"  maxlength="12" size ="14"> <br> <br>
                
 </font> 
 
 
                <center>
                    <input type="submit" name="log" value="Loggati" />
                    
                </center> </form>
        </head>
        </body>
<?php

// da qua inizia il tuo codice con l'if iniziale del tasto "Loggati"
} else {

// aggiungi alla select anche il nome utente
 $cerco = mysql_query("SELECT id,username FROM utenti WHERE username='$username' AND password='$pass'");
        while ($prelevo_id = mysql_fetch_array(($cerco))) {
            // preleva anceh la username
            $id = $prelevo_id['id'];
            $username = $prelevo_id['username'];
        }
        $x = mysql_num_rows($cerco);
        if ($x == 0) {
            header("Location:failed.html");
        } else {
            // metti in sessione anche il nome utente
              $_SESSION['username'] = $username;
              $_SESSION['login'] = $id;
            header("Location:paginaris.php");
        }  
}
?>

Questa è la pagina riservata chiamata paginaris.php:


PHP:
<?php

require_once("connetti.php");

session_start();

if ($_SESSION['username']) {
    
    echo "Ciao " . $_SESSION['username'];
} else {
    echo "Accesso non consentito";
} 

?>

E va sulla pagina di failed.php Non capisco assolutamente il perkè non va. Magari provalo anche te.
 
intanto comincia a modificare cosi, prima non ci ho fatto caso
PHP:
// da qua inizia il tuo codice con l'if iniziale del tasto "Loggati"
} else {
// aggiungi alla select anche il nome utente
    $cerco = mysql_query("SELECT id,username FROM utenti WHERE username='$username' AND password='$pass'");

    $x = mysql_num_rows($cerco);
    if ($x == 0) {
        header("Location:failed.html");
    } else {
        //inutile il ciclo while visto che devi estrarre un solo dato
        // non mysql_fetch_array ma mysql_fetch_assoc ( verifica in rete la differenza )    
        $prelevo_id = mysql_fetch_assoc($cerco);
        // preleva anceh la username
        $id = $prelevo_id['id'];
        $username = $prelevo_id['username'];
        // metti in sessione anche il nome utente
        $_SESSION['username'] = $username;
        $_SESSION['login'] = $id;
        header("Location:paginaris.php");
    }
}

poi vediamo il resto un passo alla volta
 
Ciao

Ciao,

Grazie e scusami se ti rompo. Ma ora riprovo il codice che mi hai dato, inoltre, ho tolto la criptazione md5 per vedere se il problema era quello, ovviamente non lo è. Immaginavo male. Ma all'inizio del tuo codice, ci devo mettere sempre session_start(); ????? Provato ora il codice e persiste. Non mi fa entrare. Ma perchè ????? Il limite di varchar è di 255 caratteri giusto ??? o va oltre ????
 
Ultima modifica:
@Borgo:
nella login mi sembra che manchi session_start().
session_start() deve esserci in tutte le pagine in cui usi le sessioni

certo all'inizio di ogni pagina
 
Ciao

Ciao,

Sia con che senza, sembra che non gli piaccia. E il limite dei caratteri è max 255 ??? Un ultima cosa, fa differenza che c'è un campo nella tabella:
autorizzato ENUM('0', '1') DEFAULT '0', ???
 
Sia con che senza, sembra che non gli piaccia.
se parli di session_start() lascialo
E il limite dei caratteri è max 255 ??? Un ultima cosa, fa differenza che c'è un campo nella tabella:
autorizzato ENUM('0', '1') DEFAULT '0', ???
Non c'entrano per ora, un passo alla volta

vediamo se la query va in errore
aggiungi un exho dopo la query e vedi se ti stampa un errore e semmai postalo
PHP:
$cerco = mysql_query("SELECT id,username FROM utenti WHERE username='$username' AND password='$pass'");
    if(!$cerco) {
        echo "Errore query: " . mysql_error();
    }
poi all'inizio della pagina di autenticazione aggiungi
PHP:
var_dump($_SESSION)
per vedere se riusciamo a settare le sessioni
 
Ciao

Ciao,

ora ci provo e ti dico. Mi da subito questo come risultato:

array(1) { ["p"]=> &string(32) "96b54a4d6ec83f742d230b953142c995" }

ora dov'è esattamente che lo debbo mettere ex ???? Scusa ma non ho capito prima nel post. Inoltre, quando mi vado a loggare, mi dice username e password errati
mi va subito sulla pagina chiamata failed.php

Vado a cena, ci si sente domani se posti, poi lo leggo dall'ipad dopo. Grazie.
 
Ultima modifica:
Lasciamo perder il var_dump($_SESSION) per il momento

mysql_error() non ti stampa niente?
modifica cosi che stampiamo anche la query

PHP:
$query = "SELECT id,username FROM utenti WHERE username='$username' AND password='$pass'";
    $cerco = mysql_query($query);
    if(!$cerco) {
        echo "Errore query: <br/>$query<br/>" . mysql_error();
    }else{
        echo $query;
    }

qualcosa deve stampare
 
Ciao

Ciao,

Ho provato ora il codice, che mi hai inviato, mi stampa a video la seguente:


SELECT id,username FROM utenti WHERE username='' AND password=''

Per essere precisi, ho dovuto togliere la parte sotto, altrimenti andava direttamente sulla pagina failed.php

Ti posto il codice come l'ho fatto:

PHP:
<?php

require_once("connetti.php");

if (!isset($_POST['log'])) {
   
        
    ?>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Loggati</title>

        <center>   <H1>AREA RISERVATA: PREGO EFFETTUARE IL LOGIN </H1>

            <form action= '' method="POST">

                <font face="Comic Sans MS">

                
Username: <input type="text" name="username"  maxlength="30" size ="32"> <br> <br>
Password: <input type="password" name="password"  maxlength="12" size ="14"> <br> <br>
                
 </font> 
 
 
                <center>
                    <input type="submit" name="log" value="Loggati" />
                    <input type="submit" name="uscita" value="Uscita" />
                </center> </form>
        </head>
        </body>
<?php
session_start();
$query = "SELECT id,username FROM utenti WHERE username='$username' AND password='$pass'";
    $cerco = mysql_query($query);
    if(!$cerco) {
        echo "Errore query: <br/>$query<br/>" . mysql_error();
    mysql_error();
    }else{
        echo $query;
    }  
    }  
   
?>

e così sembrerebbe che si logga, ma se tu clicchi sul tastino loggati, si logga ugualmente.
 
SELECT id,username FROM utenti WHERE username='' AND password=''

come vedi dalla query, $username e $password non sono valorizzate

prova cambiando la query cosi :
PHP:
$query = "SELECT id,username FROM utenti WHERE username='" . $_POST['username'] . "' AND password='" . $_POST['password'] . "'";
 

Discussioni simili