Beste PHPer's,

Ik doe ergens iets fout op regel 26.
Maar ik kom er maar niet uit wat ik fout doe.
Kan iemand mij verder helpen.

<?php

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

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

//Database connectie
include'../cfg/cfg.php';
mysql_select_db($db,$con);

//GET waarden ophalen
$link = $_GET['confirm'];
if(!$link)
{
echo '<p>Er is een fout met de link.<br/>Neem contact op met de beheerder als u van mening bent dat dit niet klopt.<br/>[email protected]</p>';
}
else
{
$sql = "SELECT * FROM reservation WHERE confirm=".$link;
$res = mysql_query($sql,$con);
//Waarde controleren
if(mysql_num_rows($res) == 0)
{
echo '<p style="color:red">U heeft nog niet gereserveerd.</p>';
echo $link;
header('Refresh: 5; url=../index.html');
}
else
{
$row = mysql_fetch_array($res);
if($row['actief'] == 0)
{
$sql2 = "UPDATE reservation WHERE confirm=".$link." AND email=".$row['email']."SET actief=1";
$res2 = mysql_query($sql2,$con);
if($res2)
{
echo '<p>Uw reservering is geactiveerd.<br/>Een bevestiging is naar uw email adres gestuurd';
header('Refresh: 5; url=../index.html');
//Headers instellen
$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";
//Mail opstellen
$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><a href="http://www.thetimberwolves.nl"><img alt="The Timberwolves" height="94" src="http://www.thetimberwolves.nl/img/TTWlogoTrans.gif"; width="443" /></a></p>
<p>Uw reservering is in ons bestand opgenomen.<br/><a href="http://www.thetimberwolves.nl">The Timberwolves</a> zijn blij u op deze dag te mogen verwelkomen.</p>
<p>Reserverings details</p>
<table>
<tr><td style="width:200px">Gereserveerd voor datum</td><td>'.$row['speeldatum'].'</td></tr>
<tr><td style="width:200px">Reserveringsnummer</td><td>'.$row['ID'].'</td></tr>
<tr><td style="width:200px">Voornaam</td><td>'.$row['naam'].'</td></tr>
<tr><td style="width:200px">Achternaam</td><td>'.$row['anaam'].'</td></tr>
<tr><td style="width:200px">Team naam</td><td>'.$row['team'].'</td></tr>
<tr><td style="width:200px">Aantal dozen</td><td>'.$row['dozen'].'</td></tr>
<tr><td style="width:200px">Type paint</td><td>'.$row['paint'].'</td></tr>
<tr><td style="width:200px">Totaal incl. WOF</td><td>'.$row['prijs'].'</td></tr>
</table>
<p style="color:red">Print deze mail uit, het is uw ticket.</p>
<p style="color:red">Let op, er kan niet gepind worden</p>
<p><img alt="Euro Paintball Adventures" height="94" src="http://www.thetimberwolves.nl/img/EPA.png"; width="443" /></p>
</body>
</html>');
mail($row['email'],'Uw reservering',$inhoud_mail,$headers);

//Mail voor organisatie opstellen
$ORsql = "SELECT teamnaam, paint, SUM(dozen) FROM reservation WHERE actief=1 GROUP BY teamnaam, paint";
$ORres = mysql_query($ORsql,$con);
$OR2sql = "SELECT COUNT(*) FROM `reservation` WHERE actief=1";
$OR2res = mysql_query($OR2sql,$con);
$ORrow = mysql_fetch_array($ORres);
$OR2row = mysql_fetch_array($OR2res);
$OR = '[email protected],[email protected]';
while ($ORrow = mysql_fetch_array($ORres))
{
$ORmail = "===================================================\n";
$ORmail .= "Totaal reserveringen ".$OR2row."\n";
$ORmail .= "===================================================\n";
$ORmail .= "Team * Paint * Totaal\n";
$ORmail .= $ORrow['teamnaam']." * ".$ORrow['paint']." * ".$ORrow['SUMdozen']."\n";
}
mail($OR,'Reservering is geüpdated',$ORmail,$headers);
}
}
}
}

?>

[size=xsmall]Toevoeging op 19/08/2012 21:20:45:[/size]

Het moet zijn regel 23
Dat param binding snap ik echt niets van.

Ik weet wel dat er in &link de juiste waarde staat, deze had ik al gecontroleerd omdat ik een "0" waarde kreeg, sterker nog, hij staat zelfs in de DB.

Ik moet dus ergens een fout hebben in de SQL.

@Ger,
Zou dit een betere regel zijn voor een uniek nummer?

<?php
$confirm = md5(rand(1000,100000)$_POST['email'])
?>

[size=xsmall]Toevoeging op 20/08/2012 19:35:20:[/size]

En de mail in een extern bestand zetten is ook de bedoeling, maar wil eerst zeker weten dat alles goed werkt.
Wat begrijp je niet aan param binding?

Overigens is de manier waarop je je md5 maakt nog steeds niet erg veilig. Een random cijfer toevoegen is niet voldoende. Je kan beter een aantal random tekens toevoegen: @-4Hm$ó° . Overigens is sha1 een sterker algoritme.
sha1 werkt op de zelfde manier?

<?php
$confirm = sha1(rand(1000,100000)$_POST['email'])
?>

Dat param binding is nieuw voor mij, zie ik hier voor het eerst.
Dus daar zal ik nog wat meer over moeten weten voor ik goed begrijp wat het doet.
Allicht het zelfde als wat ik wil.
Als ik een unieke string wil hebben doe ik altijd:


<?php
define('MY_SALT', 'kN@lF44f' );
$confirm = MD5( MY_SALT . uniqid() );
?>


De uniqid() geeft al een iets unieks, maar omdat ik altijd bang ben dat anderen ook deze functie gebruiken, SALT ik hem ietwat.

De resulterende string is met aan zekerheid grenzende waarschijnlijkheid uniek :-)
Oke, dat is wel handig om te weten.

En beide parameters kun je naar eigen inzicht aanpassen?
Ben Janssen op 20/08/2012 20:08:30

Oke, dat is wel handig om te weten.

En beide parameters kun je naar eigen inzicht aanpassen?


Yep. Als je er maar voor zorgt dat de lengte van je SALT minimaal 8 tekens is, je hoofd- en kleine letters, cijfers en leestekens gebruikt.
Super.

Nu nog even uitvogelen wat er met de num_rows aan de hand is

Reageren