Header problemen ik weet het, maar ik zie het echt niet

Status
Niet open voor verdere reacties.

Ewergreen

Gebruiker
Lid geworden
15 mrt 2008
Berichten
273
Warning: Cannot modify header information - headers already sent by (output started at C:\xampplite\htdocs\TestLab\Z-Matic calculator Layout\index.php:19) in C:\xampplite\htdocs\TestLab\Z-Matic calculator Layout\index.php on line 31

PHP:
<?php  session_start();
include('connection.php');

//Definieer variabelen

$name=$_POST['name'];
$company=$_POST['company'];
$email=$_POST['email'];
$lang=$_POST['lang'];

if(isset($_POST['submit'])) 
  {
     if(!$email == "" && (!strstr($email,"@") || !strstr($email,"."))) 
              {
               echo "<b>Please provide a valid E-mail adress. Return to the form with your browsers \"back\" button.</b>\n"; 
			   }
	if(empty($name) || empty($company))
			  {
                echo "<b>Please provide us with your company name. Return to the form with your browsers \"back\" button.</b>\n";
              }	
	if(empty($lang))
			  {
                echo "<b>To continue to the form, we need to know what language we should load for you, please provide it. Return to the form with your browsers \"back\" button.</b>\n";
              }	
	$sql="INSERT INTO klant (name,company,email,lang) VALUES('$name','$company','$email','$lang')";
	$query=mysql_query($sql) or die ("Kon de query niet uitvoeren");
	
	$_SESSION['semail'] = $email;
	$_SESSION['slang'] = $lang;
	
	header ("Location: $lang/page1.php");
	
   }
