problema con header(Location....)

pollat

Utente Attivo
10 Ott 2013
63
0
6
Sono 5 giorni che son dietro ad uno script che ha un problema con "header (Location...)" senza aver risolto molto :
in pratica ho uno script di un modulo per spedire e-mail che funziona bene ma che non funziona nell'esecuzione dell'header ,
ossia non appare la pagina di reindirizzamento di conferma "comunicazione avvenuta", ma appare solo la pagina dello script bianca.
Ho controllato che non vi siano output prima di usare header (anche se non sono espertissimo di php) ma non funziona comunque.

Lo script è questo:

PHP:
<?php
if(substr(basename($_SERVER['PHP_SELF']), 0, 11) == "imEmailForm") {
	include '../res/script_invio_mail_net_office.php';
	$form = new ImForm();
	$form->setField('destinatario', $_POST['imObjectForm_43_1'], '', false);
	$form->setField('oggetto', $_POST['imObjectForm_43_2'], '', false);
	$form->setField('messaggio', $_POST['imObjectForm_43_3'], '', false);
	$form->setField('Allega', $_POST['imObjectForm_43_4'], '', true);
	$form->setFile('File 1', $_FILES['imObjectForm_43_5'], $imSettings['general']['public_folder'], '', '');
	$form->setFile('File 2', $_FILES['imObjectForm_43_6'], $imSettings['general']['public_folder'], '', '');
	$form->setFile('File 3', $_FILES['imObjectForm_43_7'], $imSettings['general']['public_folder'], '', '');
	$form->setField('', $_POST['imObjectForm_43_8'], '', true);

	if(@$_POST['action'] != 'check_answer') {
		if(!isset($_POST['imJsCheck']) || $_POST['imJsCheck'] != 'jsactive' || (isset($_POST['imSpProt']) && $_POST['imSpProt'] != ""))
			die(imPrintJsError());
		$form->mailToOwner('[email protected]',$_POST['imObjectForm_43_1'],$_POST['imObjectForm_43_2'],$_POST['imObjectForm_43_3'],false);
		$form->mailToCustomer('[email protected]','[email protected]','Conferma invio e-mail','Conferma invio della mail che hai compilato con i seguenti dati: ',true);
		header("Location: ../comunicazione_inviata.html");
		exit();
	} else {
		echo $form->checkAnswer(@$_POST['id'], @$_POST['answer']) ? 1 : 0;
	}
}


// End of file


Mi date una mano a scoprire cosa non va, please????
 
Sono 5 giorni che son dietro ad uno script che ha un problema con "header (Location...)" senza aver risolto molto :
in pratica ho uno script di un modulo per spedire e-mail che funziona bene ma che non funziona nell'esecuzione dell'header ,
ossia non appare la pagina di reindirizzamento di conferma "comunicazione avvenuta", ma appare solo la pagina dello script bianca.
Ho controllato che non vi siano output prima di usare header (anche se non sono espertissimo di php) ma non funziona comunque.

Lo script è questo:

PHP:
<?php
if(substr(basename($_SERVER['PHP_SELF']), 0, 11) == "imEmailForm") {
	include '../res/script_invio_mail_net_office.php';
	$form = new ImForm();
	$form->setField('destinatario', $_POST['imObjectForm_43_1'], '', false);
	$form->setField('oggetto', $_POST['imObjectForm_43_2'], '', false);
	$form->setField('messaggio', $_POST['imObjectForm_43_3'], '', false);
	$form->setField('Allega', $_POST['imObjectForm_43_4'], '', true);
	$form->setFile('File 1', $_FILES['imObjectForm_43_5'], $imSettings['general']['public_folder'], '', '');
	$form->setFile('File 2', $_FILES['imObjectForm_43_6'], $imSettings['general']['public_folder'], '', '');
	$form->setFile('File 3', $_FILES['imObjectForm_43_7'], $imSettings['general']['public_folder'], '', '');
	$form->setField('', $_POST['imObjectForm_43_8'], '', true);

	if(@$_POST['action'] != 'check_answer') {
		if(!isset($_POST['imJsCheck']) || $_POST['imJsCheck'] != 'jsactive' || (isset($_POST['imSpProt']) && $_POST['imSpProt'] != ""))
			die(imPrintJsError());
		$form->mailToOwner('[email protected]',$_POST['imObjectForm_43_1'],$_POST['imObjectForm_43_2'],$_POST['imObjectForm_43_3'],false);
		$form->mailToCustomer('[email protected]','[email protected]','Conferma invio e-mail','Conferma invio della mail che hai compilato con i seguenti dati: ',true);
		header("Location: ../comunicazione_inviata.html");
		exit();
	} else {
		echo $form->checkAnswer(@$_POST['id'], @$_POST['answer']) ? 1 : 0;
	}
}


// End of file


Mi date una mano a scoprire cosa non va, please????

Ciao, questa è la pagina completa o solo un estratto?
Prima del tag di apertura del php ci sono spazi o altro?
ma i log che errore ti danno?
 
Ciao, questa è la pagina completa o solo un estratto?
Prima del tag di apertura del php ci sono spazi o altro?
ma i log che errore ti danno?

è la pagina completa e non appare nessun errore (l'email viene inviata regolarmente) ma una volta eseguito lo script invece di apparire la pagina presente nel tag header(location...), appare la pagina bianca con l'indirizzo del file di script sopra riportato
 
Ultima modifica:
è la pagina completa e non appare nessun errore (l'email viene inviata regolarmente) ma una volta eseguito lo script invece di apparire la pagina presente nel tag header(location...), appare la pagina bianca con l'indirizzo del file di script sopra riportato

ed i file di log non danno errori? mi pare strano.
Sostituisci exit(); con die('prova'); e vediamo se lo stampa.

Ciao
 
ed i file di log non danno errori? mi pare strano.
Sostituisci exit(); con die('prova'); e vediamo se lo stampa.

Ciao

Sì, stampa "prova" quindi c'è un errore nello script come dicevi tu... ma come faccio a capire dove è l'errore (è un file di 5000 righe) e dove trovo i file di log?

p.s. grazie cmq. per l'aiuto
 
Quando leggi "prova" con il test che ti ha consigliato f107, hai letto anche qualche altro output ? Se si devi correggere lo script di modo che non ci siano output prima della chiamata di header().
In ogni caso, prova ad impostare il parametro secondario di header su true che nel malaugurato caso sia presente un altro header location questo verrà rimpiazzato dalla tua ultima istruzione invece di sommarsi alle informazioni da inviare al browser.
 
Quando leggi "prova" con il test che ti ha consigliato f107, hai letto anche qualche altro output ? QUOTE]

No, solo "prova".



E come faccio ad impostarlo su true, cosa devo aggiungere?

Scrivi cosi
PHP:
header("Location: ../comunicazione_inviata.html", true);

ma sei sicuro che in script_invio_mail_net_office.php non ci sia neanche un echo o simili?

Facci sapere.
Ciao
 
ma sei sicuro che in script_invio_mail_net_office.php non ci sia neanche un echo o simili?
Ciao

No guarda non son sicuro per niente... ma è un file di più di 7000 righe....

Ma scusate non posso risolvere il tutto senza impazzire mettendo un redirect html tra le parentesi del "die()" ???

Una roba del genere
die ("<html><head><META HTTP-EQUIV='REFRESH' CONTENT='0; URL=../comunicazione_inviata.html'></head></html>")


Avrei qualche inconveniente con questa soluzione???
 
Ultima modifica:
Ciao, potresti usare anche javascript
PHP:
echo "<script>location.href='pagina.html';</script>";
 
al posto di header()
anche la soluzione html potrebbe funzionare
 

Discussioni simili