Problema PHP 5.3.6

di il
34 risposte

Problema PHP 5.3.6

Buongiorno, oggi vi proporrò una strana nonché curiosa cosa che mi accade con PHP 5, credetemi non so più cosa fare.. Premetto, sto lavorando su un sito nel Hosting Altervista il problema però è nel LOGIN e nel riconoscimento dell’utente nell’area Privata con PHP 5 poichè con PHP 4 funziona.

Dunque iniziamo, io ho la pagina LOGIN (login.php) seguente:

codice PHP:

<form action="main.php" method="post">
<table cellpadding="3" cellspacing="3" width="200">
<tr onmouseover="this.className = 'hlt';" onmouseout="this.className = 'hlu';" class="hlu">
<td><div align="center">Nome:</div></td>
<td><div align="left">
<input type="text" name="pg" id="pg" />
</div></td>
</tr>
<tr onmouseover="this.className = 'hlt';" onmouseout="this.className = 'hlu';" class="hlu">
<td><div align="center">Pass:</div></td>
<td><div align="left">
<input type="password" name="pass" id="pass" max="32" />



Poi la pagina MAIN (main.php):

codice PHP:

require_once("percorso mio per recupera i dati di connessione al DB"); //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

$control1=mysql_query("SELECT * FROM user WHERE nome='".$pg."' AND password='".$pass."'");//selezione utente da db

$pgnum=mysql_num_rows($control1);
$control=mysql_fetch_array($control1);
$ip=$_SERVER["REMOTE_ADDR"]; //recupero l'ip

if($pgnum!="1"){ //controllo se il pg esiste
header("Location: php_errori/utente_inesistente.php");
}else{
if($control[ban]=="1"){
header("Location: php_errori/utente_bannato.php");
}else{
if ($control[connesso]=="1"){
header("Location: php_errori/utente_collegato.php");
}else{
if(($ip==$control[ip]) OR ($control[connesso]=="0")){

session_start();
session_register("nome della sessione");

$_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
}}}}
?>


Mentre le pagine interne dopo il LOGIN hanno tutte questo codice posto in alto prima di ogni cosa:

codice PHP:

session_start();

require_once('includiamo il collegamento con il DB');
require_once('include/controllo_sessione.php');

if((session_is_registered(nome della sessione))&&($_SESSION['nome'])){

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



Dov'è he sbaglio? Perchè in PHP 5 non mi riconosce l'utente e mi dice UTENTE INESISTENZE.

34 Risposte

  • Re: Problema PHP 5.3.6

    Io per prima cosa metterei gli apici singoli a tutti gli array associativi: vedi $control[nome]...

    Vedi cosa accade dopo...
  • Re: Problema PHP 5.3.6

    $control1=mysql_query("SELECT * FROM user WHERE nome='".$pg."' AND password='".$pass."'");//selezione utente da db
    
    
    
    
    $pgnum=mysql_num_rows($control1);
    
    $control=mysql_fetch_array($control1);
    
    $ip=$_SERVER["REMOTE_ADDR"]; //recupero l'ip
    
    if($pgnum!='1'){ //controllo se il pg esiste
    header("Location: php_errori/utente_inesistente.php");
    }else{
    if($control[ban]=='1'){
    header("Location: php_errori/utente_bannato.php");
    }else{
    if ($control[connesso]=='1'){
    header("Location: php_errori/utente_collegato.php");	
    }else{
    if(($ip==$control['ip']) OR ($control['connesso']=="0")){
    	
    session_start();
    session_register("Logged");
    
    $_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'];

    Fatto ma non accade nulla Mi dice sempre utente inesistente
  • Re: Problema PHP 5.3.6

    Allora, rileggendo bene il codice il vero problema è nelle variabili $pg e $pass nella query:

    $control1=mysql_query("SELECT * FROM user WHERE nome='".$pg."' AND password='".$pass."'");//selezione utente da db

    in php5 a differenza di php4 register_globals è settato per default a off e quindi non puoi accedere alle variabili in post con il nome dato nel name del tag input.

    Quindi

    $pg=$_POST['pg'];
    $pass=$_POST['pass'];
    $control1=mysql_query("SELECT * FROM user WHERE nome='".$pg."' AND password='".$pass."'");//selezione utente da db


    ora dovrebbe funzionare sia in php4 che in php5.. controlla se vi sono altre situazioni di questo tipo...
    fammi sapere
  • Re: Problema PHP 5.3.6

    Gentilissimo oltre che preciso, funziona mi fa accedere però all’interno dell’area riservata dopo il LOGIN è come se entrassi però non mi riconosce che Utente entra, forse è dovuto al problema:
    session_register();
    session_is_registered(nome_sessione);
    ?

    Mi conviene quindi trasformare il codice di controllo da così
    
    session_start(); 
    
    require_once('includiamo il collegamento con il DB'); 
    require_once('include/controllo_sessione.php'); 
    
    if((session_is_registered(nome della sessione))&&($_SESSION['nome'])){ 
    
    $row=mysql_fetch_array(mysql_query("SELECT * FROM user WHERE nome='".$user."'"));
    
    a così
    
    session_start();  
    
    require_once('includiamo il collegamento con il DB');  
    require_once('include/controllo_sessione.php');  
    
    if($_SESSION['nome']){  
    
    $row=mysql_fetch_array(mysql_query("SELECT * FROM user WHERE nome='".$user."'"));
    
  • Re: Problema PHP 5.3.6

    Sicuramente session_is_registered va eliminate perché deprecate; io personalmente non l'ho mai usato. Cmq sarebbe meglio:

    <code>
    if(isset($_SESSION['nome']) && !empty($_SESSION['nome'])){

    ......
    </code>

    è un controllo più robusto...
  • Re: Problema PHP 5.3.6

    Potrebbe andare secondo te così:
    
    
    <?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>";
    }
    ?>
    
  • Re: Problema PHP 5.3.6

    Dovrebbe andare... solo che non capisco:
    
    
    require_once('includiamo il collegamento con il DB');  
    
    
    Rimane così nel codice o lo cambi?

    posta gli errori se ci sono...
  • Re: Problema PHP 5.3.6

    Nu nu cambia, li c'è il collegamento al DB es. includes/file.php ^_^ l'ho cambiato solo per il Forum.

    Ecco un errore che però ho riscontrato con PHP 5, questo è il FILE MAIN (main.php)
    
    <?php
    require_once("includo qui la pagina di connessione"); //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_array($control1);
    
    $ip=$_SERVER["REMOTE_ADDR"]; //recupero l'ip
    
    if($pgnum!='1'){ //controllo se il pg esiste
    header("Location: php_errori/utente_inesistente.php");
    }else{
    if($control[ban]=='1'){
    header("Location: php_errori/utente_bannato.php");
    }else{
    if ($control[connesso]=='1'){
    header("Location: php_errori/utente_collegato.php");    
    }else{
    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
    }}}}
    ?> 
    


    Nella variabile $update c’è la voce Mappa ora dopo che faccio il LOGIN perché in quel campo nel DB mi resta vuoto e luogo_a invece viene riempito da Mappa cos’è come ho detto di fare? Visto che non mi segnala il Luogo di dove mi trovo mi dice come se stessi vagando nel nulla XD
  • Re: Problema PHP 5.3.6

    Scusa ma non ho capito quasi nulla di quello che mi hai spiegato potresti essere più preciso:)
  • Re: Problema PHP 5.3.6

    ^_^ Si perdonami, dunque.

    Compilo il Modulo Login inserendo il mio username e pass, da li c’è la verifica nella pagina main.php che controlla se l’user esiste, se l’user è collegato e/o bannato SE non risulta nessuna di questa cosa mi manda alla pagina primaria interna del sito chiamata main2.php. Questa main2.php è una pagina formata da FRAME, ora ritornando alla pagina main.php se vai a vedere in basso l’ultima variabile si chiama $update alla voce luogo=’Mappa’, ora volevo capire perché questo dato MAPPA non me lo manda al db e me lo lascia vuoto?
  • Re: Problema PHP 5.3.6

    La query sembra giusta; vedi se mysql ti da qualche errore e se entri davvero nell'ultimo if...
  • Re: Problema PHP 5.3.6

    Nessun problema in Mysql segnalato, di fatti il mio vero problema sarebbe proprio questo se metto con Altervista PHP 4 attivo funziona mi prende la query quindi mi manda a luogo MAPPA ma se metto a PHP 5 mi fa entrare però il luogo lo lascia vuoto però tutti gli altri campi li prende in pieno.
  • Re: Problema PHP 5.3.6

    Conosci esattamente, in php4 e php5, il valore che assume $user quando lo usi come condizione per l'aggiormamento del DB e che la query di update venga effettivamente eseguita?

    Perché quella variabile fa quattro o cinque capriole:
    
    
    $_SESSION['nome'] = $control['nome'];
    $user = mysql_real_escape_string($_POST['pg']);
    $user = htmlentities ($_POST['pg']);
    
    $user=$_SESSION['nome'];
    
    
  • Re: Problema PHP 5.3.6

    Ma la query è quella che hai inserito oppure è diversa? 'MAPPA' è una stringa tra apici o in realtà nel codice reale è qualcos'altro?
Devi accedere o registrarti per scrivere nel forum
34 risposte