Door
Johan Groenewold
op 21-08-2010 14:59
gewijzigd op 21-08-2010 15:01
1.970 views
Hey,
Ik heb voor m'n vader die ziek in bed ligt een klein systeempje gemaakt waar hij z'n eten en drinken kan bestellen. De bestellingen worden dan naar ons toe gemaild. Het is een grapje, maar het is leuk als het werkt :)
Het probleem is als volgt: de bestelling komt van een formulier met radiobuttons maar die kan ik niet geparsed in de e-mail krijgen; ik krijg de code.
<?php
if(isset($_GET['actie']) == "verzenden")
{
$to = '*knip*' . ', ';
$to .= '*knip*';
$subject = 'Diner *knip*';
// message
message = "*knip* heeft zojuist een nieuwe bestelling ingevoerd!<br /> Het betreft het diner. Dit is de bestelling:<br /><br />" . $getinfo;
reset ($_POST);
while (list($element, $value) = each($_POST))
{
if ($element !="submit")
{
if ($element !="opmerkingen")
{
echo ("$element<br />");
}
elseif (!empty($value))
{
echo ("<br /><br /><br />$element:<br />$value<br />");
}
}
}
$getinfo =
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: service@localhost' . "\r\n";
if(!mail($to, $subject, $message, $headers)) {
echo ("De bestelling kon niet geplaatst worden. Contacteer uw webmaster om hem over dit probleem te informeren");
} else {
mail($to, $subject, $message, $headers);
include ('succes.php');
}
} else {
include ('header.html');
?>
Er kloppen al zaken niet:
0. if(isset($_GET['actie']) == "verzenden"), dit slaat helemaal nergens op isset geeft true of false terug en kan dus nooit maar dan ook nooit gelijk zijn aan een string 'verzenden'
1. je controleerd niet of het form daadwerkelijk is gepost, je kan niet op $_POST['submit'] testen want deze is de ene keer er wel en de andere keer weer niet
2. je controleerd en valideerd je $_POST waarden niet
3. de functie empty() is zinloos
4. php variabelen buiten quotes
5. die while lus slaat ook als een tang op een varken, een foreach is in dit geval dan een veel makkelijkere oplossing
Er kloppen al zaken niet:
0. if(isset($_GET['actie']) == "verzenden"), dit slaat helemaal nergens op isset geeft true of false terug en kan dus nooit maar dan ook nooit gelijk zijn aan een string 'verzenden'
1. je controleerd niet of het form daadwerkelijk is gepost, je kan niet op $_POST['submit'] testen want deze is de ene keer er wel en de andere keer weer niet
2. je controleerd en valideerd je $_POST waarden niet
3. de functie empty() is zinloos
4. php variabelen buiten quotes
5. die while lus slaat ook als een tang op een varken, een foreach is in dit geval dan een veel makkelijkere oplossing
Sorry, ik kon niet echt een code-vak vinden tussen de BBcodes boven het tekstvak..
Is dat iets?
3. Hoezo is het zinloos? Het klopt toch dat hij "opmerkingen" niet mee hoeft te sturen als die er niet zijn..?
4. Bedoel je dat dat niet moet (zoals bij $message) of juist wél (zoals bij de echo van $element)?
5. Die kwam rechtreeks uit het boek PHP5 van Peter Kassenaar, maar daar zitten wel meer fouten in. Ook gewijzigd nu.
[size=xsmall]Toevoeging op 21/08/2010 15:39:38:[/size]
Johan Groenewold op 21/08/2010 15:38:38
[quote="Noppes Homeland op 21/08/2010 15:14:32"]
GVD, post relevante code hier en niet elders!!
Er kloppen al zaken niet:
0. if(isset($_GET['actie']) == "verzenden"), dit slaat helemaal nergens op isset geeft true of false terug en kan dus nooit maar dan ook nooit gelijk zijn aan een string 'verzenden'
1. je controleerd niet of het form daadwerkelijk is gepost, je kan niet op $_POST['submit'] testen want deze is de ene keer er wel en de andere keer weer niet
2. je controleerd en valideerd je $_POST waarden niet
3. de functie empty() is zinloos
4. php variabelen buiten quotes
5. die while lus slaat ook als een tang op een varken, een foreach is in dit geval dan een veel makkelijkere oplossing
Sorry, ik kon niet echt een code-vak vinden tussen de BBcodes boven het tekstvak..
/**
* Provides form validation checking for fields.
*/
class Form {
private $name = '';
private $fields = array();
private $has_errors = false;
function __construct($name) {
$this->name = $name;
}
function setField($field, $name) {
$this->fields[$name] = $field;
}
function getFields() {
return $this->fields;
}
/**
* Validates the entire form by calling
* the validate routine on each field.
*
* @param $request A HTTP $_GET, $_POST, $_REQUEST array.
*/
function validate($request) {
if (is_array($request)) {
foreach ($request as $name => $value) {
if (isset($this->fields[$name])) {
$field = $this->fields[$name];
$field->validate($request);
if ($field->hasError() === true) {
$this->has_errors = true;
}
}
}
}
}
function hasErrors() {
return $this->has_errors;
}
Is dat iets?
3. Hoezo is het zinloos? Het klopt toch dat hij "opmerkingen" niet mee hoeft te sturen als die er niet zijn..?
4. Bedoel je dat dat niet moet (zoals bij $message) of juist wél (zoals bij de echo van $element)?
5. Die kwam rechtreeks uit het boek PHP5 van Peter Kassenaar, maar daar zitten wel meer fouten in. Ook gewijzigd nu.