Archief - PHP: probleemke met formulier

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

XA4

Legacy Member
Aan een formulier beginnen, blijft voor mij toch steeds afwachten hoe het gaat lopen. Maar als het getypte bericht wordt doorgestuurd, ben ik alvast een tevreden mens.

Zover zit ik dus al.
Alleen is er een probleem als niet alle velden zijn ingevuld.
Hierbij wordt wel een melding weergegeven (ga terug en vul alle velden in) maar nu krijg ik geen footer meer. Waarschijnlijk zal ik na deze melding in mijn php-bestand ergens die ontbrekende informatie moeten toevoegen, maar ik heb geen idee waar (en of dat dan al zo is)

Even concreet:
De volledige code van deze php-pagina is als volgt:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<title>Brasserie Criterium</title>
<link rel="stylesheet" type="text/css" href="mijnstijl.css">
<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/scriptaculous.js?load=effects"></script>
<script type="text/javascript" src="js/lightbox.js"></script>
<!--[if IE 6]><link rel="stylesheet" type="text/css" media="screen" href="ie6.css" /><![endif]-->
</head>
<body>
<div id="container">
<div id="header"></div>
<div id="left">
<ul id="menu">
<li><a href="index.htm" class="menu">Home</a>
<li><a href="brasserie.htm" class="menu">Brasserie</a>
<li><a href="feestzaal.htm" class="menu">Feestzaal</a>
<li><a href="brunch.htm" class="menu">Brunch</a>
<li><a href="fotos.htm" class="menu">Foto's</a>
<li><a href="jobs.htm" class="menu">Jobs</a>
<li><a href="contact.php" class="menu">Contact</a>
</ul>
</div>
<div id="right">
<h1>Contact</h1>
<?php

$ip = $_POST['ip']; 
$httpref = $_POST['httpref']; 
$httpagent = $_POST['httpagent']; 
$visitor = $_POST['visitor']; 
$visitormail = $_POST['visitormail']; 
$notes = $_POST['notes'];
$attn = $_POST['attn'];


if (eregi('http:', $notes)) {
die ("Do NOT try that! ! ");
}
if(!$visitormail == "" && (!strstr($visitormail,"@") || !strstr($visitormail,"."))) 
{
echo "<p>Ga terug en vul een geldig e-mail adres in<br>Bericht werd niet doorgestuurd</p>\n"; 
$badinput = "";
echo $badinput;
die ("");
}

if(empty($visitor) || empty($visitormail) || empty($notes )) {
echo "<p>Ga terug en vul alle velden in</p>\n";
die (""); 
}

$todayis = date("l, F j, Y, g:i a") ;

$attn = $attn ; 
$subject = $attn; 

$notes = stripcslashes($notes); 

$message = "$todayis [EST] \n
Van: $visitor ($visitormail)\n
Bericht: $notes \n 
Extra info: IP = $ip \n
Browser Info: $httpagent \n
";

$from = "From: $visitormail\r\n";


mail("EmailOntvanger", $subject, $message, $from);

?>

<p align="left">
Datum: <?php echo $todayis ?> 
<br />
Afzender: <?php echo $visitor ?> ( <?php echo $visitormail ?> ) 
<br /><br />
Bericht:<br /> 
<?php $notesout = str_replace("\r", "<br/>", $notes); 
echo $notesout; ?> 
<br /> 
<br /><br />
Bedankt voor uw bericht, wij behandelen uw aanvraag zo snel mogelijk.<br>
Vriendelijke groeten,<br><br>
Brasserie Criterium<br><br>
<a href="contact.php">Terug naar de contact-pagina</a></p> 
</div>
<div id="footer">
</div>
</div>
</body>
</html>

Maar als je bijvoorbeeld op "verstuur" klikt zonder iets in te vullen, krijg je enkel dit:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<title>Brasserie Criterium</title>
<link rel="stylesheet" type="text/css" href="mijnstijl.css">
<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/scriptaculous.js?load=effects"></script>
<script type="text/javascript" src="js/lightbox.js"></script>
<!--[if IE 6]><link rel="stylesheet" type="text/css" media="screen" href="ie6.css" /><![endif]-->
</head>
<body>
<div id="container">
<div id="header"></div>
<div id="left">
<ul id="menu">
<li><a href="index.htm" class="menu">Home</a>
<li><a href="brasserie.htm" class="menu">Brasserie</a>
<li><a href="feestzaal.htm" class="menu">Feestzaal</a>
<li><a href="brunch.htm" class="menu">Brunch</a>
<li><a href="fotos.htm" class="menu">Foto's</a>
<li><a href="jobs.htm" class="menu">Jobs</a>
<li><a href="contact.php" class="menu">Contact</a>
</ul>
</div>
<div id="right">
<h1>Contact</h1>
<p>Ga terug en vul alle velden in</p>

