Problema Header location...

  • Creatore Discussione Creatore Discussione Emix
  • Data di inizio Data di inizio

Emix

Utente Attivo
15 Feb 2010
596
0
16
Salve...
Ho un problema... o forse due :/
Io ho una pagina di inserimento barcode o email :
HTML:
<html>
<head>
<title> Modifica User </title>
<style type="text/css">
body {
font: Eras Medium ITC;
color:#FFF
}
</style>

<style type="text/css">
#main {
	width:672px;
	height:300px;
	position:absolute;
	top:50%;
	left:50%;
	margin:-150px 0 0 -336px;
	color:#FFF;
}
</style>
</head>
<body bgcolor="#000000">
<form action="puntifidelity.php" method="post" name="code_barcode">
<div id="main" >
<table border=0 cellpadding=5 cellspacing=5 align="center">
<tr>
<td colspan="2">
<img src="http://forum.mrwebmaster.it/images/logo.png" align="middle" />
</td>
</tr>
<tr>
<td colspan="2">
Inserisci l'email o il barcode:
</td>
</tr>
<tr>
<td>
<p align="center">Email:</p>
</td>
<td>
    <p align="center"><input name="mail" type="text" id="mail"></p>
</td>
</tr>
<tr>
<td>
<p align="center">Barcode:</p>
</td>
<td>
    <p align="center"><input name="Barcode" type="text" id="Barcode"></p>
</td>
</tr>
<tr>
<td colspan="2" align="center">

    <input name="invia" type="submit" id="invia" value="Invia">
    <input type="reset" name="submit" value="Reset">
</td>
</tr>
</table>
</div>
</form> 
</body>
</html>

Da qui vado alla pagina puntifidelity.php

PHP:
<?php
session_start();
//CONNESSIONE AL DATABASE
include('connect.php');
//RECUPERA DATI DAL FORM
$mail = $_POST['mail'];
$mail = addslashes(htmlspecialchars(($_POST['mail'])));
$Barcode = $_POST['Barcode'];
$Barcode = addslashes(htmlspecialchars(($_POST['Barcode'])));
if($Barcode =="" ){
	
	
	if($mail==""){
		echo ('Almeno uno dei due campi deve essere riempito!');
	header('Location: puntifidelity.htm');
	}else{
	 if((!isset($_POST['mail'])) || (!eregi("^([a-z0-9\._-]+)(@[a-z0-9.-]+)(\.{1}[a-z]{2,4})$", $_POST['mail'])))
			{
            echo "Attenzione, formato email non valido.";
            //ritorno al form
            }else{
			$ctrl_mail = @mysql_query("SELECT * FROM fidelity            WHERE mail='$mail'") or die (mysql_error());
                   if(@mysql_num_rows($ctrl_mail)>0)
                   {
			       $_SESSION['mail'] = $mail;
				   header('Location:fidelitypoint.php');
                   }else{
					   echo ('Email non trovata!');
					   header('Location: puntifidelity.htm');
				   }
	             }
		}
		}else{
			$ctrl_barcode = @mysql_query("SELECT * FROM fidelity WHERE barcode='$Barcode'") or die (mysql_error());
                if(@mysql_num_rows($ctrl_barcode)>0)
                {
			    $_SESSION['barcode'] = $Barcode;
				  header('Location:fidelitypoint.php');
                }else{
					   echo ('Barcode non trovato!');
					   header('Location: puntifidelity.htm');
				   }
}
?>

Qui cominciano i problemi... Come vedete la pagina effettua dei controlli.. se barcode non inserito controlla email se non è inserito tira fuori messaggio uno dei due va inserito e ti DOVREBBE riportare alla pagina di isnerimento.. Ma qui ricevo errore... L'errore è il seguente :

HTML:
Almeno uno dei due campi deve essere riempito!
Warning: Cannot modify header information - headers already sent by (output started at blablabla/puntifidelity.php:14) in blablabla/puntifidelity.php on line 15
Il controllo chiaramente lo effettua... ma non mi rimanda alla pagina... idem se il barcode non esiste o se l'email non esiste....

Inoltre , ammesso che io isnerisca tutto per bene e arrivo alla pagina fidelitypoint.php :

