Beste PHPer's,

Ik heb een inschrijf formulier gemaakt, maar krijg de insert niet voor elkaar.
De fout afhandeling werkt, maar krijg geen input.

Kan iemand me helpen, voor ik er een nog groter zooitje van maak :)

<?php

/**
* @author Ben Janssen
* @copyright 2012
*/

ini_set('display_errors',1);
error_reporting(E_ALL);
session_start();

//Include
include'cfg/cfg.php';
include_once $_SERVER['DOCUMENT_ROOT'] . '/securimage/securimage.php';

$securimage = new Securimage();

//Form handler
if($_SERVER['REQUEST_METHOD']=='POST')
{
$confirm = rand(100,1000);
$to = $_POST['email'];
$subject = 'Uw reservering';
$errors = array();
$data = array();
$ip = $_SERVER['REMOTE_ADDR'];
$headers = "From: NoReply@The_Timberwolves.nl\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$WOF = 10;
$speeldatum = 07-10-2012;
mysql_select_db($db,$con);

//Type paint bepalen
if($_POST['paint'] == 'Shield')
{
$paint = 45;
}
else
{
$paint = 50;
}
$paint2 = $paint * $_POST['dozen'];
$prijs = $WOF + $paint2;
//controleren op fouten
$form = array(
'naam',
'anaam',
'email',
'team');
// controle voor alle velden
foreach($form as $veld)
{
if(isset($_POST[$veld]))
{
$value = trim($_POST[$veld]);
$form[$veld] = $value;

// controle van email

// controle op een geldig email adres
if($veld == 'email')
{
if(!preg_match("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/",$value))
{
$errors[$veld] = true;
$errors[] = 'Dit is geen geldig email adres.';
}
}
if(empty($value))
{
$errors[$veld] = true;
$errors[] = 'U bent uw '.$veld.' vergeten in te vullen';
}
}
else
{
$errors[]= 'Het veld '.$veld.' ontbreekt.';
}
}
if(empty($errors))
{
$input = ('INSERT INTO reservation(ID, confirm, naam, anaam, email, teamnaam, dozen, paint, prijs, speeldatum, datum, ip)
VALUES
(NULL,
'.$confirm.',
'.$_POST['naam'].',
'.$_POST['anaam'].',
'.$_POST['email'].',
'.$_POST['team'].',
'.$_POST['dozen'].',
'.$_POST['paint'].',
'.$prijs.',
'.$speeldatum.',
NOW(),
'.$ip.'
)');
$input2 = mysql_query($input);
if (mysql_affected_rows()==1)
{
//input controle

$inhoud_mail = ('
<!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 content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Reservering</title>
</head>

<body style="background:silver">

<p style="text-align:center"><img alt="The Timberwolves" height="94" src="http://www.thetimberwolves.nl/img/TTWlogoTrans.gif"; width="443" /></p>
<p style="text-align:center">Reserverings details</p>
<table style="margin-left:auto;margin-right:auto">
<tr><td style="width:200px">Gereserveerd voor datum</td><td>'.$_POST['speeldatum'].'</td></tr>
<tr><td style="width:200px">Voornaam</td><td>'.$_POST['naam'].'</td></tr>
<tr><td style="width:200px">Achternaam</td><td>'.$_POST['anaam'].'</td></tr>
<tr><td style="width:200px">Team naam</td><td>'.$_POST['team'].'</td></tr>
<tr><td style="width:200px">Aantal dozen</td><td>'.$_POST['dozen'].'</td></tr>
<tr><td style="width:200px">Type paint</td><td>'.$_POST['paint'].'</td></tr>
</table>
<p style="text-align:center">Prijskaartje</p>
<table style="margin-left:auto;margin-right:auto">
<tr><td style="width:200px">WOF</td><td>'.$WOF.'</td></tr>
<tr><td style="width:200px">Prijs per doos</td><td>'.$paint.'</td></tr>
<tr><td style="width:200px">Totaal</td><td>'.$prijs.'</td></tr>
</table>
<p style="text-align:center"><a href="http://www.thetimberwolves.nl/script/bevestig.php?'.$confirm.'">Klik hier om uw reservering te bevestigen</a></p>
<p style="text-align:center"><img alt="Euro Paintball Adventures" height="94" src="http://www.thetimberwolves.nl/img/EPA.png"; width="443" /></p>
</body>

</html>
');
mail($to,$subject,$inhoud_mail,$headers);

header('Refresh: 3; url=index.html');
echo '<p>Een bevestiging is naar uw email adres verstuurd';
echo '<p>Uw aanvraag is geregistreerd met ip adres: '.$ip.' op datum: ' .$datum.'</p>';
}
else
{
mysql_error();
echo "Het formulier is niet verzonden.<br>Probeer het <a href='javascript:history.back(1);'>opnieuw</a>.";
}

}
else
{
// Fouten opgetreden: weergeven en terug naar formulier
header('Refresh: 4; url=contact.html');
foreach($errors as $sError)
{
echo '<p style="color:red">'.$sError.'</p>';
}
}
}
?>
Obelix zegt het ook al, maar misschien niet helemaal duidelijk: strings in sql moeten ook tussen quotes staan. Je hebt dus de quotes voor de query string in php nodig EN quotes voor de string in je query:

<?php
$input = ("INSERT INTO reservation(ID, confirm, naam)
VALUES(NULL,'".$confirm."','".$bgnaam."')");
?>
Overigens is dit alleen nodig voor string waardes, niet voor integers! Verder is het invullen van een NULL waarde overbodig, dat maakt je database er automatisch wel van als er geen default waarde is gegeven.
Waarom maak je zoveel variabele aan (85 t/m 91)? dit is totaal niet nodig want dit kan ook direct in de query.

Waarom een NULL bij het ID veld ? ik neem aan dat het in je database gewoon een auto_increment veld is ? dus bij een insert query heb je heel het id niet nodig.

Wat doet: mysql_select_db op regel 32 ?
Zet alles eens netjes bij elkaar wat bij elkaar hoort, want nu staat aller her en der door het hele script heen!

Je gebruikt wel mysql_escape_string() op je variabele maar je toon de POST data wel direct in je email .. Is het hier wel gelijk goed dan ?

Hou je opmaak altijd in een css file en niet met een inline style daarvoor zijn classes en id's.

Edit:
Obelix en Idefix was me beetje voor :P
Dat het script een puinhoop is dat had ik al in de gaten, ik ben ook geen programmeur, maar meer iemand van het betere knip en plak werk. (niet ideaal, weet ik)

Heb nu wel een fout afhandeling er in gezet, maar snappen doe ik het niet.
Hij zegt een fout te hebben op 'line 7' maar daar staat niets in het script.

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@bepeel.nl,
TTW,
1,
Shield,
55,
' at line 7

als ik de waarde echo, dan ziet alles er goed uit.
Het is regel 7 van de query, maw zit er een fout in de query. Echo de query, en contoleer hem.
Maar zo te zien heb je de reacties van Erwin en Obelix niet goed gelezen.
Oke heb het probleem gevonden, nu krijg ik wel input, maar krijg gelijk ook een foutmelding
Error: Duplicate entry '365' for key 'confirm'

Dit kan toch eigenlijk niet, of zie ik dat verkeerd?

[size=xsmall]Toevoeging op 18/08/2012 14:03:27:[/size]

En de mail word ook niet verstuurd
Er is een key niet goed in je database.
Key niet goed????
Wat moet ik me daar bij voorstellen, de kolom is ingesteld met INT(100) unique

Dan kan hij toch geen dubbele waarden invoeren, en wat ik uit de foutmelding opmaak, is dat ie dat wel probeerd
Haal die unique weg...
Heb die unique weg gehaald, en alles werkt naar behoren.
Heb echter nog 1 vraagje.

Ik krijg een dubbele waarden in de DB, wat gaat hier dan fout?

Het nieuwe script

<?php

/**
* @author Ben Janssen
* @copyright 2012
*/

ini_set('display_errors',1);
error_reporting(E_ALL);
session_start();

//Include
include'cfg/cfg.php';
include_once $_SERVER['DOCUMENT_ROOT'] . '/securimage/securimage.php';

$securimage = new Securimage();

# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit

# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
//Form handler
if($_SERVER['REQUEST_METHOD']=='POST')
{
$confirm = md5(rand(1000,100000));
$to = $_POST['email'];
$subject = 'Uw reservering';
$errors = array();
$data = array();
$ip = $_SERVER['REMOTE_ADDR'];
$headers = "From: NoReply@The_Timberwolves.nl\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$WOF = 10;
$speeldatum = date('2012-10-07');
$datum = date("d.m.Y H:i");
mysql_select_db($db,$con);

//Type paint bepalen
if($_POST['paint'] == 'Shield')
{
$paint2 = 45;
$paint = 'Shield';
}
elseif ($_POST['paint'] == 'Claymore')
{
$paint2 = 50;
$paint = 'Claymore';
}
else
{
$paint2 = 50;
$paint = 'Mace';
}
$paint3 = $paint2 * $_POST['dozen'];
$prijs = $WOF + $paint3;
//controleren op fouten
$form = array(
'naam',
'anaam',
'email',
'team');
// controle voor alle velden
foreach($form as $veld)
{
if(isset($_POST[$veld]))
{
$value = trim($_POST[$veld]);
$form[$veld] = $value;

// controle van email

// controle op een geldig email adres
if($veld == 'email')
{
if(!preg_match("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/",$value))
{
$errors[$veld] = true;
$errors[] = 'Dit is geen geldig email adres.';
}
}
if(empty($value))
{
$errors[$veld] = true;
$errors[] = 'U bent uw '.$veld.' vergeten in te vullen';
}
}
else
{
$errors[]= 'Het veld '.$veld.' ontbreekt.';
}
}
if(empty($errors))
{
//Escape's aanmaken

$bgnaam = mysql_escape_string($_POST['naam']);
$bganaam = mysql_escape_string($_POST['anaam']);
$bgemail = mysql_escape_string($_POST['email']);
$bgteam = mysql_escape_string($_POST['team']);
$bgdozen = mysql_escape_string($_POST['dozen']);
$bgpaint = mysql_escape_string($_POST['paint']);
$bgprijs = mysql_escape_string($prijs);
$input = ("INSERT INTO reservation(ID, confirm, naam, anaam, email, teamnaam, dozen, paint, prijs, speeldatum, datum, ip)
VALUES
(NULL,
'".$confirm."',
'".$bgnaam."',
'".$bganaam."',
'".$bgemail."',
'".$bgteam."',
'".$bgdozen."',
'".$bgpaint."',
'".$bgprijs."',
'".$speeldatum."',
NOW(),
'".$ip."'
)");
$input2 = mysql_query($input,$con);
if (($result = mysql_query($input)) === false)
{
echo showSQLError($input,mysql_error(),'Fout met database.');
echo "Het formulier is niet verzonden.<br>Probeer het <a href='javascript:history.back(1);'>opnieuw</a><br/>.";
echo $input;
}
else
{
//input controle

$inhoud_mail = ('
<!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 content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Reservering</title>
</head>

<body style="background:silver">

<p><img alt="The Timberwolves" height="94" src="http://www.thetimberwolves.nl/img/TTWlogoTrans.gif"; width="443" /></p>
<p>Reserverings details</p>
<table>
<tr><td style="width:200px">Gereserveerd voor datum</td><td>'.$speeldatum.'</td></tr>
<tr><td style="width:200px">Voornaam</td><td>'.$bgnaam.'</td></tr>
<tr><td style="width:200px">Achternaam</td><td>'.$bganaam.'</td></tr>
<tr><td style="width:200px">Team naam</td><td>'.$bgteam.'</td></tr>
<tr><td style="width:200px">Aantal dozen</td><td>'.$bgdozen.'</td></tr>
<tr><td style="width:200px">Type paint</td><td>'.$bgpaint.'</td></tr>
</table>
<p>Prijskaartje</p>
<table style="margin-left:auto;margin-right:auto">
<tr><td style="width:200px">WOF</td><td>'.$WOF.'</td></tr>
<tr><td style="width:200px">Prijs per doos</td><td>'.$paint3.'</td></tr>
<tr><td style="width:200px">Totaal</td><td>'.$prijs.'</td></tr>
</table>
<p><a href="http://www.thetimberwolves.nl/script/bevestig.php?'.$confirm.'">Klik hier om uw reservering te bevestigen</a></p>
<p><img alt="Euro Paintball Adventures" height="94" src="http://www.thetimberwolves.nl/img/EPA.png"; width="443" /></p>
</body>

</html>
');
mail($to,$subject,$inhoud_mail,$headers);

header('Refresh: 3; url=index.html');
echo '<p>Een bevestiging is naar uw email adres verstuurd';
echo '<p>Uw aanvraag is geregistreerd met ip adres: '.$ip.' op datum: ' .$datum.'</p>';
}

}
else
{
// Fouten opgetreden: weergeven en terug naar formulier
header('Refresh: 10; url=contact.html');
foreach($errors as $sError)
{
echo '<p style="color:red">'.$sError.'</p>';
}
}
}
?>
Welke waarde krijg je dubbel?

Reageren