• User Newbie

    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:
    [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" /> [/PHP]

    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 dopo il login:

    
    <?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. 😞


  • User Newbie

    3 cose:

    1. sotto session_start(); deve esserci session_regenerate_id()
    2. isset($_SESSION['key']) deve essere array_key_exists('key', $_SESSION) && !empty($_SESSION['key'])
    3. usa setlocale(LC_ALL, "it_IT") invece di quell'ambaradam sui nomi dei mesi

    +1 edit

    $pg = $_POST['pg'];
    $pass = $_POST['pass'];

    1. e` insicuro;
    2. puoi usare extract su $_POST

    cerca su google "sanitize data to prevent sql injection attacks"

    Vedi che il problema che hai e` l'ultimo dei problemi che hai alla fine..