Warning su redirect della pagina

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
Ciao a tutti,

ho un problema piuttosto fastidioso sul redirect ad una pagina dopo l'esecuzione di un insert MySQL/PHP. Questo è lo script incriminato:

PHP:
<?php
mysql_query ("INSERT INTO utenti_accesso (id, id_utenti_profilo, user, password, nominativo, flag_stato)
                VALUES ('NULL', '".$_POST["profilo"]."', '".$_POST["user"]."',SHA1('".$_POST["password"]."'),
                        '".$_POST["nome"]."', '0')");
header("LOCATION: ./administrator.php?function=utenti");
?>
come noterete una volta eseguita la query deve fare il redirect su administrator.php richiamando la variabile function=utenti. Nella pagina administrator ho questa porzione di codice:

PHP:
<?php 
            switch ($_GET["function"]) 
            {
              case 'utenti':
                require("./script/utenti/elenco.php");
              break;
              
              case 'adduser':
                require("./script/utenti/add.php");
              break;
              
              case 'saveuser':
                require("./script/utenti/save.php");
              break;                          
            }
           ?>
che mi dovrebbe fare il require di elenco.php. Purtroppo però il codice in oggetto mi da questo errore:

Codice:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/CinteTesino/admin/administrator.php:13) in /var/www/CinteTesino/admin/script/utenti/save.php on line 5
Chi mi sa spiegare come risolvere il problema?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
c'è dell'output html prima di header (guarda che potrebbe essere anche un semplice spazio messo prima del tag php).
puo provare a risolvere aggiungendo

PHP:
<?php
ob_start();//alla prima riga della pagina
//...................
mysql_query ("INSERT INTO utenti_accesso (id, id_utenti_profilo, user, password, nominativo, flag_stato)
                VALUES ('NULL', '".$_POST["profilo"]."', '".$_POST["user"]."',SHA1('".$_POST["password"]."'),
                        '".$_POST["nome"]."', '0')");
header("LOCATION: ./administrator.php?function=utenti");
exit(); //metti l'exit dopo i redirect
//................
ob_end_flush();//all'ultima
?>
 

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
Ciao e grazie per la risposta. Purtroppo il warning rimane anche dopo la tua modifica. Adesso lo script è così:

PHP:
<?php
ob_start();
mysql_query ("INSERT INTO utenti_accesso (id, id_utenti_profilo, user, password, nominativo, flag_stato)
                VALUES ('NULL', '".$_POST["profilo"]."', '".$_POST["user"]."',SHA1('".$_POST["password"]."'),
                        '".$_POST["nome"]."', '0')");
header("LOCATION: ./administrator.php?function=utenti");
exit();
ob_end_flush();
?>
cos'altro posso provare?
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Non mi torna, come ti ha detto borgo la cosa piu probabile è che ci sia dell'output prima, posta il codice completo
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
strano dovrebbe funziare, l'ob_start modifica il flusso.
se proprio non funzia, non è molto elegante e si vede con visualizza sorgente se uno fa in tempo a bloccare la pagina, ma potresti ricorre al tag meta
PHP:
<?php
mysql_query ("INSERT INTO utenti_accesso (id, id_utenti_profilo, user, password, nominativo, flag_stato)
                VALUES ('NULL', '".$_POST["profilo"]."', '".$_POST["user"]."',SHA1('".$_POST["password"]."'),
                        '".$_POST["nome"]."', '0')");
echo "<meta http-equiv='Refresh' content='0; URL=./administrator.php?function=utenti'>";
exit();
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
Non mi torna, come ti ha detto borgo la cosa piu probabile è che ci sia dell'output prima, posta il codice completo
ma con l'ob_start dovrebbe funziare (ho degli script in cui lo uso e dove ho proprio del vero html) es.
PHP:
<?php
ob_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento senza titolo</title>
</head>
<body>
<!-- eccetera eccetera.... -->
<?php
//.....
header("LOCATION: pinco_pallo.php");
exit();
?>
</body>
</html>
<?php
ob_end_flush(); 
?>
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
ciaoma con l'ob_start dovrebbe funziare (ho degli script in cui lo uso e dove ho proprio del vero html) es.
PHP:
<?php
ob_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento senza titolo</title>
</head>
<body>
<!-- eccetera eccetera.... -->
<?php
//.....
header("LOCATION: pinco_pallo.php");
exit();
?>
</body>
</html>
<?php
ob_end_flush(); 
?>
Potrebbe esserci dell'output prima essendo inclusa la pagina
 

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
Non ho capito perchè, però dopo qualche minuto si è messo a funzionare.... misteri del PHP. Grazie a tutti!
 

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
dopo aver aggiunto

PHP:
ob_start();
e


PHP:
ob_end_flush();
ho semplicemente svuotato la cache e si è messo ad andare. Secondo me nei vari esperimenti mi è rimasto dentro qualcosa che dava fastidio... cosa non si sa