Hoe vergelijk ik een ingevoerde waarde met de waarde uit de db, zodat er niet meer dan 1 van die waarde in de DB komt te staan? Dus bijv. maar 1 email adres per persoon.
Als iemand mij de query en php code, zou kunnen verklappen zou dit tof zijn, zelf heb ik al het 1 en ander geprobeerd.
$sql = mysql_query(SELECT email FROM users);
if ($email != $sql)
// dan ga door
else
// echo dit email adres bestaat al.
Ik weet dat ik nog iets met fetch moet doen, maar ik kom er gewoon niet uit.
Gebruik een UNIQUE-constraint, dan een emailadres maar 1x worden opgeslagen. Een INSERT-query met een dubbele waarde zal keurig mislukken, precies zoals het hoort.
Met een SELECT-query is het technisch ook onmogelijk om 100% zekerheid te krijgen, een SELECT zegt iets over het verleden, niet over het heden. Al hebben we het dan over millisecondes...
Het is me bijna gelukt, maar dit is wat ik nu heb en de foutmelding is: "Parse error: syntax error, unexpected '{' in C:\Documents and Settings\Elroy\Bureaublad\UsbWebserver PHP uitleg\UsbWebserver\Root\Inlog\registreer.php on line 41"
<?php
ini_set('display_errors', 'on');
error_reporting(E_ALL);
include ("config.php");
function check_email_mx($email)
{
if ((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',
$email))) {
$host = explode('@', $email);
if(gethostbyname($host[1]))
return true;
}
return false;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
$onderwerp = "Registratie";
$ip = ($_SERVER['REMOTE_ADDR']);
$voornaam = trim($_POST["voornaam"]);
$achternaam = trim($_POST["achternaam"]);
$email = trim($_POST["email"]);
$password = trim($_POST["password"]);
$checkUserQuery = mysql_query("
SELECT email
FROM users
WHERE email='". mysql_real_escape_string(($_POST['email'])) ."'
");
$checkUser = mysql_num_rows($checkUserQuery);
if($checkUser == 1) {
echo "Dit email adres bestaat al, je kunt niet meer registreren.";
header("Location: form_login.php");
}
else(empty($voornaam)) {
echo '<p>U bent vergeten uw voornaam in te vullen.</p><p>
Klik <a href="javascript:history.back(1);">hier</a> om terug te gaan.';
} elseif (empty($achternaam)) {
echo '<p>U bent vergeten uw achternaam in te vullen.</p><p>
Klik <a href="javascript:history.back(1);">hier</a> om terug te gaan.';
} elseif (!check_email_mx($email)) {
echo '<p>U heeft geen geldig emailadres opgegeven.</p><p>
Klik <a href="javascript:history.back(1);">hier</a> om terug te gaan.';
} elseif (empty($password)) {
echo '<p>U bent vergeten uw wachtwoord in te vullen.</p><p>
Klik <a href="javascript:history.back(1);">hier</a> om terug te gaan.';
} else {
$gecodeerd = md5($password);
$query = "INSERT INTO users (voornaam, achternaam, email, password, ip)
VALUES('".$voornaam."','".$achternaam."','".$email."','".$gecodeerd."','".$ip."')";
if(mail($email, $onderwerp, "\ Dit zijn je ingevoerde gegevens. \Naam: ".$voornaam." ".$achternaam." \Wachtwoord: ".$password.""));
$result = mysql_query($query);
if($result){
echo "Je bent aangemeld, je kunt nu inloggen.";
echo '<p>U kunt nu inloggen</p><p>
Klik <a href="form_login.php">hier</a>';
} else {
echo 'Query niet uitgevoerd. '.mysql_error().' in '.$query.'.';
}
}
}
}
else {
header("Location: form_login.php");
}
?>
Voeg een unique aan je table toe op emailadres, krijg je een prachtige error die je kan afvangen bij het invoeren, en hoef je dus niet van tevoren te controleren op iets ouds.
IK snap er echt geen hout van, ik heb het nu zo geprobeerd
(dus regel 27 tot 37 vervangen)
$dbres = mysql_query("SELECT `id` FROM `[users]` WHERE `email`='{$email}'");
if(mysql_num_rows($dbres) > 0){
echo "Dit email adres is er al.";
}
Maar dan krijg ik deze foutmelding.
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Documents and Settings\Elroy\Bureaublad\UsbWebserver PHP uitleg\UsbWebserver\Root\Inlog\registreer.php on line 28
Als je in PMA naar de tabel gaat, zie je een lijstje met de kolommen, waaronder email. Rechts van de naam van de kolom vind je allemaal icoontjes, één daarvan is . Die klik je aan, en dan is alles goed.
Kijk dat werkt ook weer dank je wel, alleen nu als er dus een dubbele waarde wordt ingevoerd dan komt de DB met een antwoord en ik zou graag mijn eigen antwoord willen geven.