Goedemiddag,

Ik heb momenteel het volgende script:

<? if (trim($_POST['checkbox'])) { include("config.php");

$naam = mysql_escape_string($_POST['name']);
$email = mysql_escape_string($_POST['email']);
$ip = mysql_escape_string($_SERVER["REMOTE_ADDR"]);



$add_all = "INSERT INTO wiml_maillist VALUES ('','','$naam','$email','$ip', '".time()."','2')";
mysql_query($add_all, $db) or die (mysql_error());
mysql_close($db); ?>

<form name="form" method="POST" >
<input name="form" type="hidden" value="" />
<table>
<tr>
<td width="195">Naam: <i>*</i></td>
<td width="401"> <input type="tekst"name="name" id="email2">
</td></tr>
<tr>
<td>E-mail adres: <i>*</i></td>
<td><input type="tekst"name="email" id="email2"></td>
</tr>
<td>Nieuwsbrief ontvangen?</td>
<td>
<input name="checkbox" type="checkbox" value="checkbox" />

</td>
<tr><td>
<input type="submit" name="Submit2" value="Versturen" onclick="" id="button" /></td></tr>
</table>

Alles gaat goed, dat wil zeggen dat hij het mits de checkbox is aangevinkt hij alle data in de database zet.
Enkel als $email al in de database voorkomt krijg ik:
Duplicate entry '[email protected]' for key 2

Is het ook mogelijk dat hij deze foutmelding negeert en gewoon doorgaat met het script.. of een andere manier om het te omzeilen?

Misschien met een if ofzo?
iemand? alvast bedankt
Zie eens: http://dev.mysql.com/doc/refman/5.1/en/insert.html

MySQL
If you specify the IGNORE keyword in an INSERT statement, errors that
occur while executing the statement are treated as warnings instead.
For example, without IGNORE, a row that duplicates an existing UNIQUE
index or PRIMARY KEY value in the table causes a duplicate-key error
and the statement is aborted. With IGNORE, the error is ignored and the
row is not inserted


Daar staat een INSERT IGNORE INTO of evt. kun je REPLACE INTO gebruiken.
En plak jij ook altijd de irritante knipperende alarm-ledjes op je autodashboard dan af :-P?
bedankt, heb het bekeken.. maar moet ik dan niet eerst een soort if inzetten om te checken of $email duplicate is?

ik ben niet echt gevorderd met php, weet je misschien hoe ik kan checken of de $email dubbel is? want enkel in dat geval mag hij de insert ignoren...

bedankt

ps; ik heb geen auto;-)
Negeren ( fout onderdrukken ) is geen (goede) manier van oplossen ;)
En plak jij ook altijd de irritante knipperende alarm-ledjes op je autodashboard dan af :-P?
Nee, maar in dit geval is het gaat in dit geval enkel om een UNIQUE in dat geval ga ook liever voor een REPLACE. Maar je zou het ook in PHP kunnen afvangen en daar de errors negeren die jou even niet welgevallig zijn.
Negeren ( fout onderdrukken ) is geen (goede) manier van oplossen ;)
Ah, nu snap ik waarom we tegenwoordig allemaal zo'n fan zijn van die TRY-CATCH-FINALLY-structuur en mensen die werken met error-reporting E_NONE en überhaupt van MySQL...

PS:
Je kunt ook gewoon even afvangen met:
<?php
mysql_query($sInsertQuery);
if(mysql_errorno() == 1062) echo 'Sorry, maar jij probeert te dupliceren';
else if(mysql_errorno()) echo 'Er is een andere fout opgetreden';
?>
Overigens moet je dan wel een UNIQUE-key op de (combinatie van) kolom(men) hebben die je uniek wilt hebben.

Gelieve Niet Bumpen:

Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de knop om je tekst aan te passen.

SanThe.

hmm het gaat erom dat er bij een contactformulier de optie wordt geboden om je aan te melden voor de nieuwsbrief..

maar als iemand dan al ingeschreven is voor de nieuwsbrief en toch een x het contactformulier verzend en daarbij aanvinkt dat hij de nieuwsbrief wil ontvangen dan krijg ik die melding en verstuurd hij de contactform niet..

vandaar dat ik hem wil omzeilen..
het is me echter nog steeds niet gelukt..

iemand?
maar als iemand dan al ingeschreven is voor de nieuwsbrief en toch een x het contactformulier verzend en daarbij aanvinkt dat hij de nieuwsbrief wil ontvangen dan krijg ik die melding en verstuurd hij de contactform niet..
Is die tabel voor nieuwsbriefontvangers een aparte tabel? Dan zou ik gewoon een UNIQUE-key zetten op de kolom `mailaddress` (of hoe die bij jou ook mag heten). Bij het falen van de query op die tabel zou ik er gewoon vanuit gaan dat het een duplicatie is en dat hij daarom mislukt is (in theorie zijn er nog een paar andere mogelijkheden, maar die komen zeer weinig voor en daarnaast kun je er weinig mee dan zeggen dat het niet gelukt is om de persoon toe te voegen aan de tabel).
hmm oke, en waar kan ik dat doen?

het gaat er nu dus om dat als het mailadres al in de database staat (aparte tabel) en iemand vult het contactformulier in en vinkt de optie om de nieuwsbrief te ontvangen aan dan krijg ik de melding

Duplicate entry '[email protected]' for key 2

en verstuurt hij het contactformulier niet meer... dat kan ik dus omzeilen middels unique?
Duplicate entry '[email protected]' for key 2
Jij krijgt die error al?
Nou dan moet je gewoon eens een keer dit:
mysql_query($query) or die();
vervangen door:
mysql_query($query);

Reageren