Dit valt onderaan dus volledig weg:
</div>
<div id="footer">
</div>
</div>
</body>
</html>

Waar moet ik deze laatste tags plaatsen in het script?
Of hoe kan ik dit oplossen?

Ow ja, en nog een detail:
In het script staat ergens de melding "Do NOT try that! !"
(heb ik dus nog niet vertaald)
Maar wanneer wordt die melding weergegeven? Ik heb elk veld al eens een keer opengelaten, maar heb dit nog nooit te zien gekregen...

Alvast bedankt

Cyberkef

Legacy Member
Vuile oplossing: door die zelf voor uw "die("");" te zetten, want alles stopt bij die();

XA4

Legacy Member
Daar had ik ook al aan gedacht, maar (waarschijnlijk door mijn beperkte kennis hieromtrent) is dat dus niet gelukt.

Als ik bij dit:
PHP:
if(empty($visitor) || empty($visitormail) || empty($notes )) { 
echo "<p>Ga terug en vul alle velden in</p>\n"; 
die (""); 
}

De ontbrekende code voeg, krijg ik dit:
PHP:
if(empty($visitor) || empty($visitormail) || empty($notes )) { 
echo "<p>Ga terug en vul alle velden in</p>\n";
</div> 
<div id="footer"> 
</div> 
</div> 
</body> 
</html>  
die (""); 
}

En dat werkt dus niet.
Ik kreeg een blanco pagina
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD>
<BODY></BODY></HTML>

Ow ja, bedankt voor de snelle reactie overigens :)

Gitan

Legacy Member
doe gewoon die 'die("")' weg. Dat betekent dat hij de uitvoering stopt zonder nog verder te gaan en lijkt mij niet echt een gebruiksvriendelijke oplossing.

Dit:
PHP:
if (eregi('http:', $notes)) {
die ("Do NOT try that! ! ");
}
betekent dat hij in de variabele $notes (die tekst bevat) zoekt naar de substring 'http:' (case insensitive). Als hij die vindt, dan toont hij de boodschap.
Dit is een zeer eenvoudige manier om hyperlinks in de tekst te vermijden. Maar als de gebruiker gewoon <a href="www.site.com">site</a> typt dan is 't gemakkelijk omzeild, dus een goede oplossing is dit niet.
Ge kunt dit beter doen met htmlentities:
PHP:
$notes_enc = htmlentities($notes)
Dan krijgt ge zoiets als
Code:
&lt;a href="www.site.com&gt;site&lt;/a&gt;
Op deze manier wordt de html letterlijk weergegeven in de browser en wordt hijdus niet geïnterpreteerd.

XA4

Legacy Member
Gitan zei:
doe gewoon die 'die("")' weg. Dat betekent dat hij de uitvoering stopt zonder nog verder te gaan en lijkt mij niet echt een gebruiksvriendelijke oplossing.

Als ik dit wegdoe, krijg ik:
PHP:
if(empty($visitor) || empty($visitormail) || empty($notes )) {
echo "<p>Ga terug en vul alle velden in</p>\n";
}
en wordt de footer inderdaad weergegeven.
Maar ook de mededeling die moet weergegeven worden als het formulier juist werd ingevuld (Bedankt voor uw bericht, etc)
En daarbij wordt het formulier ook nog eens verzonden zonder gegevens.

Dit krijg je dus:
PHP:
--- hier alles dat bovenaan moet staan, head, body, menu, etc---
<h1>Contact</h1>
<p>Ga terug en vul alle velden in</p>

<p align="left">
Datum: Wednesday, September 26, 2007, 7:27 pm 
<br />
Afzender:  (  ) 
<br /><br />
Bericht:<br /> 
 
<br /> 
<br /><br />
Bedankt voor uw bericht, wij behandelen uw aanvraag zo snel mogelijk.<br>
Vriendelijke groeten,<br><br>
Brasserie Criterium<br><br>
<a href="contact.php">Terug naar de contact-pagina</a></p> 
</div>
<div id="footer">
</div>
</div>
</body>
</html>

Dit aangezien er nu geen tag meer is die zegt "hola, je mag slechts tot hier weergeven" en daardoor dus gewoon alles wordt weergegeven wat er nog op de pagina staat.

XA4

Legacy Member
Al iemand enig idee hoe ik de footer -bij het klikken op "verstuur" in geval van onvolledig formulier- toch kan laten weergeven?

Tyfius

Legacy Member
Met een if-else structuur werken.
Code:
display header

if form_status ok
  display something
else
  display error

display footer
Niet te ver gaan zoeken dus.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan