problema con header in area riservata

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Buongiorno a tutti,
Ecco il problema: ho un'area di backoffice con accesso riservato che viene controllato attraverso una variabile di sessione "autorizzato" che viene impostata quando l'utente effettua il login correttamente.
Da qui in poi tutte le pagine iniziano con il controllo
PHP:
session_start();
//se non c'è la sessione registrata
if (!$_SESSION['autorizzato']) {
  echo "<h1>Area riservata, accesso negato.</h1>";
  echo "Per effettuare il login clicca <a href='index.php'><font color='blue'>qui</font></a>";
  die;
}
 
//Altrimenti Prelevo il codice identificatico dell'utente loggato
session_start();
$cod = $_SESSION['cod']; //id cod recuperato nel file di verifica

Il tutto funziona egregiamente.
Ora sto terminando una pagina di variazione di record all'interno di un db;
innanzitutto richiamo una pagina che tramite un piccolo form chiede di selezionare quello che si vuole modificare (per esempio un id utente), cliccando sul submit carico una pagina che contiene le righe che rispondono al criterio di ricerca (possono essere fino a 20, 25 righe), ogni riga contiene un bottone "modifica la riga".
Cliccando su "modifica la riga" richiamo una pagina aggiorna.php, molto semplice:
PHP:
session_start();
//se non c'è la sessione registrata
if (!$_SESSION['autorizzato']) {
  echo "<h1>Area riservata, accesso negato.</h1>";
  echo "Per effettuare il login clicca <a href='index.php'><font color='blue'>qui</font></a>";
  die;
}
 
//Altrimenti Prelevo il codice identificatico dell'utente loggato
session_start();
$cod = $_SESSION['cod']; //id cod recuperato nel file di verifica


	$riga = $_POST['utente'];
	$lez = $_POST['lezione'];

	$nom = $_POST['nome'];
	$cog = $_POST['cognome'];
	$ema = $_POST['email'];
	$tel = $_POST['telefono'];
	$tra = $_POST['transazione'];
	$pag = $_POST['pagamento'];
	$pos = $_POST['postiprenotati'];
	$not = $_POST['note'];

	include 'connect.php';
	$richiesta = ("UPDATE utentiscuola SET nome = '$nom', cognome = '$cog', email = '$ema', telefono = '$tel', username = '$ema', idTransazione = '$tra', pagamento = '$pag', postiprenotati = '$pos', note = '$not' WHERE id_utente = '$riga' ");
	$fai = mysql_query($richiesta);

	
	header("location: modificapreno.php");

Il problema sta nel comando header.
Vengo effettivamente ridirezionato sulla pagina richiesta (che e' quella che mi mostrava l'elenco delle righe da modificare) ma ricevo il messaggio "Area riservata, accesso negato...ecc." come se la sessione non venisse più riconosciuta.

Spero di essere stato chiaro... e comunque grazie per i suggerimenti che verranno
 
Ho pensato di eseguire la funzione di aggiornamento sulla stessa pagina dell'elenco (modificapreno.php), richiamando la funzione di aggiornamento ed effettuando il refresh della pagina alla fine dell'aggiornamento stesso.
Però se uso
PHP:
header('Location: '.$_SERVER['PHP_SELF']);
mi ricarica la pagina ma vuota, se utilizzo
PHP:
header('Location: http://www.teatro7.com/backoffice/modificapreno.php');
oppure
PHP:
header('Location: modificapreno.php');
ricevo sempre l'avviso che si tratta di area riservata...

Per completezza di informazione
 
hai messo due volte session_start(); nella stessa pagina, togli quello sotto ;-)

Per non parlare di non controllare i dati del POST, tanto valeva mettere direttamente questo array nella query senza instanziare altri variabili; ma è altra storia.
 
Ho modificato come segue, mettendo tutto sulla stessa pagina, ma l'errore resta lo stesso:
PHP:
<?php
session_start();
//se non c'è la sessione registrata
if (!$_SESSION['autorizzato']) {
  echo "<h1>Area riservata, accesso negato.</h1>";
  echo "Per effettuare il login clicca <a href='index.php'><font color='blue'>qui</font></a>";
  die;
}
 
//Altrimenti Prelevo il codice identificatico dell'utente loggato
//session_start();
$cod = $_SESSION['cod']; //id cod recuperato nel file di verifica


$lezione = $_POST["idlezione"];
$emailcliente = $_POST["mailcliente"];



if (isset($_POST['aggiornamelo'])){
aggiornare();}


function aggiornare(){
	$lez = $_POST['lezione'];
	$riga = $_POST['riga'];
	$nom = $_POST['nome'];
	$cog = $_POST['cognome'];
	$ema = $_POST['email'];
	$tel = $_POST['telefono'];
	$tra = $_POST['transazione'];
	$pag = $_POST['pagamento'];
	$pos = $_POST['postiprenotati'];
	$not = $_POST['note'];

	include 'connect.php';
	$richiesta = ("UPDATE utentiscuola SET nome = '$nom', cognome = '$cog', email = '$ema', telefono = '$tel', username = '$ema', '', idTransazione = '$tra', '', pagamento = '$pag', postiprenotati = '$pos', note = '$not' WHERE id_utente = '$riga'");
	$fai = mysql_query($richiesta);

	header('Location: http://www.teatro7.com/backoffice/modificapreno.php');
}


?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Variazione date lezioni di cucina</title>
<link href="backoffice.css" rel="stylesheet" type="text/css" />



</head>

<body>


<div style="margin-left: 10px;">
	<table>
		<tr>
			<td width="30px">Cod.</td>
			<td width="150px">Nome</td>
			<td width="150px">Cognome</td>
			<td width="200px">Email</td>
			<td width="150px">Telefono</td>
			<td width="250px">Transazione</td>
			<td width="150px">Pagamento</td>
			<td width="200px">Posti Prenotati</td>
			<td width="250px">Note</td>
		</tr>

		<? 

			if ($lezione != "") {
		
				include 'connect.php';
				$query = ("SELECT * FROM utentiscuola WHERE id_lezione='$lezione'");
				$vai = mysql_query($query);
				$righe = mysql_num_rows($vai);

				?>


				<p><? echo "$cod"; ?>, risultano <? echo "$righe"; ?> record registrati nella lezione <? echo "$lezione"; ?><br>
					Effettua i cambiamenti desiderati e clicca su <span class="rosso">AGGIORNA</span> <b>per ogni riga modificata</b></p>
				<br>
				<hr>
				<br>
				

				
				<?
				$i = 0;

				while ($righe > $i) {
					$cod = mysql_result($vai, $i, "id_utente");
					$nome = mysql_result($vai, $i, "nome");
					$cognome = mysql_result($vai, $i, "cognome");
					$email = mysql_result($vai, $i, "email");
					$telefono = mysql_result($vai, $i, "telefono");
					$transazione = mysql_result($vai, $i, "idTransazione");
					$pagamento = mysql_result($vai, $i, "pagamento");
					$postiprenotati = mysql_result($vai, $i, "postiprenotati");
					$note = mysql_result($vai, $i, "note");

				?>
				<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
				<tr>
					<td><? echo $cod; ?></td>
					<td><input type="text" name="nome" value="<? echo $nome; ?>" size="15"></td>
					<td><input type="text" name="cognome" value="<? echo $cognome; ?>" size="15"></td>
					<td><input type="text" name="email" value="<? echo $email; ?>" size="20"></td>
					<td><input type="text" name="telefono" value="<? echo $telefono; ?>" size="15"></td>
					<td><input type="text" name="transazione" value="<? echo $transazione; ?>" size="25"></td>
					<td><input type="text" name="pagamento" value="<? echo $pagamento; ?>" size="18"></td>
					<td align="center"><input type="text" name="postiprenotati" value="<? echo $postiprenotati; ?>" size="5"></td>
					<td><textarea name="note" rows="4" cols="30" value="<? echo "$note"; ?>"></textarea></td>
				</tr>

				<tr>
					<td colspan="9" align="center" class="rosso">
						<input type="hidden" name="lezione" value="<? echo $lezione; ?>">
						<input type="hidden" name="riga" value="<? echo $cod; ?>">
						<input name="aggiornamelo" type="submit" value=" AGGIORNA LA RIGA <? echo $cod; ?>  "></td>
				</tr>
				<tr>
					<td colspan="9"><hr></td>
				</tr>

				</form>

				<?
				$i++;
				}
			}
		

		?>

	

	</table>
</div>






</body>
</html>

le modifiche vengono regolarmente effettuate, ma al momento del redirect (header... ecc) il browser mi risponde sempre che è area riservata..
Se non c'e' soluzione pazienza, ridurrò ulteriormente i passaggi, mettendo tutto sulla stessa pagina di scelta iniziale, che essendo una pagina con una struttura un pochino complessa preferivo lasciar stare...
Comunque continuo a non capire per quale motivo un header inviato all'interno di un'area protetta non debba funzionare (visto che sono loggato regolarmente e la sessione è in corso: tutte le altre pagine all'interno della stessa area funzionano senza problemi...)
 
Non potendo perdere ore a capire come risolvere, alla fine ho messo tutto sulla stessa pagina, sia il form per la selezione che l'esposizione del risultato, dando come action al form
PHP:
echo $_SERVER['PHP_SELF'];
e con if isset richiamo la funzione che cerca e mostra. La pagina è diventata un po' complessa ma ce la posso fare... Intanto funziona perfettamente, che è la cosa più importante.
Grazie per l'aiuto
 

Discussioni simili