Php refresh probleem

Status
Niet open voor verdere reacties.

herman2

Gebruiker
Lid geworden
17 dec 2008
Berichten
18
Hallo!

Ik zit met het volgende:
Bij het versturen van onderstaande code komt er niet opgemaakte footer code in beeld. Dit komt door de houtje touwtje oplossing met html-refresh code, kan iemand mij helpen met een iets betere code zodat de paginaopmaak er goed uit blijft zien, en bij het posten niet de onopgemaakte footer tekst te zien blijft?

Ik krijg het niet voor elkaar om header('Location: pagina.php'); in te passen, ik krijg dan nl een warning headers already sent foutmelding.

Kan iemand mij hiermee helpen?

(let op, bij onderstaande code is er html code weggelaten)

Gr!
PHP:
<?php
include('dbconnect.php');
mysql_query( 'set names utf8' );
?>

<?php
if (!isset($_POST['submit'])) {
?>

            <form method="post" id="2009_form">
            <label for="name" title="Voer je naam in"><input type="text" id="naam" name="naam" />Naam</label>
            <label for="email" title="Voer je e-mailadres in"><input type="text" id="email" name="email" />E-mail</label>
           
            <label for="jongensnaam" title="Voer jongensnaam in"><input type="text" id="jongensnaam" name="jongensnaam" />Jongensnaam</label>
            <label for="meisjesnaam" title="Voer meisjesnaam in"><input type="text" id="meisjesnaam" name="meisjesnaam" />Meisjesnaam</label>
            <input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR'] ?>">
            </label>
            <label for="formsubmit" class="nocontent"><input type="submit" name="submit" value="Versturen!"></label>
        </form>
       
        <?php
} else {
$naam = $_POST['naam'];
$email = $_POST['email'];
$jongensnaam = $_POST['jongensnaam'];
$meisjesnaam = $_POST['meisjesnaam'];
$ip = $_POST['ip'];

mysql_query( 'set names utf8' );
mysql_query("INSERT INTO top_2009 (naam, email, jongensnaam, meisjesnaam, ip) VALUES ('$naam', '$email', '$jongensnaam', '$meisjesnaam', '$ip')") or die(mysql_error());


$my_email = "#";
$message = "#";
$subject = "#";
$headers = "#";
mail($my_email,$subject,$message,$headers);
echo "<meta http-equiv='refresh' content='0;url=#' />";
}

?>
            
             <HTML Footer tekst >
 
Laatst bewerkt door een moderator:
Als je vanaf regel nou eens alles een regel omhoogschuift? Zodat er búiten de php tags helemaal geen whitespace staat. Dus geen spatie, geen enter, helemaal niks. Dan zou je de header wel moeten kunnen gebruiken.

[EDIT]
Zolang je queries ook geen errors geven.
[/EDIT]
 
Hmm waarschijnlijk is de hele pagina opbouw voor dit probleem niet goed:

Hoe krijg ik dit dan werkend in deze pagina?

