[PHP] Errore nome utente scompare dopo logout

fabry1986

Nuovo Utente
11 Feb 2017
7
2
1
38
Salve a tutti sono un principiante del php.. sto costruendo un sito che contiene un blog... sono riuscito a fare la registrazione e il login... poi dal login dovrei riuscire a commentare col username loggato... e ci riesco..
il problema è che una volta comparso a video il lo user nel blog... quando faccio il logout.. rimane solo il commento ed al posto del nome dello user mi compare una sorta di errore..sono disperato non so come risolvere..... fatemi sapere cosa devo fare.. grazie ancora..

index.php (BLOG)
PHP:
<font color="white">
<table border="2px" width="960px" cellpadding="30px"id="blog">
<?php

include('connect.php');

$query = mysql_query("SELECT * FROM comment WHERE n ORDER BY n DESC");


while($cicle=mysql_fetch_array($query))

{
?> <tr><td width="160"align="center"  ><p > <?php  echo $_SESSION ['login'][1] ; ?> </p></td><td> <?php echo $cicle['comment'] ;
} ?> </td></tr>
</table></font>   
</div>

connect.php
PHP:
<?php

$db_hostname = 'localhost';
$db_username = 'root';
$db_password = '';
$db_name = 'fatal';
mysql_select_db($db_name, mysql_connect($db_hostname, $db_username, $db_password)) or die("Impossibile connettersi.".mysql_error());
mysql_query("CREATE TABLE IF NOT EXISTS comment (n INT NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(16)  NOT NULL, comment TEXT  NOT NULL)");

function clear($var) {
    return addslashes(htmlspecialchars(trim($var)));
}

?>

PHP:
                            login.php

<?php
// Includo la connessione al database

include('config.php');


// Se il modulo viene inviato...
if(isset($_POST['login']))
{
   
    // Dati Inviati dal modulo
    $username = (isset($_POST['username'])) ? trim($_POST['username']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $password = (isset($_POST['password'])) ? trim($_POST['password']) : '';    // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''
   
    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
        $username = addslashes($username);
        $password = addslashes($password);
    }
   
    // Crypto la password e la confronto con quella nel database
    $password = md5($password);
   
    // Controllo l'utente esiste
     $query = mysql_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' LIMIT 1");  
   
    // Se ha trovato un record
    if(mysql_num_rows($query) == 1)
    {
        // prelevo l'id dal database
        $login = mysql_fetch_array($query);
       

        // Creo una variabile di sessione
       
        $_SESSION['login'] = array($login['id'], $login['username']);  
       
       
        // reindirizzo l'utente
       
        header('Location: index.php');
        exit;
         
    }
    // se non esiste da l'errore
    else
        die('nome utente o password errati');
       exit;
}

?>

comment.php

PHP:
                   <?php
    require('connect.php');
        if(isset($_POST['comment'], $_POST['submit'])){
        $comment= $_POST['comment'];
        $submit= $_POST['submit'];
   
    }
   
   
   
        if(isset($submit))
        { 
           if(isset($comment))
            {
               
                $insert=mysql_query("INSERT INTO comment (comment) VALUES ('$comment')");
                header('Location: index.php');
               
            }
            else
            {
            echo "Please fill out a comment";
           
            exit;
        }   
        }
       
        ?>
 
ciao ha ragione criric
comunque (qìguardando di corsa) un primo errore e nel ptimo script (index)
cosa è quel
$query = mysql_query("SELECT * FROM comment WHERE n ORDER BY n DESC") ?
 
PHP:
while($cicle=mysql_fetch_array($query))

{
?> <tr><td width="160"align="center"  ><p > <?php  echo $_SESSION ['login'][1] ; ?> </p></td><td> <?php echo $cicle['comment'] ;
} ?> </td></tr>
</table></font> 
</div>

IL vero problema è che non c'è un vero e proprio errore... funziona tutto.. il problema è che quando faccio un commento.. mi compare il nome utente con di fianco il commento.... e fin li è tutto giusto... poi quando faccio il logout.. il nome utente non rimane e mi compare un errore... cmq è questo l'errore.. scusate sono nuovo.. avrei dovuto farlo prima :D
 
Il tuo problema è che utilizzi la sessione per stampare l'user. E' normale che quando effettuio il logout la sessione che contiene la user non esiste più. Quindi, invece di utilizzare la variabile sessione, devi fare un ciclo che ti scorre tutta la tabella commenti e stampare le info.
 
Esattamente come dice Ibernato. All'atto del logout la sessione dell'utente non è più attiva, quindi le info devi recuperarle dal DB.
 
Era proprio quello a cui volevo arrivare io.
Non puoi gestire una situazione del genere solo con l'usilio delle sessioni.
 
eh si cmq i dati vengono immagazzinati dal database phpmyadmin...cmq non so quale tipo di ciclo potrei riutilizzare.. come posso fare??
 