else
   {
 ?>
 
Als je header() gebruikt mag je geen output voor die functie geven.

Aangezien je eerst controleert op fouten en die echoëd krijg je dus die melding.
Daarnaast wordt er altijd wat ingevoerd, ook al zijn er fouten gevonden.

Waarschijnlijk werkt dit beter:
PHP:
<?php  session_start();
include('connection.php');
 
//Definieer variabelen
 
$name=$_POST['name'];
$company=$_POST['company'];
$email=$_POST['email'];
$lang=$_POST['lang'];
 
if(isset($_POST['submit'])) 
  {
     if(!$email == "" && (!strstr($email,"@") || !strstr($email,"."))) 
              {
               echo "<b>Please provide a valid E-mail adress. Return to the form with your browsers \"back\" button.</b>\n"; 
			   }
	if(empty($name) || empty($company))
			  {
                echo "<b>Please provide us with your company name. Return to the form with your browsers \"back\" button.</b>\n";
              }	
	if(empty($lang))
			  {
                echo "<b>To continue to the form, we need to know what language we should load for you, please provide it. Return to the form with your browsers \"back\" button.</b>\n";
              }	else {
	$sql="INSERT INTO klant (name,company,email,lang) VALUES('$name','$company','$email','$lang')";
	$query=mysql_query($sql) or die ("Kon de query niet uitvoeren");
 
	$_SESSION['semail'] = $email;
	$_SESSION['slang'] = $lang;
 
	header ("Location: $lang/page1.php");
     }
   }
else
   {
 
Please provide us with your company name. Return to the form with your browsers "back" button.
Warning: Cannot modify header information - headers already sent by (output started at C:\xampplite\htdocs\TestLab\Z-Matic calculator Layout\index.php:19) in C:\xampplite\htdocs\TestLab\Z-Matic calculator Layout\index.php on line 31

Helaas...
 
Weet je zeker dat ook in include('connection.php'); niets naar het scherm geschreven wordt?
Zet alle echo's om naar commentaar en probeer het nog eens...
 
Het is geen geheim wat er in connection staat:

PHP:
<? 
 
 $DB_SERVER = 'localhost';
 $DB_LOGIN = 'zmatic';
 $DB_DB = 'zmatic';
 $DB_PASSWORD = 'wouter';
 
 $connection = mysql_connect($DB_SERVER ,$DB_LOGIN, $DB_PASSWORD);
 if (!connection) {
     echo "The system can't connect to the database. Please try again.";
	 exit;
	 
	}
	
 $db = mysql_select_db($DB_DB, $connection);
 
 if (!$db) {
     echo "Can't find the database.";
	 exit;
	 
	 }

?>
 
Tja, daar zie ik ook niets dat fout kan zijn, maar een mens ziet zo gauw iets over het hoofd.

Als ik met een dergelijk probleem zit, dan sla ik eerst een kopie van het huidige bestand op.
Vervolgens haal ik steeds een stukje weg en probeer het nog eens, net zolang tot het wel werkt. Vermoeiend, maar vaak vind ik het dan wel.
 
Tja, daar zie ik ook niets dat fout kan zijn, maar een mens ziet zo gauw iets over het hoofd.

Please provide us with your company name. Return to the form with your browsers "back" button.

Er is dus iets naar het scherm geschreven voordat de header aangeroepen wordt! en daarom krijg je de foutmelding!
 
Code:
if(isset($_POST['submit'])){
	if(!$email == "" && (!strstr($email,"@") || !strstr($email,"."))){
		echo "<b>Please provide a valid E-mail adress. Return to the form with your 
		browsers \"back\" button.</b>\n";
	}else{
		if(empty($name) || empty($company)){
			echo "<b>Please provide us with your company name. Return to the form 
			with your browsers \"back\" button.</b>\n";
		}else{
			if(empty($lang)){
                echo "<b>To continue to the form, we need to know what language we should load for you,
				please provide it. Return to the form with your browsers \"back\" button.</b>\n";
			} else {
				$sql="INSERT INTO klant (name,company,email,lang) VALUES('$name','$company','$email','$lang')";
				$query=mysql_query($sql) or die ("Kon de query niet uitvoeren");

				$_SESSION['semail'] = $email;

				$_SESSION['slang'] = $lang;

				header ("Location: $lang/page1.php");
			}

		}
	}
}else{

{

Denk ik.....
 
Pieter, links en rechts nog wat moeten aanpassen, maar het werkt nu wel.

Bedankt!
 
Geen dank.

Nog even een paar opmerkingen:
Ik zou:
$xxx = trim($_POST['xxx']) ipv $xxx = $_POST['xxx'] gebruiken!

Nooit dit soort waarden direct in een database plaatsen.
maar "mysql_real_escape_string" gebruiken, dus

$xxx = mysql_real_escape_string($xxx);

en dan pas in de database plaatsen.

Je neemt, voor zover ik kan zien, geen maatregelen tegen gebruikers die 100 keer dezelfde gegevens in de database willen plaatsen!

Succes gewenst.
 
In plaats van zoiets als...
PHP:
if(isset($_POST['submit'])){
	if(!$email == "" && (!strstr($email,"@") || !strstr($email,"."))){
		echo "<b>Please provide a valid E-mail adress. Return to the form with your 
		browsers \"back\" button.</b>\n";
	}else{
		if(empty($name) || empty($company)){
			echo "<b>Please provide us with your company name. Return to the form 
			with your browsers \"back\" button.</b>\n";
		}else{
			if(empty($lang)){
                echo "<b>To continue to the form, we need to know what language we should load for you,
				please provide it. Return to the form with your browsers \"back\" button.</b>\n";
			} else {
				$sql="INSERT INTO klant (name,company,email,lang) VALUES('$name','$company','$email','$lang')";
				$query=mysql_query($sql) or die ("Kon de query niet uitvoeren");

				$_SESSION['semail'] = $email;

				$_SESSION['slang'] = $lang;

				header ("Location: $lang/page1.php");
			}

		}
	}
}else{

{

kan je ook

PHP:
if(isset($_POST['submit'])){

	$bericht = "";
	$fout     =  0;

	if(!$email == "" && (!strstr($email,"@") || !strstr($email,"."))){
		$fout = 1;
		$bericht .= "<b>Please provide a valid E-mail adress. Return to the form with your 
		browsers \"back\" button.</b>\n";
	}

	if(empty($name) || empty($company)){
		$fout = 1;
		$bericht .=  "<b>Please provide us with your company name. Return to the form 
		with your browsers \"back\" button.</b>\n";
	}

	if(empty($lang)){
		$fout = 1;
                $bericht .=   "<b>To continue to the form, we need to know what language we should load for you,
			please provide it. Return to the form with your browsers \"back\" button.</b>\n";
		} 

	if ($fout == 0){
			$sql="INSERT INTO klant (name,company,email,lang) VALUES('$name','$company','$email','$lang')";
			$query=mysql_query($sql) or die ("Kon de query niet uitvoeren");

			$_SESSION['semail'] = $email;

			$_SESSION['slang'] = $lang;

			header ("Location: $lang/page1.php");
	}else{
		echo $bericht;
	}
}else{
	bla bla code;
}

doen. Het voordeel is dat alle foutmeldingen tegelijk doorlopen worden en dat er echt niets voor 'header' geschreven wordt.

Het is maar idee, misschien vind je het iets.:eek:
 
Laatst bewerkt:
Als je geen output wilt, kun je ook gebruik maken van buffering mbv
PHP:
ob_start();
echo 'muahahahaha ik mag output doen voor mijn header!';
header ( 'Location: index.php' );
ob_flush();

Zie ook de beschrijving van ob_start() ;)
 
Output bufferen is meer een lapmiddel dan het probleem oplossen.

Wanneer er gewoon een goede structuur in de code zit krijg je dit probleem niet :)
 
Mwah dat is ook maar een kwestie van hoe je er mee werkt ;) Als je goed gebruik maakt van output buffering, dan hoef je niet meer na te denken over wat je echo't.

(Met een goede structuur kom je overigens ook een eind hoor, daar ben ik het wel mee eens :p Liever een goeie scheiding tussen controller en view werk... )
 
Haal dit weg:
PHP:
header ("Location: $lang/page1.php");

en gebruik deze echo dan:
PHP:
echo "<script type='text/javascript'>window.location='home.php'</script>";


Ik heb hetzelfde probleem gehad omdat sessies en headers niet goed met elkaar werken kan je beter dit soort scripts gebruiken.
 
Nee, als je applicatie goed in elkaar zit heb je nergens last van. :rolleyes:
 
agja dan zit die van mij niet goed inelkaar maar het werkt wel zo.:p
En dat is wat ik wil hebben. haha
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan