Tutorials
Ecards systeem (e-card systeem)
E-card systeem, ecard systeem of te wel een kaarten systeem! Voorbeeld is te vinden op: www.phphulp.nl/ecards . Script aangepast op 3 mei 2006
Pagina 1
De kleine en grote e-cards
Hoe maak ik een e-card systeem? Een e-card systeem is erg leuk en opzich erg simpel om te maken. Ten eerste heb je e-cards nodig. Deze heb ik nu even zelf gemaakt, het zijn de volgende (je kunt zo via 'save as' of 'opslaan als' opslaan). Orrigineel zijn ze zonder de zwarte rand er om heen. Deze zie je nu alleen even omdat dat automatisch gebeurt.
de grote e-cards
noem ze: love.jpg, beterschap.jpg etc.




de kleine e-cards, zet hier 'thumb_' voor
dus: thumb_love.jpg, thumb_beterschap.jpg etc.




Deze kun je dus gebruiken.
de grote e-cards
noem ze: love.jpg, beterschap.jpg etc.




de kleine e-cards, zet hier 'thumb_' voor
dus: thumb_love.jpg, thumb_beterschap.jpg etc.
Deze kun je dus gebruiken.
Pagina 2
De MySQL tabel
Je hebt ook een MySQL tabel nodig waarin de volgende velden komen:
id - elke ecard heeft een id nodig.
ontv_naam - de naam van de ontvanger
ontv_email - het e-mail adres van de ontvanger
bericht - het bericht wat getoond word
afz_naam - de naam van de afzender
afz_email - het e-mail adres van de afzender
datum - de datum en tijd wanneer de kaart verstuurd is
afbeelding - de naam van het plaatje welke getoond moet worden
ekey - de gegenereerde key waarmee de kaart opgehaald kan worden
De SQL code ziet er dan als volgt uit:
CREATE TABLE `ecards` (
`id` INT NOT NULL AUTO_INCREMENT,
`ontv_naam` VARCHAR( 50 ) NOT NULL ,
`ontv_email` VARCHAR( 200 ) NOT NULL ,
`bericht` TEXT NOT NULL ,
`afz_naam` VARCHAR( 50 ) NOT NULL ,
`afz_email` VARCHAR( 200 ) NOT NULL ,
`datum` VARCHAR( 16 ) NOT NULL ,
`afbeelding` VARCHAR( 50 ) NOT NULL ,
`ekey` VARCHAR( 10 ) NOT NULL ,
PRIMARY KEY ( `id` )
);
Lijkt me duidelijk :)
id - elke ecard heeft een id nodig.
ontv_naam - de naam van de ontvanger
ontv_email - het e-mail adres van de ontvanger
bericht - het bericht wat getoond word
afz_naam - de naam van de afzender
afz_email - het e-mail adres van de afzender
datum - de datum en tijd wanneer de kaart verstuurd is
afbeelding - de naam van het plaatje welke getoond moet worden
ekey - de gegenereerde key waarmee de kaart opgehaald kan worden
De SQL code ziet er dan als volgt uit:
CREATE TABLE `ecards` (
`id` INT NOT NULL AUTO_INCREMENT,
`ontv_naam` VARCHAR( 50 ) NOT NULL ,
`ontv_email` VARCHAR( 200 ) NOT NULL ,
`bericht` TEXT NOT NULL ,
`afz_naam` VARCHAR( 50 ) NOT NULL ,
`afz_email` VARCHAR( 200 ) NOT NULL ,
`datum` VARCHAR( 16 ) NOT NULL ,
`afbeelding` VARCHAR( 50 ) NOT NULL ,
`ekey` VARCHAR( 10 ) NOT NULL ,
PRIMARY KEY ( `id` )
);
Lijkt me duidelijk :)
Pagina 3
Het versturen van de e-card
Je kijkt dus eerst of het 'formulier' verzonden is. Zo niet, laat dan de 4 ecards zien (of meer). Ze kunnen via een radio keuze hun ecard kiezen. Daarnaast moeten ze de ontvangers naam en email + hun eigen email adres en naam invullen om een ecard te kunnen versturen. Als er eenmaal op de knop versturen is gedrukt zal er gekeken worden of alles is ingevuld en of het e-mail adres wel klopt. Ook zet hij alle speciale karakters om in entities met de functie htmlentities() om misbruik met bijv. javascript etc. te voorkomen.
VERGEET NIET DE URL ADRESSEN TE WIJZIGEN IN HET SCRIPT!
index.php
<?
echo "<html>";
echo "<head><title>Verstuur een e-card!</title>";
echo "<style>";
echo "body { background-color: #ffffff; font-family: Verdana, Arial, Helvetica; font-size: 12px; color: #000000 }";
echo "a { color: #000000; text-decoration: underlined }";
echo "</style>";
echo "</head>";
echo "<body>";
// maak verbinding met de database
// HIER DUS JE EIGEN MYSQL GEGEVENS
if (!@mysql_select_db("database_naam", @mysql_connect("localhost", "database_user", "database_pass")))
{
echo "er kon geen database connectie gemaakt worden.";
exit();
}
// ZET HIER HET ONDERWERP VAN DE ECARD!
$email_onderwerp = "Je hebt een e-card ontvangen!";
// e-mail validator
function email_validator($email)
{
if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email))
$valid = "1";
return $valid;
}
// random pass generator
function random_pass($length, $caps)
{
if ($caps == 1)
$letters = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1234567890";
else
$letters = "abcdefghijklmnopqrstuvwxyz1234567890";
for ($i = 1; $i <= $length; $i++)
{
$randnum = rand(0, strlen($letters));
if ($i == 1)
$randchar = substr($letters, $randnum, 1);
else
$randchar .= substr($letters, $randnum, 1);
}
return $randchar;
}
// check of het formulier is verzonden
// zo ja, valideer de e-mail adressen
// en zet speciale karakters om
if ($_POST['submit'])
{
$afz_email = htmlentities($_POST['afz_email']);
$ontv_email = htmlentities($_POST['ontv_email']);
$ontv_naam = htmlentities($_POST['ontv_naam']);
$afz_naam = htmlentities($_POST['afz_naam']);
$bericht = htmlentities($_POST['bericht']);
$check_ontv_email = email_validator($_POST['ontv_email']);
$check_afz_email = email_validator($_POST['afz_email']);
}
// bekijk dus eerst of het formulier is verzonden is en of
// alle variabele goed zijn
if ($_POST['submit'] && $afz_email && $ontv_email && $afz_naam && $ontv_naam && $bericht && $check_ontv_email && $check_afz_email && $_POST['ecards'])
{
// maak een random key aan
$ophaal_key = random_pass(10, 1);
if (strlen($ophaal_key) == 9)
$ophaal_key = $ophaal_key . "G";
elseif (strlen($ophaal_key) == 8)
$ophaal_key = $ophaal_key . "Ez";
// zet datum verstuurd
$datum = date("d.m.Y H:i");
// zet de ecard informatie in de database
$sql = "INSERT INTO ecards (id, ontv_naam, ontv_email, bericht, afz_naam, afz_email, datum, afbeelding, ekey) VALUES (";
$sql .= "''";
$sql .= ", " . $ontv_naam;
$sql .= ", " . $ontv_email;
$sql .= ", " . $bericht;
$sql .= ", " . $afz_naam;
$sql .= ", " . $afz_email;
$sql .= ", " . $datum;
$sql .= ", " . $_POST['ecards'];
$sql .= ", " . $ophaal_key;
$sql .= ")";
$res = mysql_query($sql);
// kijk of de query succesvol was
if ($res)
{
// het bericht dat een e-card is ontvangen
$email_msg = "==================================================\n";
$email_msg .= "Je hebt een e-card ontvangen!!!\n";
$email_msg .= "==================================================\n\n";
$email_msg .= "Ben je benieuwd door wie deze e-card verstuurd is?\n";
$email_msg .= "Haal dan snel je e-card op!!\n\n";
$email_msg .= "http://www.phphulp.nl/ecards/ecard.php?key=$ophaal_key\n\n";
$email_msg .= "De e-card is verzonden via phphulp.nl/ecards\n";
// verstuur bericht dat er een e-card is ontvangen
if (mail($ontv_naam . "<" . $ontv_email . ">", $email_onderwerp, $email_msg, "From: PHPhulp ECARD <noreply@phphulp>"))
echo "<p>De e-card is verzonden!</p>";
else
echo "<p>Sorry, de e-card is niet verzonden. Probeer het opnieuw.</p>";
}
else
{
echo "De ecard is niet verstuurd. Probeer het opnieuw.";
}
}
// laat formulier zien!
else
{
// bekijk of het al eerder verzonden was
if ($_POST['submit'])
echo "<b>Je bent enkele velden vergeten in te vullen (of een ecard te kiezen) of je hebt de e-mail adressen niet correct ingevuld.</b><p>";
// zet de namen van de ecards in een array
$ecard[0] = "love.jpg";
$ecard[1] = "beterschap.jpg";
$ecard[2] = "gefeliciteerd.jpg";
$ecard[3] = "spijt.jpg";
// tel de ecards
$tot_ecards = count($ecard) - 1;
// zet de URL naar de ecards (niet eindigend op een slash)
$url = "http://www.phphulp.nl/ecards";
// begin form
echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">";
// begin HTML table
echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"10\">";
// laat de ecards zijn
$tr = 1;
for ($i = 0; $i <= $tot_ecards; $i++)
{
if ($tr == 1)
echo "<tr><td><img src=\"$url/thumb_$ecard[$i]\"><br><input type=\"radio\" name=\"ecards\" value=\"$ecard[$i]\"></td>";
elseif ($tr == 2)
{
echo "<td><img src=\"$url/thumb_$ecard[$i]\"><br><input type=\"radio\" name=\"ecards\" value=\"$ecard[$i]\"></td></tr>";
$tr = 0;
}
$tr++;
}
// sluit HTML table
echo "</table>";
echo "Wat is de naam van ontvanger?<br>";
echo "<input type=\"text\" name=\"ontv_naam\"><p>";
echo "Wat is het e-mail adres van de ontvanger?<br>";
echo "<input type=\"text\" name=\"ontv_email\"><p>";
echo "Wat is jou naam?<br>";
echo "<input type=\"text\" name=\"afz_naam\"><p>";
echo "Wat is jou e-mail adres?<br>";
echo "<input type=\"text\" name=\"afz_email\"><p>";
echo "Je bericht wat de ontvanger zal zien:<br>";
echo "<textarea name=\"bericht\" cols=\"55\" rows=\"12\"></textarea><p>";
echo "<input type=\"submit\" name=\"submit\" value=\"E-card versturen\">";
// sluit form
echo "</form>";
}
echo "</body></html>";
?>
VERGEET NIET DE URL ADRESSEN TE WIJZIGEN IN HET SCRIPT!
index.php
<?
echo "<html>";
echo "<head><title>Verstuur een e-card!</title>";
echo "<style>";
echo "body { background-color: #ffffff; font-family: Verdana, Arial, Helvetica; font-size: 12px; color: #000000 }";
echo "a { color: #000000; text-decoration: underlined }";
echo "</style>";
echo "</head>";
echo "<body>";
// maak verbinding met de database
// HIER DUS JE EIGEN MYSQL GEGEVENS
if (!@mysql_select_db("database_naam", @mysql_connect("localhost", "database_user", "database_pass")))
{
echo "er kon geen database connectie gemaakt worden.";
exit();
}
// ZET HIER HET ONDERWERP VAN DE ECARD!
$email_onderwerp = "Je hebt een e-card ontvangen!";
// e-mail validator
function email_validator($email)
{
if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email))
$valid = "1";
return $valid;
}
// random pass generator
function random_pass($length, $caps)
{
if ($caps == 1)
$letters = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1234567890";
else
$letters = "abcdefghijklmnopqrstuvwxyz1234567890";
for ($i = 1; $i <= $length; $i++)
{
$randnum = rand(0, strlen($letters));
if ($i == 1)
$randchar = substr($letters, $randnum, 1);
else
$randchar .= substr($letters, $randnum, 1);
}
return $randchar;
}
// check of het formulier is verzonden
// zo ja, valideer de e-mail adressen
// en zet speciale karakters om
if ($_POST['submit'])
{
$afz_email = htmlentities($_POST['afz_email']);
$ontv_email = htmlentities($_POST['ontv_email']);
$ontv_naam = htmlentities($_POST['ontv_naam']);
$afz_naam = htmlentities($_POST['afz_naam']);
$bericht = htmlentities($_POST['bericht']);
$check_ontv_email = email_validator($_POST['ontv_email']);
$check_afz_email = email_validator($_POST['afz_email']);
}
// bekijk dus eerst of het formulier is verzonden is en of
// alle variabele goed zijn
if ($_POST['submit'] && $afz_email && $ontv_email && $afz_naam && $ontv_naam && $bericht && $check_ontv_email && $check_afz_email && $_POST['ecards'])
{
// maak een random key aan
$ophaal_key = random_pass(10, 1);
if (strlen($ophaal_key) == 9)
$ophaal_key = $ophaal_key . "G";
elseif (strlen($ophaal_key) == 8)
$ophaal_key = $ophaal_key . "Ez";
// zet datum verstuurd
$datum = date("d.m.Y H:i");
// zet de ecard informatie in de database
$sql = "INSERT INTO ecards (id, ontv_naam, ontv_email, bericht, afz_naam, afz_email, datum, afbeelding, ekey) VALUES (";
$sql .= "''";
$sql .= ", " . $ontv_naam;
$sql .= ", " . $ontv_email;
$sql .= ", " . $bericht;
$sql .= ", " . $afz_naam;
$sql .= ", " . $afz_email;
$sql .= ", " . $datum;
$sql .= ", " . $_POST['ecards'];
$sql .= ", " . $ophaal_key;
$sql .= ")";
$res = mysql_query($sql);
// kijk of de query succesvol was
if ($res)
{
// het bericht dat een e-card is ontvangen
$email_msg = "==================================================\n";
$email_msg .= "Je hebt een e-card ontvangen!!!\n";
$email_msg .= "==================================================\n\n";
$email_msg .= "Ben je benieuwd door wie deze e-card verstuurd is?\n";
$email_msg .= "Haal dan snel je e-card op!!\n\n";
$email_msg .= "http://www.phphulp.nl/ecards/ecard.php?key=$ophaal_key\n\n";
$email_msg .= "De e-card is verzonden via phphulp.nl/ecards\n";
// verstuur bericht dat er een e-card is ontvangen
if (mail($ontv_naam . "<" . $ontv_email . ">", $email_onderwerp, $email_msg, "From: PHPhulp ECARD <noreply@phphulp>"))
echo "<p>De e-card is verzonden!</p>";
else
echo "<p>Sorry, de e-card is niet verzonden. Probeer het opnieuw.</p>";
}
else
{
echo "De ecard is niet verstuurd. Probeer het opnieuw.";
}
}
// laat formulier zien!
else
{
// bekijk of het al eerder verzonden was
if ($_POST['submit'])
echo "<b>Je bent enkele velden vergeten in te vullen (of een ecard te kiezen) of je hebt de e-mail adressen niet correct ingevuld.</b><p>";
// zet de namen van de ecards in een array
$ecard[0] = "love.jpg";
$ecard[1] = "beterschap.jpg";
$ecard[2] = "gefeliciteerd.jpg";
$ecard[3] = "spijt.jpg";
// tel de ecards
$tot_ecards = count($ecard) - 1;
// zet de URL naar de ecards (niet eindigend op een slash)
$url = "http://www.phphulp.nl/ecards";
// begin form
echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">";
// begin HTML table
echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"10\">";
// laat de ecards zijn
$tr = 1;
for ($i = 0; $i <= $tot_ecards; $i++)
{
if ($tr == 1)
echo "<tr><td><img src=\"$url/thumb_$ecard[$i]\"><br><input type=\"radio\" name=\"ecards\" value=\"$ecard[$i]\"></td>";
elseif ($tr == 2)
{
echo "<td><img src=\"$url/thumb_$ecard[$i]\"><br><input type=\"radio\" name=\"ecards\" value=\"$ecard[$i]\"></td></tr>";
$tr = 0;
}
$tr++;
}
// sluit HTML table
echo "</table>";
echo "Wat is de naam van ontvanger?<br>";
echo "<input type=\"text\" name=\"ontv_naam\"><p>";
echo "Wat is het e-mail adres van de ontvanger?<br>";
echo "<input type=\"text\" name=\"ontv_email\"><p>";
echo "Wat is jou naam?<br>";
echo "<input type=\"text\" name=\"afz_naam\"><p>";
echo "Wat is jou e-mail adres?<br>";
echo "<input type=\"text\" name=\"afz_email\"><p>";
echo "Je bericht wat de ontvanger zal zien:<br>";
echo "<textarea name=\"bericht\" cols=\"55\" rows=\"12\"></textarea><p>";
echo "<input type=\"submit\" name=\"submit\" value=\"E-card versturen\">";
// sluit form
echo "</form>";
}
echo "</body></html>";
?>
Pagina 4
Het ophalen van de e-card
Ophalen is erg simpel, je selecteert simpel weg de rij uit de database waar key het opgegeven key is die meegegeven is met de GET variabelen.
VERGEET NIET DE URL ADRESSEN TE WIJZIGEN IN HET SCRIPT!
ecard.php
<?
echo "<html>";
echo "<head><title>E-card ophalen!</title>";
echo "<style>";
echo "body { background-color: #ffffff; font-family: Verdana, Arial, Helvetica; font-size: 12px; color: #000000 }";
echo "a { color: #000000; text-decoration: underlined }";
echo "</style>";
echo "</head>";
echo "<body>";
// maak verbinding met de database
if (!@mysql_select_db("database_naam", @mysql_connect("localhost", "database_user", "database_pass")))
{
echo "er kon geen database connectie gemaakt worden.";
exit();
}
// geef nogmaals de url van de ecard op zonder slash (/) op het einde
$url = "http://www.phphulp.nl/ecards";
// kijk of 'key' is geset
if ($_GET['key'] && strlen($_GET['key']) == 10)
{
// haal de ecard uit de database
$sql = "SELECT ontv_naam, afz_naam, afz_email, bericht, datum, afbeelding FROM ecards WHERE ekey = '" . addslashes($_GET['key']) . "'";
$res = mysql_query($sql);
// bekijk of de kaart wel bestaat
if (mysql_num_rows($res) >= 1)
{
$row = mysql_fetch_array($res);
$row['bericht'] = nl2br(htmlentities($row['bericht']));
echo "<img src=\"" . $url . "/" . $row['afbeelding'] . "\"><p>";
echo "Van: " . htmlentities($row['afz_naam']) . " (<a href=\"mailto:" . $row['afz_email'] . "\">" . htmlentities($row['afz_email']) . "</a>) op " . $row['datum'] . "<P>";
echo "Beste " . htmlentities($row['ontv_naam']) . ",<p>";
echo "<i>" . $row['bericht'] . "</i><p>";
echo "Stuur een <a href=\"index.php\">e-card</a> terug!";
}
// hij bestaat niet!
else
echo "De opgevraagde kaart bestaat niet (meer).";
}
// de opgegeven key is niet juist of niet meegegeven
else
echo "De 'key' die moet worden meegegeven is niet juist.";
echo "</body></html>";
?>
VERGEET NIET DE URL ADRESSEN TE WIJZIGEN IN HET SCRIPT!
ecard.php
<?
echo "<html>";
echo "<head><title>E-card ophalen!</title>";
echo "<style>";
echo "body { background-color: #ffffff; font-family: Verdana, Arial, Helvetica; font-size: 12px; color: #000000 }";
echo "a { color: #000000; text-decoration: underlined }";
echo "</style>";
echo "</head>";
echo "<body>";
// maak verbinding met de database
if (!@mysql_select_db("database_naam", @mysql_connect("localhost", "database_user", "database_pass")))
{
echo "er kon geen database connectie gemaakt worden.";
exit();
}
// geef nogmaals de url van de ecard op zonder slash (/) op het einde
$url = "http://www.phphulp.nl/ecards";
// kijk of 'key' is geset
if ($_GET['key'] && strlen($_GET['key']) == 10)
{
// haal de ecard uit de database
$sql = "SELECT ontv_naam, afz_naam, afz_email, bericht, datum, afbeelding FROM ecards WHERE ekey = '" . addslashes($_GET['key']) . "'";
$res = mysql_query($sql);
// bekijk of de kaart wel bestaat
if (mysql_num_rows($res) >= 1)
{
$row = mysql_fetch_array($res);
$row['bericht'] = nl2br(htmlentities($row['bericht']));
echo "<img src=\"" . $url . "/" . $row['afbeelding'] . "\"><p>";
echo "Van: " . htmlentities($row['afz_naam']) . " (<a href=\"mailto:" . $row['afz_email'] . "\">" . htmlentities($row['afz_email']) . "</a>) op " . $row['datum'] . "<P>";
echo "Beste " . htmlentities($row['ontv_naam']) . ",<p>";
echo "<i>" . $row['bericht'] . "</i><p>";
echo "Stuur een <a href=\"index.php\">e-card</a> terug!";
}
// hij bestaat niet!
else
echo "De opgevraagde kaart bestaat niet (meer).";
}
// de opgegeven key is niet juist of niet meegegeven
else
echo "De 'key' die moet worden meegegeven is niet juist.";
echo "</body></html>";
?>
Reacties
0