Hello, hier ben ik weer met men vragen.
Hoe kan ik een aangepaste melding maken, wanneer mysql normaal een error retourneert als er een dubbel is (duplicate entrie), maw ik wil deze melding: Dit email adres ontvangt reeds de nieuwsbrief. Als het email adres reeds in de db zit.
Waarom eerst een SELECT-query wanneer je gewoon direct een INSERT kunt doen? De SELECT is toch waardeloos omdat er een kansje bestaat dat iemand anders na jouw SELECT en vóór de INSERT een andere INSERT doet. Dan zijn de resultaten van jouw SELECT waardeloos geworden.
En omdat je blijkbaar een UNIQUE op de kolom 'emailadres' hebt (heel goed!), slaat die SELECT al helemaal nergens op.
Probeer dit eens:
<?
$voegtoe_sql = 'INSERT INTO leden (emailadres) VALUES ("'.$nieuw.'")';
$voegtoe_res = mysql_query($voegtoe_sql,$link);
if (mysql_errno() == 1062) { // zie ook de MySQL handleiding
echo 'Emailadres is al aangemeld!';
}
elseif (!$voegtoe_res){
echo 'Query mislukt vanwege: '.mysql_error().' met query: '.$voegtoe_sql;
}
else {
echo 'Emailadres nu aangemeld!';
}
?>
Ja die error-code werkt prima, mij script is klaar:d.
Ik heb een script geschreven waarin een persoon zijn email kan opgeven om zich in te schrijven voor een nieuwsbrief. bevat controlemiddelen tegen valse adressen en host's en ook tegen duplicaten:d.
Zou ik hem posten bij de scripts?
Of wil je men code eerst zien of zo?
Bevat in totaal 3 bestande: db_settings.php, newsletter.php (inschrijving) en news_handler.php (de verwerking).
Ik ben benieuwd wat jij verstaat onder een vals adres en/of host. Gebruik je een regular expression?
Het voorkomen van duplicaten is kinderlijk eenvoudig, een UNIQUE op de kolom en klaar ben je. Dat heeft niets met PHP te maken, maar alles met basiskennis SQL.
mysql_connect($hostname, $user, $password) or die('Er is iets misgegaan met de database connectie: ');
mysql_select_db($db) or die('Er is iets misgegaan met de database selecteren: ');
if (mysql_errno() == 1062)
{
echo "Dit e-mail adres is reeds aangemeld!";
}
else if (!$res)
{
echo "Er is een probleem ontstaan tijdens de verwerking, onze excuses voor het ongemak, probeer later opniewu!";
}
else
{
echo "Bedankt om u in te schrijven voor de nieuwsbrief, u ontvang vanaf nu elke dag onze nieuwsbrief!";
}
}
}
else
{
echo "U heeft geen geldig e-mail adres in gevoerd!";
}
Begin je scripts altijd met de volgende regels:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
// rest van het script
?>
Wat ik gek vind, is dat je $email gaat controleren, maar dat deze variabele helemaal niet bestaat. Net zoals dat je trim() en strtolower() pas gebruikt ná de validatie. Ik zou deze functies al gebruiken voordat je met empty() controleert of de variabele $_POST['email'] is gevuld. Dan heb je al geen gedonder meer met een grappenmaker die spaties invult.
Als ik het goed heb, is 'else if' wat anders dan 'elseif' die je op regel 32 gebruikt.
Die gethostbyname() is inderdaad wel netjes, ga ik ook maar eens gebruiken. Ik vertrouwde tot nu toe uitsluitend op een regular expression en het verzenden van een activatie-email.
Ps. Let even op het inspringen, dat kan nog wat netter. Al kan het zijn dat het in jouw editor wel goed staat. Kijk even naar regel 15: if ($email_resolved == $email_host)
if ($email_resolved == $email_host)
{
echo("Dit email adres is niet geldig.");
}
else
{
mysql_connect($hostname, $user, $password) or die('Er is iets misgegaan met de database connectie: ');
mysql_select_db($db) or die('Er is iets misgegaan met de database selecteren: ');