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.
<?

$sql = 'SELECT emailadres FROM leden WHERE emailadres = "'.$nieuw.'"';
$res = mysql_query($sql,$link);
if ($res && mysql_num_rows($res) == 1)
{
echo 'Emailadres is al aangemeld!';
} else {
$voegtoe_sql = 'INSERT INTO leden (emailadres) VALUES ("'.$nieuw.'")';
$voegtoe_res = mysql_query($voegtoe_sql,$link);
echo 'Emailadres nu aangemeld!';
}

?>
database connectie is dat bij mij meestal
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!';
}
?>
Wel ja, ik leer programeren op school in C# en daar hebben we de gouden regels van de redundantie, overtolligheid en unieke waardes he:d.

Ik ga ff die laatste uitproberen.
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.
Hier heb je men handler
Geef mij uw mening.
<?

include 'db_settings.php';

if ($_SERVER['REQUEST_METHOD'])
{
if(!empty($_POST['email']))
{
if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email))
{
$post_email = $_POST['email'];
$email_host = explode("@", $post_email);
$email_host = $email_host[1];
$email_resolved = gethostbyname($email_host);
if ($email_resolved == $email_host) { echo("Dit email adres is niet geldig."); }
else {

$trim_email = trim($post_email);
$lower_email = strtolower($trim_email);
$email= $lower_email;

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: ');

$sql = "INSERT INTO newsletter (id_col,email,recieve) VALUES ('','".$email."','1')";
$res = mysql_query($sql);

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!";
}

}
else
{
die("U heeft niks ingevoerd!");
}
}
?>

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)
Zo hier heeft u de aangepaste code, nog tips?
<?
ini_set('display_errors', 1);
error_reporting(E_ALL);

include 'db_settings.php';

if ($_SERVER['REQUEST_METHOD'])
{
$post_email = $_POST['email'];
$trim_email = trim($post_email);
$email = strtolower($trim_email);

if(!empty($_POST['email']))
{
if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email))
{

$email_host = explode("@", $email);
$email_host = $email_host[1];
$email_resolved = gethostbyname($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: ');

$sql = "INSERT INTO newsletter (id_col,email,recieve) VALUES ('','".$email."','1')";
$res = mysql_query($sql);

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!";
}
}
else
{
die("U heeft niks ingevoerd!");
}
}
?>

Reageren