PHP:
<?php
include('dbconnect_2009.php');
mysql_query( 'set names utf8' );
?>
<?php
if (!isset($_POST['submit'])) {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


		<title>
			
		</title>

		<meta name="description" content="#" />
		<meta name="keywords" content="#/>

		<link href="../css/style_2009.css" rel="stylesheet" type="text/css" media="all" />

		<!--[if lte IE 7]>
			<link href="/styles/index-lte-ie-7.css" rel="stylesheet" type="text/css" />
		<![endif]-->

		<!--[if lte IE 6]>
			<link href="/styles/index-lte-ie-6.css" rel="stylesheet" type="text/css" />
		<![endif]-->

		
		<link href="/styles/icons/icon.png" rel="shortcut icon" type="image/x-icon" />
		

		<!--[if lte IE 7]>
			<link href="/styles/icons/favicon.ico" rel="shortcut icon" type="image/x-icon" />
		<![endif]-->
<script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">

			$(function(){
				// Vangt elk formulierelement
				$("label[title]").each(function(){
					$(this).append("<div class=\"infopop\">");	
					titletext = $(this).attr("title");
					$(this).removeAttr("title");
					$(".infopop",this).css({opacity:0}).html(titletext);
					$("input",this).focus(function(){
						// Mouseover
						doFocus(this);
					}).blur(function(){
						// MouseOut
						doBlur(this);
					});
				});
			});

			function doFocus(obj) {
				$(obj).addClass("active").parents("label").addClass("active").find(".infopop").animate({opacity:1,left:492},500);
			}
			
			function doBlur(obj) {
				if (validate(obj)) {
					isGood(obj);
				}
			}
			
			function reportErr(obj, message) {
				$(obj).addClass("error").parents("label").removeClass("isgood").addClass("required").addClass("error").find(".infopop").html(message).addClass("errorpop").animate({opacity:1,left:492},500);
			}
			
			function isGood(obj) {
				$(obj).removeClass("error").removeClass("active").parents("label").addClass("isgood").removeClass("error").removeClass("active").find(".infopop").removeClass("errorpop").animate({opacity:0,left:513},500);
			} 	

			function validate(obj) {
				// Extend het jQuery object om Regular expression masks op te nemen die aan eigenschappen zijn toegekend
				mask = jQuery.extend({textfieldmask: /^[a-z\.\s-]{5,}$/i,phonemask: /^[0-9\(\)\+\.\s-]{8,}$/i,passwordmask: /^\w{5,}$/, emailmask:/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/});
				// Extend het jQuery object om foutmeldingen toe te voegen die aan eigenschappen zijn toegekend
				errmsg = jQuery.extend({textfielderr:"Minimaal 5 letters",phoneerr: "Vergeet het kengetal niet",passworderr:"Minimaal 5 karakters",emailerr:"Ongeldig adres",matcherr: "Moet overeenkomen"});
			
				// Stel variabelen in die de details bevatten van welk masker we gaan gebruiken en of dit veld overeen moet komen met een ander veld
				var masktouse = null;
				var mustmatch = null;
				// Bepaal tegen welk mask-type we gaan valideren
				switch(obj.name) {
					case "name": 		masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
					case "phone": 		masktouse="phonemask"; 			errtouse="phoneerr"; 		break;
					case "username": 	masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
					case "email": 		masktouse="emailmask"; 			errtouse="emailerr"; 		break;
					case "password": 	masktouse="passwordmask"; 		errtouse="passworderr"; 	mustmatch="verpassword"; 	break;
					case "verpassword": masktouse="passwordmask"; 		errtouse="passworderr"; 	mustmatch="password"; 		break;
				}
				// Controleer of het element een verplicht veld is, voordat we er tegen gaan valideren
				if($(obj).parents("label").hasClass("required") && masktouse) {
					// Stel een snelle manier in om het object dat we valideren te bereiken
					pointer = $(obj);
					// Test de waarde van het veld tegen de Regular Expression 
					if (mask[masktouse].test(pointer.val())) {
						// Het veld is succesvol gevalideerd!
						
						// Kijk of het veld overeen moet komen met een ander veld binnen het formulier
						if (mustmatch) {
							// Het moet overeenkomen, dus pak het object waarmee het overeen moet komen 
							matchobj = $("#"+mustmatch);
							if (matchobj.val()!='' && matchobj.val()!=pointer.val()) {
								// De velden komen niet overeen, dus laat een foutmelding voor beide zien
								reportErr(obj,errmsg["matcherr"]);	
								reportErr(matchobj,errmsg["matcherr"]);
							}
							else {
								// Of de velden komen overeen, of het veld is nog niet afgerond
								// Als het andere veld afgerond is roep je de isGood-functie om de foutmeldingen te verwijderen
								if (matchobj.val()!='') { isGood(matchobj);}
								return true;
							}
						}
						else {
							// Er hoeft niets gechecked te worden, dus return true - validatie gelukt!
							return true;
						} 
					}
					else { 
						// De validatie van dit veld met een Regular Expression mislukt
						reportErr(obj,errmsg[errtouse]);
						return false; 
					}
				} 
				else {	
					// Dit is geen verplicht veld, dus hoeven we dit nergens tegen te valideren			
					return true;
				}
			}
		</script>
	

		
		
		
			</head>

	<body>
		<div id="top">

			<div id="head">
				
			</div>

		</div>
        <div id="main-menu">
			<?php include("../menu_top_2009.php"); ?>
		</div>
		<div id="container">
		  <div id="core">
				
			
			<div id="topkolom_2009">
			  
 			
            <div id="kolom2en3">  
            <form method="post" id="2009_form">
			<label for="name" title="Voer je naam in"><input type="text" id="naam" name="naam" />Naam</label>
			<label for="email" title="Voer je e-mailadres in"><input type="text" id="email" name="email" />E-mail</label>
			
            <label for="jongensnaam" title="Voer jongensnaam in"><input type="text" id="jongensnaam" name="jongensnaam" />Jongensnaam</label>
            <label for="meisjesnaam" title="Voer meisjesnaam in"><input type="text" id="meisjesnaam" name="meisjesnaam" />Meisjesnaam</label>
            <input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR'] ?>">
            </label>
			<label for="formsubmit" class="nocontent"><input type="submit" name="submit" value="Versturen!"></label>
		</form>
        
        <?php
} else {
$naam = $_POST['naam'];
$email = $_POST['email'];
$jongensnaam = $_POST['jongensnaam'];
$meisjesnaam = $_POST['meisjesnaam'];
$ip = $_POST['ip'];
mysql_query( 'set names utf8' );
mysql_query("INSERT INTO #tabel (naam, email, jongensnaam, meisjesnaam, ip) VALUES ('$naam', '$email', '$jongensnaam', '$meisjesnaam', '$ip')") or die(mysql_error());
$my_email = "#";
$message = "#";
$subject = "#";
$headers = "#";
mail($my_email,$subject,$message,$headers);
header('Location: bedankt.php');
}
?>

              </div>
              
              <div id="kolom4rechts">
              #tekst
              
              
              <br /></p>
 			  </div>
              
            </div>
  



		  </div>
			<div id="foot">
				<div id="copyright">
					<?php include("../footer_links.php"); ?>
			  </div>
				<div class="clear"></div>
		  </div>

	</div>