PHP:
<?php
session_start();
include('connect.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>Inserimento punti</title>
<style type="text/css">
body {
	font: Eras MediUM ITC;
	color:#FFF;
	background-color: #000;
}
</style>
<style type="text/css">
#main {
	width:672px;
	height:300px;
	position:absolute;
	top:30%;
	left:50%;
	margin:-150px 0 0 -336px;
	color: #000;
}
.testo {
	color: #FFF;
}
</style>
</head>

<body bgcolor="#000000">
<div id="main">
<form action="aggiungi_punti.php" method="post" name="inserisci"> 
<table cellspacing=5 cellpadding=5 align="center">
<tr>
<td colspan="2" bgcolor="#000000">
<img src="http://forum.mrwebmaster.it/images/logo.png" align="middle" />
</td>
</tr>
<tr>
<td class="testo">
Inserisci punti a BARCODE :
</td> 
<td>
<input name="bcode" type="text" id="bcode" readonly="readonly" value="
<?php
echo $_SESSION[barcode];
?> 
">
</td>
</tr>
<tr>
<td class="testo">
Inserisci punti a EMAIL:
</td> 
<td>
<input name="email" type="text" id="email" readonly="readonly" value="
<?php 
echo $_SESSION[mail];
?> 
">
</td>
</tr>
<tr>
<td class="testo">
Data Acquisto:
</td>
<td class="testo">
    <input name="dataacquisto" type="text" id="dataacquisto" value=""> 
</td>
</tr>
<tr>
<td class="testo">
Importo Scontrino:
</td>
<td class="testo">	
<input type="text"  name="importo" onKeyUp="vendita()" value="" id="importo" size=35/>
</td>
</tr>
<tr>
<td class="testo">
Numero Scontrino:
</td>
<td class="testo">
   <input name="numeroscnt" type="text" id="numeroscnt" value=""> 
</td>
</tr>
<tr>
<td class="testo">
Punti
</td>
<td class="testo">
<input type="text" readonly value="0" name="punti" id="punti" size=35/>
</td>
</tr> 
<tr>
<td class="testo">	
<input name="mail" type="hidden" value="<?php echo $_SESSION[mail]; ?>">
<input name="sottrazione" type="hidden" onKeyUp="vendita()" id="sottrazione" value="20">
</td>
</tr>
<tr>
<td colspan="2" class="testo">
    <input name="inserisci" type="submit" id="inserisci" value="Inserisci"> 
</td>
</tr>
</table>
</form> 
</div>

Dai valori che ho passato nelle precedenti pagine in sessione, me li riprende tutti e due!!! anche se io passo in sessione o email o barcode!!
Aiuto :S :incazz:
 
nessuno sa dirmi cosa devo sostituire? a me sembra tutto ok apparentemente....
 
Warning: Cannot modify header information - headers already sent by (output started at blablabla/puntifidelity.php:14) in blablabla/puntifidelity.php on line 15
Php non consente di mandare in output nessun carattere nemmeno uno spazio prima dell'uso della funzione header()
se proprio non riesci a mettere la funzione prima degli echo puoi usare javascript
Codice:
<script>
location.href='indirizzo.html';
</script>
 
Sistemando tutti i problemi il tuo script diventa:
PHP:
<?php
require_once __DIR__ . '/connect.php';

session_start();

$email = isset($_POST['email']) ? trim($_POST['email']) : '';
$email = addslashes(htmlspecialchars($email));

$barcode = isset($_POST['barcode']) ? trim($_POST['barcode']) : '';
$barcode = addslashes(htmlspecialchars($barcode));

if ('' == $barcode && '' == $email) {
    header('Location: puntifidelity.htm');
    die('Almeno uno dei due campi deve essere riempito!');
}

if ($email !== '') {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        header('Location: puntifidelity.htm');
        die('Attenzione: formato email non valido.');
    }

    $sql = 'SELECT * FROM fidelity WHERE mail = \'%s\'';
    $query = mysql_query(sprintf($sql, $email)) or die(mysql_error());

    if (mysql_num_rows($query) == 0) {
        header('Location: puntifidelity.htm');
        die('Email non trovata!');
    }

    $_SESSION['mail'] = $email;
} else {
    $sql = 'SELECT * FROM fidelity WHERE barcode = \'%s\'';
    $query = mysql_query(sprintf($sql, $barcode)) or die(mysql_error());

    if (mysql_num_rows($query) == 0) {
        header('Location: puntifidelity.htm');
        die('Barcode non trovato!');
    }

    $_SESSION['barcode'] = $barcode;
}

header('Location: fidelitypoint.php');
 
Sistemando tutti i problemi il tuo script diventa:
PHP:
<?php
require_once __DIR__ . '/connect.php';

session_start();

$email = isset($_POST['email']) ? trim($_POST['email']) : '';
$email = addslashes(htmlspecialchars($email));

$barcode = isset($_POST['barcode']) ? trim($_POST['barcode']) : '';
$barcode = addslashes(htmlspecialchars($barcode));

if ('' == $barcode && '' == $email) {
    header('Location: puntifidelity.htm');
    die('Almeno uno dei due campi deve essere riempito!');
}

if ($email !== '') {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        header('Location: puntifidelity.htm');
        die('Attenzione: formato email non valido.');
    }

    $sql = 'SELECT * FROM fidelity WHERE mail = \'%s\'';
    $query = mysql_query(sprintf($sql, $email)) or die(mysql_error());

    if (mysql_num_rows($query) == 0) {
        header('Location: puntifidelity.htm');
        die('Email non trovata!');
    }

    $_SESSION['mail'] = $email;
} else {
    $sql = 'SELECT * FROM fidelity WHERE barcode = \'%s\'';
    $query = mysql_query(sprintf($sql, $barcode)) or die(mysql_error());

    if (mysql_num_rows($query) == 0) {
        header('Location: puntifidelity.htm');
        die('Barcode non trovato!');
    }

    $_SESSION['barcode'] = $barcode;
}

header('Location: fidelitypoint.php');
non funziona un cavolo e mi restituisce mille errori...
Mentre @criric ho provato ma, o non capisco dove va messo, oppure mi da errore....io ho preso la tua parte di codice e l'ho incollata al posto dei miei header
 
Quali errori, precisamente?

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at puntifidelity.php:1) in puntifidelity.php on line 4

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at puntifidelity.php:1) in puntifidelity.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at puntifidelity.php:1) in puntifidelity.php on line 13
Almeno uno dei due campi deve essere riempito!

prova inserendo una mail impossibile... ossia nel campo email ho scritto ffds
 
PHP:
<?php
//definisco i parametri della connessione: nomeserver,username,password e nome db
$server="85.94.212.170";
$username="m49477d1";
$password="password";
$nomedb="m49477d1";
$admin_email = "[email protected]";
//mi connetto al server mysql
$db=mysql_connect($server,$username,$password);
if ($db == FALSE) {
die ("Errore nella connessione.");
}
//mi connetto al database specificato nella variabile $nomedb
mysql_select_db($nomedb, $db)
or die ("Errore nella selezione del database");
?>
 
Modifica in questo modo:
PHP:
<?php
$server = '85.94.212.170';
$username = 'm49477d1';
$password = 'password';
$nomedb = 'm49477d1';

$admin_email = '[email protected]';

$db = mysql_connect($server, $username, $password) or die('Errore nella connessione.');
mysql_select_db($nomedb, $db) or die('Errore nella selezione del database.');
Nota che manca il tag di chiusura (?>). Dev'essere così per evitare che vengano inviati eventuali spazi bianchi alla fine del file.
 
Ultima modifica:
basterebbe anche lo script di criric ma non mi funziona/non so come metterlo...
 
puoi inserirli in questo modo
PHP:
<?php
if ($mail == "") {
    ?>
    <script>
        alert('Il campo mail deve essere riempito!');
        location.href='puntifidelity.htm';
    </script>
    <?php
}
?>
 
@alex
ciao
approfitto anche per chiedere:
perchè non suggerisci quando ci sono problemi di header (che secondo me è comodo anche per non far vedere dove reinirizza al contrario di js o del tag <meta http-equiv=....) di usare
PHP:
<?php
ob_start();
//.............
ob_end_flush();
?>
le due istruzioni hanno controindicazioni?
 

Discussioni simili