Newsgroup: it.comp.www.php
Titolo: help con redirect

1- ciao a tutti non è molto che lavoro con php, stò impazzendo nella
ricerca della soluzione per uno script php !!!
in locale funziona correttamente (easyphp), sul web avendo uno spazio
windows con iis ed ho qualche problemino ....
vi spiego il problema :
vorrei che avvenuto il login dell'utente fosse caricata un'altra
pagina.
Lo script così postato funziona ma se tolgo i commenti inizio/fine
problema non effettua più il redirect ?
2- colgo l'occasione per chiedere conferma è corretto scrivere :
header("Location: $url");
 die();
perchè ho notato che qualora fosse già stato inviato qualsiasi cosa
sullo stream di output non avveniva pià il redirect.
3- come posso evitare l'sql injection in mysql mi postatequalche link
valido ?
vi ringrazio anticipatamente
saluti roberto
//inizio codice
<?php include("../../include/session.php"); ?>
<?php include("../../include/config.inc.php"); ?>
<?php
$login = $_POST['login'];
$password = $_POST['password'];
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri nel file
config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri
nel file config.inc.php");
$query = "SELECT * FROM operatori WHERE login_operatore='$login' AND
password_operatore='$password' ";
$result = mysql_query($query, $db);
if ($row = mysql_fetch_array($result))
{
	//echo "ok";
	$_SESSION['autorizzato'] = TRUE;
	$_SESSION['login']= $row[login_operatore];
	$_SESSION['livello'] = $row[livello];
  	/*        ********************* inizio problema **************
  	// se loggato cambio la data dell'ultimo accesso
	$time = date( "%Y-%m-%d H:i:s" );
	$query = "UPDATE  operatori SET " ;
	$query .= " data_ultimo_accesso = '$time' ";
	$query .= " WHERE login_operatore='$login' AND
password_operatore='$password' ";
	$result = mysql_query($query, $db)
	or die("Query failed: " . mysql_error());
       */    ********************* fine problema **************
	$url="../index.php";
}
else
{
//echo "not ok";
$_SESSION['autorizzato'] = FALSE;
	$url="index.php?err=1";
}
 header("Location: $url");
 //header("Refresh: 0; URL=$url");
 die();
?>

 
Le specifiche richiedono che l'url specificata sia assoluta, nonostante 
alcuni browser accettano anche un'url relativa.
Il problema di eventuale output lo risolvi con le Output Control 
Functions (ob_start etc..)
Per eseguire il redirect puoi anche utilizzare il package HTTP di pear:
http://pear.php.net/manual/en/package.http.http.redirect.php
Prima di accodare $login e $password alla query sql fai una passata di 
mysql_real_escape_string
	Francesco

 	Francesco
grazie mille provo subito

 
ho controllato su aruba non posso
grazie Francesco
a buon rendere

 ho controllato su aruba non posso
Per installare i package di pear hai due strade: utilizzare il programma 
pear (da consolle, penso non fattibile su aruba) oppure copiare 
fisicamente i file sul tuo spazio web, modificando il path per 
l'inclusione (al posto di require_once 'HTTP.php' metterai require_once 
'/myPEAR/HTTP.php';
	Francesco


:-) ieri in locale avevo  copiato fisicamente la classe nella stessa
directory , poi ho aperto il file HTTP.php e ho copiato solo la
funzione all'interno del mio codice ma cmq non mi ha funzionato
on-line, è anche vero che non avevo inserito il path corretto o meglio
da come hai scritto prima (ancora non ho letto il link) dovrei inserire
http://www.ilserver.it/cms/admin/login/file.php
ed io invece avevo inserito il path assoluto dalla direcory radice
ovvero /cms/admin/login/file.php   (e a dir la verità non mi caricava
il css associato)
spero di risolvere al più presto !!!
grazie per la collaborazione
vado a studiare
saluti rob

 Per visualizzare l'output: ob_end_flush();
è stato questo codice che mia ha salvato da un tracollo nervoso :-)
mettendo come prima istruzione della pagina funziona correttamente
inserendolo nel punto indicato (vedi codice) non funzionava
ma mi sapresti spiegare il motivo ?
l'unica cosa che avrei incluso prima a parte i file di configurazione
per l'accesso al db è la session_start() ... e che differenza fà?
se inizio a bufferizzare dopo cio cosa cambia ?
forse perchè i dati della sessione sono memorizzate nell'intestazione
http ?
adesso funziona ma vorrei capirci un pò di più !!!
grazie nuovamente,
spero un giorno di potermi sdebitare inqualche altro linguaggio di
programmazione
salutissimi rob
(in allegato trovi il file dell'arrabiatura :-)
<?php ob_start();  ?>
<?php include("../../include/session.php"); ?>
<?php include("../../include/config.inc.php"); ?>
<?php
//ob_start();   <-------------------- SE LO METTO QUI NON FUNZIONA
$login = $_POST['login'];
$password = $_POST['password'];
//$login = mysql_real_escape_string($login);
//$password = mysql_real_escape_string($password);
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri nel file
config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri
nel file config.inc.php");
$query = "SELECT * FROM operatori WHERE login_operatore='$login' AND
password_operatore='$password' ";
$result = mysql_query($query, $db);
if ($row = mysql_fetch_array($result))
{
	//echo "ok";
	$_SESSION['autorizzato'] = TRUE;
	$_SESSION['login']= $row[login_operatore];
	$_SESSION['livello'] = $row[livello];
  	// se loggato cambio la data dell'ultimo accesso
	$time = date( "Y-m-d H:i:s" );
	$query = "UPDATE  operatori SET " ;
	$query .= " data_ultimo_accesso = '$time' ";
	$query .= " WHERE login_operatore='$login' AND
password_operatore='$password' ";
	$result = mysql_query($query, $db)
	or die("Query failed: " . mysql_error());
	$url="Location:
http://".$HTTP_SERVER_VARS['HTTP_HOST']."/public/cms/admin/index.php";
}
else
{
//echo "not ok";
$_SESSION['autorizzato'] = FALSE;
	$url="Location:
http://".$HTTP_SERVER_VARS['HTTP_HOST']."/public/cms/admin/login/index.php?err=1";
 
 
}
 header($url);					   
exit;
ob_end_flush();
 
 
?>

 //ob_start();   <-------------------- SE LO METTO QUI NON FUNZIONA
Come vedi mandi a video 4 righe vuote.
perche' non raccogli il tutto tra un unico tag di parser, invece di 
aprire e chiudere i tag tutte le volte?
<?PHP
	include("../../include/session.php");
	include("../../include/config.inc.php");
	ob_start();
	....
	....
?>
	Francesco


 .. in effetti hai ragione
nuovamente infinitamente grazie