Ik ben op zoek naar een scriptje die nakijkt of de nieuwsbrief checkbox van een contactformulier is aangevinkt; dan kijkt of het emailadres reeds niet in de db zit.
Indien niet; voegt hij het toe in de db.

Iemand een idee of een leuk scriptje vanwaar ik kan vertrekken.
Niet getest:
<?php
ini_set ('display_errors', 1);
error_reporting (E_ALL | E_STRICT);
$errs = array (); // deze moet je zelf vullen met eventuele errors
$msgs = array ();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset ($_POST['nieuwsbrief'])) {
if (isset ($_POST['email'])) {
$sql = "
SELECT COUNT(id) AS aantal
FROM tabelnaam
WHERE email = '" . mysql_real_escape_string ($_POST['email']) . "'
";
if ($res = mysql_query ($sql) && mysql_num_rows ($res) == 0) {
$sql_insert = "
INSERT INTO tabelnaam
(
email
)
VALUES
(
'" . mysql_real_escape_string ($_POST['email']) . "'
)
";
if (mysql_query ($sql_insert)) {
if (mysql_affected_rows () == 1) {
array_push ($msgs, 'E-mail adres is toegevoegd');
}
}
}
}
}
}
?>
Dag Jan; ik ben al een flink eind op weg nu; op z'n dreamweavers. In uw voorbeeld zie ik arrays; daar ben ik nog een leek in.
Ik heb volgend ding al ineen kunnen steken, maar het wringt enkel nog bij de insert. Vermoedelijk verkeerd genoteerd: trial en error tot het is opgelost.
Vind je het script ok ?

<?php
if(isset($_POST['nieuwsbrief'])) {
$loginUsername = $_POST['uemail'];
$LoginRS__query = "SELECT email FROM tblnieuwsgebruiker WHERE email='" . $loginUsername . "'";
mysql_select_db($dbxxx, $dconnxx);
$LoginRS=mysql_query($LoginRS__query, $dconnxx) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);

//if there is now row in the database, the email was not found - can add email now
if (empty($loginFoundUser)) {
$datumm = date('Y-m-d H:i:s');
$emaill = $_POST['uemail'];
$naamm = $_POST['uname'];
$insertSQL = sprintf("INSERT INTO tblnieuwsgebruiker naam, email, datum VALUES '%s','%s','%s'", $naamm, $emaill, $datumm);
echo $insertSQL;
mysql_select_db($dbxxx, $dconnxx);
$Result1 = mysql_query($insertSQL, $dconnxx) or die(mysql_error());
}
}
?>
Hier mijn op/aanmerkingen. Kijk nog even goed naar mijn eerdere voorbeeld ;-)
<?php
if(isset($_POST['nieuwsbrief'])) {
// waarom de ene variabele in de andere kopieren?
$loginUsername = $_POST['uemail'];
// kijk uit voor SQL injection; gebruik mysql_real_escape_string
$LoginRS__query = "SELECT email FROM tblnieuwsgebruiker WHERE email='" . $loginUsername . "'";
// connecten/selecten van je DB doe je meestal aan het begin van je script
mysql_select_db($dbxxx, $dconnxx);
$LoginRS=mysql_query($LoginRS__query, $dconnxx) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);

//if there is now row in the database, the email was not found - can add email now
if (empty($loginFoundUser)) {
// deze is niet nodig. Dat kun je met NOW() doen in je INSERT query
$datumm = date('Y-m-d H:i:s');
// waarom de ene variabele in de andere kopieren?
$emaill = $_POST['uemail'];
$naamm = $_POST['uname'];
// kijk uit voor SQL injection; gebruik mysql_real_escape_string
$insertSQL = sprintf("INSERT INTO tblnieuwsgebruiker naam, email, datum VALUES '%s','%s','%s'", $naamm, $emaill, $datumm);
echo $insertSQL;
// die select heb je al gedaan, dus is hier niet meer nodig
mysql_select_db($dbxxx, $dconnxx);
$Result1 = mysql_query($insertSQL, $dconnxx) or die(mysql_error());
}
}
?>
Jan... geen or die() toestaan! Dat is nogal lelijk en niet bezoekervriendelijk ;-).
Wél bezoekervriendelijk:
<?php
$inResult = mysql_query($insertSQL, $dconnxx);
if($inResult) {
// goed
} else {
echo "Query ging fout: ".$insertSQL."<br />";
echo "Fout: ".mysql_error();
}
?>
@djemo: Die "die" was de mijne ! :-))

Jan, kan het zijn dat volgende lijn in uw scriptje niet kan:
<?
if ($res = mysql_query ($sql) && mysql_num_rows ($res) == 0) {
?>

Ik heb dit
<?
$res = mysql_query($sql);
$num_rows = mysql_num_rows($res);
if ($num_rows == 0) {
?>

Dan lukt de insert wel, maar geeft hij een foutmelding weer:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/kasadv/public_html/nl/SendMail_contact.php on line 8

Voor de rest is het nog niet gans werkende, omdat ik het ook moet implementeren tussen het contactformulier en die validatie. Maar ik stormbrain verder.
Je kunt geen records tellen bij een INSERT-query. Dat geldt alleen bij een SELECT-query. Bovendien controleert jouw stukje niet of de query wel of niet gelukt is ;-).

Reageren