Problema PHP 5.3.6

di il
34 risposte

34 Risposte - Pagina 2

  • Re: Problema PHP 5.3.6

    In risposta a undefined:
    Dunque la variabile $user dopo il login è assegnata a questa query, presente in ogni pagina proprio come ho riportato su il tutto:

    $row=mysql_fetch_array(mysql_query("SELECT * FROM user WHERE nome='".$user."'"));

    E’ possibile che sbagli l’assegnazione dell’user su questo e non su SESSIONE?

    In risposta a xroj:
    Scusami non ho capito
  • Re: Problema PHP 5.3.6

    Allora...

    io facevo riferimento a questa query:
    
    
    $update=mysql_query("UPDATE user SET time='".$now."',  luogo='Mappa', luogo_a='Mappa', ullacc='".$data2."', connesso='1', ip='".$ip."', ultimaexp = '".$now."' WHERE nome='".$user."'");//aggiorno valori
    
    
    volevo capire se l'update sul campo del db luogo='Mappa' è proprio così nel codice oppure 'Mappa' nel codice reale è qualcos'altro... poi mi dici di che tipo è il campo 'luogo' su db? E' varchar, text, o cosa?
  • Re: Problema PHP 5.3.6

    Dunque dopo il LOGIN si entra in un area riservata all’utente, l’utente in se si può spostare da LUOGO a LUOGO (Per intenderci parliamo di un Gioco) tramite dei comando di spostamento (Esiste proprio una pagina chiamata luogo.php dove si forniscono tutte le informazioni del luogo e li recupera tramite query la posizione del luogo in se), ritornando a noi ogni Luogo ha un nome e in questo caso nel DB la “Chat” si chiama mappa.php.. può essere che è sbagliata questa pagina quindi non mi pesca bene l’id del luogo e/o le info che dicano dove si trova l’utente?

    varchar(200) latin1_swedish_ci
  • Re: Problema PHP 5.3.6

    Prima di risponderti all'ultimo problema, c'è da modificare il codice di controllo della sessione dopo il login.

    in pratica:
    
    
    <?php
    session_start();  
    
    require_once('includiamo il collegamento con il DB');  
    require_once('include/controllo_sessione.php');  
    
    if(isset($_SESSION['nome']) && !empty($_SESSION['nome'])){
    
    $row=mysql_fetch_array(mysql_query("SELECT * FROM user WHERE nome='".$user."'"));
    
    …… ?>
    Codice HTML 
    
    <- Fine Pagina dopo </body> </html> ->
    <?php
    }else{
       echo"<center><b>Accesso Negato!</b>
       <br />
       Sessione non valida, stai accedendo alla Pagina non dal Login corretto</center>";
    }
    ?>
    
    diventa:
    
    
    <?php
    session_start();  
    
    require_once('includiamo il collegamento con il DB');  
    require_once('include/controllo_sessione.php');  
    
    if(isset($_SESSION['nome']) && !empty($_SESSION['nome'])){
    
    $row=mysql_fetch_array(mysql_query("SELECT * FROM user WHERE nome='".$_SESSION['nome']."'"));
    
    …… ?>
    Codice HTML 
    
    <- Fine Pagina dopo </body> </html> ->
    <?php
    }else{
       echo"<center><b>Accesso Negato!</b>
       <br />
       Sessione non valida, stai accedendo alla Pagina non dal Login corretto</center>";
    }
    ?>
    
    perché nelle pagine interne $user non è definito... io ti consiglierei di creare un file separato per il controllo e di includerlo in tutte le pagine dove è necessario capire se la sessione è su...

    Fammi sapere di questa modifica
  • Re: Problema PHP 5.3.6

    Ah... non avevo notato che c'è un file controllo_sessione..
  • Re: Problema PHP 5.3.6

    Dunque, inizio subito con il modificare in TUTTE le pagine la seconda parte che mi hai gentilmente composta in modo da andare a verificare subito se funziona, ti tengo aggiornato ci varrà però del tempo prima che le modifichi tutte (Max un ora).

    Uhm per file di controllo cosa intendi? uhm ma quello più che altro è questo:
    
    <?php
    if(isset($_SESSION['nome']) && !empty($_SESSION['nome'])){
    
    $agg=mysql_query("UPDATE user SET online=NOW() WHERE nome='".$user."'");
    
    $query=mysql_query("UPDATE user SET online='0000-00-00 00:00:00', luogo='Fuori dal Gioco', luogo_a='Fuori dal Gioco' connesso='0' WHERE online < DATE_SUB(NOW(),INTERVAL 5 MINUTE)");
    
    }
    ?>
    
  • Re: Problema PHP 5.3.6

    Intendevo dire che questa roba qui
    
    $control=mysql_fetch_array($control1);
    $_SESSION['nome'] = $control['nome'];
    $user=$_SESSION['nome'];
    
    non dovrebbe, ma potrebbe dare risultati diversi in php4 e php5 perché mysql_fetch_array restituisce, in teoria per default, un array "normale" (con indici numerici) e uno associativo, ma se ti serve _solo_ l'array associativo, allora tanto vale usare mysql_fetch_assoc che di fatto equivale a fare una chiamata di tipo mysql_fetch_array($nome_risorsa, MYSQL_ASSOC) che è certamente di più chiara lettura

    poi magari il problema non è quello, ma una stampa della variabile $user prima di fare insert e update, giusto per controllare il valore che ha, io lo farei

    Se posso permettermi un altro consiglio per migliorare la leggibilità del codice, quando trasferisci il controllo a un altro script, di fatto quello corrente deve essere terminato per cui invece di
    
    if($pgnum!='1'){ //controllo se il pg esiste
        header("Location: php_errori/utente_inesistente.php");
        }else{
    ...
    }
    
    secondo me ti conviene scrivere
    
    if($pgnum!='1'){ //controllo se il pg esiste
        header("Location: php_errori/utente_inesistente.php");
        exit();
    }
    ....
    
    il risultato è lo stesso, ma eviti i super else di dimensioni spropositate
  • Re: Problema PHP 5.3.6

    In risposta a undefined:

    Dunque in pratica devo sostituire da mysql_fetch_array a mysql_fetch_assoc giusto?

    Successivamente modificare il "Controllo” con la chiusura exit(); giusto?


    Ti ringrazio veramente tanto, siete molto gentili sul serio spero di risolvere questo problema ^_^
  • Re: Problema PHP 5.3.6

    Ewan ha scritto:


    Uhm per file di controllo cosa intendi? uhm ma quello più che altro è questo:
    Intendevo questo: centralizzare il controllo dell'esistenza di una sessione in un sono file da includere in tutti gli altri così da evitare di dover cambiare molti file, ma non so se è conveniente nel tuo caso un refactoring del genere e se ne hai tempo... lascia stare per ora secondo me e risolvi i problemi di funzionamento...

    In generale quando c'è codice ripetuto in diversi file questo va come dire 'isolato' in un file a parte, che può contenete varie function... questo almeno per la programmazione procedurale che usi tu. Se usassi quella ad oggetti il discorso sarebbe simile, ma di più facile implementazione...
  • Re: Problema PHP 5.3.6

    Quindi ora procedo pagina per pagina a modificare la parte dl codice che mi hai mandato, giusto?
  • Re: Problema PHP 5.3.6

    Si... sostituisci $user con $_SESSION['nome']...

    good luck
  • Re: Problema PHP 5.3.6

    Inizio a breve e ti tengo informato, un ultima cosa visto che sopra ho postato il modulo di LOGIN e MAIN mi potresti dare una mano con la criptazione della pass in sha1?
  • Re: Problema PHP 5.3.6

    Mi stai chiedendo cose troppo semplici che potresti trovare su google

    cmq vedi qui:

    http://www.php.net/manual/en/function.sha1.ph
  • Re: Problema PHP 5.3.6

    Dunque ho provveduto a fare le modifiche richieste ma sembra proprio che non và, vi posto il codice aggiornato sperando di trovare una soluzione:

    MAIN (main.php)
    
    <?php
    require_once("config.php"); //connessione al db
    
    $giorno=date('j');
    $mese=date('M');
    if($mese=="Jan"){$meseOK="Gennaio";}
    if($mese=="Feb"){$meseOK="Febbraio";}
    if($mese=="Mar"){$meseOK="Marzo";}
    if($mese=="Apr"){$meseOK="Aprile";}
    if($mese=="May"){$meseOK="Maggio";}
    if($mese=="Jun"){$meseOK="Giugno";}
    if($mese=="Jul"){$meseOK="Luglio";}
    if($mese=="Aug"){$meseOK="Agosto";}
    if($mese=="Sep"){$meseOK="Settembre";}
    if($mese=="Oct"){$meseOK="Ottobre";}
    if($mese=="Nov"){$meseOK="Novembre";}
    if($mese=="Dec"){$meseOK="Dicembre";}
    $ora=date('H:i');
    $anno=date('Y');
    $data="$giorno"." $meseOK"." $anno"." $ora";
    $data2="$giorno"." $meseOK"." $anno"." $ora";//Calcolo la data testuale
    
    $pg=$_POST['pg'];
    $pass=$_POST['pass'];
    
    $control1=mysql_query("SELECT * FROM user WHERE nome='".$pg."' AND password='".$pass."'");//selezione utente da db
    
    
    
    $pgnum=mysql_num_rows($control1);
    
    $control=mysql_fetch_assoc($control1);
    
    $ip=$_SERVER["REMOTE_ADDR"]; //recupero l'ip
    
    if($pgnum!='1'){ //controllo se il pg esiste
    header("Location: php_errori/utente_inesistente.php");
    exit();
    }
    if($control[ban]=='1'){
    header("Location: php_errori/utente_bannato.php");
    exit();
    }
    if($control[connesso]=='1'){
    header("Location: php_errori/utente_collegato.php");
    exit();	
    }
    if(($ip==$control['ip']) OR ($control['connesso']=='0')){
    	
    session_start();
    
    $_SESSION['nome'] = $control['nome'];
    
    $user = mysql_real_escape_string($_POST['pg']);
    
    $user = htmlentities ($_POST['pg']);
    
    $pass = mysql_real_escape_string($_POST['pass']);
    
    $pass = htmlentities ($_POST['pass']);
    
    
    $user=$_SESSION['nome'];
    
    $now=time();//recupero time
    
    $insert=mysql_query("INSERT INTO accessi (nome,data,data2,ip,stato) VALUES ('".$user."','".$data."',NOW(),'".$ip."','entrato')");//inserisci accesso
    
    $update=mysql_query("UPDATE user SET time='".$now."',  luogo='Mappa', luogo_a='Mappa', ullacc='".$data2."', connesso='1', ip='".$ip."', ultimaexp = '".$now."' WHERE nome='".$user."'");//aggiorno valori
    
    header('Location: main2.php', true);//mando la prima pagina
    }
    ?>
    
    Codice inserito in alto in ogni pagine:
    
    <?php
    session_start(); 
    
    require_once('include/include.php'); 
    require_once('include/controllo_sessione.php'); 
    
    if(isset($_SESSION['nome']) && !empty($_SESSION['nome'])){
    
    $row=mysql_fetch_array(mysql_query("SELECT * FROM user WHERE nome='".$_SESSION['nome']."'"));
    
    ….?>
    
    Come prima, mi fa accedere però non riconosce il Luogo e in alcune pagine sembra proprio che non riconosce nemmeno l'utente.

    Quanto alla criptazione non ho capito come si fa l'hash
  • Re: Problema PHP 5.3.6

    Da qui non posso aiutarti ulteriormente. Dovresti analizzare meglio tutto il flusso e tutti i file che sono coinvolti...

    Lo sha1 è semplicissimo:
    
    
    //esempio
    
    $stringa="pippo";
    
    $stringa_hash=sha1($stringa);
    
    
Devi accedere o registrarti per scrivere nel forum
34 risposte