ciao
potresti fare così. immagino che nella parte di logout ci sia la funzione session_destroy() per eliminare le sessioni per l'accesso
se è così la commenti e metti l'eliminazione solo della sessione che serve all'accesso
PHP:
//......
//session_destroy();
unset($_SESSION['login']);
//.....
poi nella parte in cui l'utente si logga aggiungi una sessione
PHP:
//......
$_SESSION['login'] = array($login['id'], $login['username']);
$_SESSION['username'] = $login['username'];
//.....
e utilizzi $_SESSION['username'] dove ti serve, ricorda però due cose
1) dove usi le sessioni ci deve essere session_start()
2) le sessioni si distruggono comunque quendo esci dal browser e quindi quando rientri anche $_SESSION['username'] è sparita

quindi probabilmente devi usare i dati del db, ma per sapere come dovresti dire cosa lega quella che penso sia la tabella dei commenti a quella che penso sia la tabella utenti (immagino che tu abbia una tabella commenti e una tabella utenti)
 
grazie borgo.. il problema è che quando esce dal browser.. l'utente deve rimanere stampato anche se ha fatto il logout.. cmq il problema è che in ho un database ho due tabelle diverse una è per i commenti mentre l'altra.. per la registrazione e il login.. mi sa che non dovrei utilizzare la session.. non so come fare..
 
ciao
se vuoi far apparire il nome dell'utente dopo che questo è uscito dal browser devi usare i cookie, ti schematizzo:
nella pagina in cui l'utente si logga
PHP:
<?php
setcookie("utente", "0", time()+3600);//questa appena prima o subito dopo session(start) nella pagina in cui l'utente si logga
session_start();
//....
$username=$_POST['username'];
$password=$_POST['passoword'];
$query= "SELECT * FROM utenti WHERE username='$username' AND password='$password'";
$ris=mysqli_query($conn, $query);
if(mysqli_num_rows($ris)>0){
    //l'utente è iscritto e user e pass OK
    $riga=mysqli_fetch_assoc($ris);
    $_SESSION['login']=$riga['username'];
    $_COOKIE['id']=$riga['id'];
    //e rimandi dove vuoi
}else{
    //l'utente non è iscritto e user o pass errati
    //e rimandi dove vuoi
}
?>

poi nella pagina dove ti serve e se l'utente è uscito dal browser (quindi le sessioni non esistono più) utilizzi il cookie
PHP:
<?php
session_start();
if(!isset($_SESSION['login']) && !isset($_COOKIE['id'])){
    //non esiste ne il cookie ne la sessione
    //l'utente non si è mai loggato o si è loggato più di un'ora fa
    //rimandi dove vuoi es alla pagina di log
}else{
    //esiste o la sessione o il cookie o entrambi
    if(isset($_SESSION['login'])){
        //esiste la sessione l'utente non è uscito dal brovser puoi usare la sessione
        echo "ciao ".$_SESSION['login']." benvenuto nel mio sito";
    
    }else{
        //l'utente è uscito non puoi usare la sessione quindi utilizzi il cookie
        if($_COOKIE['id']>0){
            //il cookie ha preso l'id
            //dati di connessione al db
            $id_utente=$_COOKIE['id'];
            //cerchi nel db il nome dell'utente
            $q=mysqli_query($conn,"SELECT username FROM utenti WHERE id=$id_utente");
            $riga=mysqli_fetch_assoc($q);
            echo "ciao ".$riga['username']." benvenuto nel mio sito";
        }else{
            //c'è stato quelche errore il cookie è rimasto 0
            //rimandi dove vuoi
        }
    }
    //ecc........
}
?>
considera che comunque è uno schema che devi mettere a punto e provare
 
ho modificato il login.php
PHP:
include('config.php');


// Se il modulo viene inviato...
if(isset($_POST['login']))
{
    
    // Dati Inviati dal modulo
    $username = (isset($_POST['username'])) ? trim($_POST['username']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $password = (isset($_POST['password'])) ? trim($_POST['password']) : '';    // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''
    
    setcookie("utente", "0", time()+3600);//questa appena prima o subito dopo session(start) nella pagina in cui l'utente si logga

//....

$query= "SELECT * FROM utenti WHERE username='$username' AND password='$password'";
$ris=mysqli_query($conn, $query);    // riga 20
if(mysqli_num_rows($ris)>0){         // riga 21
    //l'utente è iscritto e user e pass OK
    $riga=mysqli_fetch_assoc($ris);
    $_SESSION['login']=$riga['username'];
    $_COOKIE['id']=$riga['id'];
    header('Location: index.php');
}else{
    //l'utente non è iscritto e user o pass errati
    //e rimandi dove vuoi
      
         echo "user or pass wrong";
        exit;
         }
 
}
ma mi da' 2 errori
Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in C:\Users\Fabry\Desktop\xampp\htdocs\www.flare-manga.com\login.php on line 20

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\Users\Fabry\Desktop\xampp\htdocs\www.flare-manga.com\login.php on line 21
user or pass wrong
 

Discussioni simili