- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problema PHP 5.3.6
-
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.
-
3 cose:
- sotto session_start(); deve esserci session_regenerate_id()
- isset($_SESSION['key']) deve essere array_key_exists('key', $_SESSION) && !empty($_SESSION['key'])
- usa setlocale(LC_ALL, "it_IT") invece di quell'ambaradam sui nomi dei mesi
+1 edit
$pg = $_POST['pg'];
$pass = $_POST['pass'];- e` insicuro;
- 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..