<!-- Google -->

<!-- Google -->
		
	</body>
</html>
 
Als je de header even weglaat. Komt er dan een foutmelding van MySQL? Of van de mailfunctie?
 
Als ik header('Location: bedankt.php'); weglaat, werkt het, hij post in de database en stuurt een mail.
Als output op het scherm krijg ik dan alleen de html-code die gegenereerd wordt bij het footer gedeelte..
 
Nou, daar snap ik echt geen biet van. Dan zou ik het toch nog maar even bij de meta-refresh houden.

Vreemd vind ik het wel... :confused:
 
Het gaat om deze pagina
http://tinyurl.com/yappzvz
Hij werkt wel, post in de database, en stuurt een mail naar mij wanneer er iets is toegevoegd, ik wil alleen dat de "lelijke" pagina na het posten in de database niet wordt getoond.
Dat lelijke resultaat is het footer gedeelte wat onder de refresh code staat..
 
<?php

$database_server = mysql_connect("db_naam",
"inlog", "pasw");


mysql_select_db("db", $database_server);


?>
 
Hmm, hij geeft aan dat de output is begonnen in dbconnect_2009.php op regel 23... Maar je hebt helemaal geen 23 regels.
 
Ik heb de code op geschoond voordat ik het postte, daarom zit er denk ik een verschil in.
Hij gebruikt nu de nieuwe "schone" versie.

Ik gebruik eigenlijk altijd de vorige "niet schone" versie, tot nu toe zonder problemen..
 
Er zit nog ergens een enter.

Als je kijkt in de bron van de pagina, zie je dat die begint met een <br /> die wordt door de parser erin gezet. Daarboven staat echter nog een lege regel, een enter dus.

Die wordt waarschijnlijk door dbconnect_2009.php daar gezet.

Doe eens ctrl+a in je file, en plak het hier dan tussen
PHP:
tags. Dus zo dat we echt de héle file hebben en je niet per ongeluk een lege regel of iets dergelijks weghaalt.
 
Idd, na het sluiten zaten nog 2 enters (sorry :S) (in dbconnect_2009)
ik heb m weer aangepast.
 
Geeft niet, maar ik begrijp dat ie het nu wel doet?

Overigens zou je eigenlijk nog wel een controle moeten uitvoeren op de input.
 
! hij doet 't idd!

Ik heb de controle uitgezet, zodat ik niet telkens iets van betekenis in hoefde te vullen, bedankt voor je hulp en geduld :)

Gr.
 
Ah oké, dan moet je dat lege record wat ik net ingevoerd had maar even verwijderen ;)

Succes ermee, ik heb al gestemd ;)
 
wat eventueel ook helpt is aan het begin:

PHP:
ob_start();

en aan het eind

PHP:
ob_end_flush();

te gebruiken, hierdoor wordt zo'n waarschuwing als headers already sent genegeerd
 
Even niet persoonlijk opvatten, maar dat is absoluut geen oplossing. Dat is een lapmiddel.

Je kunt ook gewoon display-errors uitzetten (in dit geval helpt dat nog niet helemaal) en error_reporting op het allerlaagste level.

Maar die errors / warnings worden niet voor niets gegeven. Ze worden gegeven zodat je ze op kunt lossen, niet zodat je ze kunt onderdrukken.

En het komt trouwens ook de performance niet ten goede.
 
Laatst bewerkt:
ik geef je helemaal gelijk, maar ik las dit toevallig een keer toen ik er zelf mee bezig was...
met ingewikkelde projecten wens je anders soms wel dat je zoiets kunt gebruiken, zodat de gebruiker geen last heeft van dat ene foutje ;)
 
Nou, ik niet. Ook bij een ingewikkeld project debug ik het totdat de fout opgelost is. Maarja, dat is natuurlijk persoonlijk.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan