Voorkomen van dubbele records
Maar als ik een zelfde persoon toevoeg blijf good =true en gaat hij door met INSERTEN
Indien er lege velden zijn is $good false en doet hij dit niet.
Wat doe ik hier niet goed?
Maar volgens mij gaat het fout bij
maar hoe?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$voornaam = mysql_real_escape_string($_POST['voornaam']);
$voorv = mysql_real_escape_string($_POST['voorv']);
$achternaam = mysql_real_escape_string($_POST['achternaam']);
$good = true;
$tvoornaam = trim($_POST['voornaam']);
$tvoorv = trim($_POST['voorv']);
$tachternaam = trim($_POST['achternaam']);
$sql = "SELECT voornaam, voorv, achternaam FROM leden WHERE voornaam = '".$voornaam."' AND voorv = '".$voorv."' AND achternaam = '".$achternaam."';";
$result = mysql_query( $sql );
if ( empty($tvoornaam) ) {
$good = false;
echo 'U kan geen medewerker toevoegen zonder voornaam!'.PHP_EOL;
echo '<br />'.PHP_EOL;
}
if ( empty($tachternaam) ) {
$good = false;
echo 'U moet een achternaam invullen voor de medewerker!'.PHP_EOL;
echo '<br />'.PHP_EOL;
}
if ( mysql_num_rows($result) > 0 ) {
$good = false;
echo "Anti-floodbeveiling<br />Oeps deze medewerker staat er blijkbaar al in.";
echo '<br />'.PHP_EOL;
}
if ( $good == false ) {
goback();
} else {
// dan inserten
}
?>
$voornaam = mysql_real_escape_string($_POST['voornaam']);
$voorv = mysql_real_escape_string($_POST['voorv']);
$achternaam = mysql_real_escape_string($_POST['achternaam']);
$good = true;
$tvoornaam = trim($_POST['voornaam']);
$tvoorv = trim($_POST['voorv']);
$tachternaam = trim($_POST['achternaam']);
$sql = "SELECT voornaam, voorv, achternaam FROM leden WHERE voornaam = '".$voornaam."' AND voorv = '".$voorv."' AND achternaam = '".$achternaam."';";
$result = mysql_query( $sql );
if ( empty($tvoornaam) ) {
$good = false;
echo 'U kan geen medewerker toevoegen zonder voornaam!'.PHP_EOL;
echo '<br />'.PHP_EOL;
}
if ( empty($tachternaam) ) {
$good = false;
echo 'U moet een achternaam invullen voor de medewerker!'.PHP_EOL;
echo '<br />'.PHP_EOL;
}
if ( mysql_num_rows($result) > 0 ) {
$good = false;
echo "Anti-floodbeveiling<br />Oeps deze medewerker staat er blijkbaar al in.";
echo '<br />'.PHP_EOL;
}
if ( $good == false ) {
goback();
} else {
// dan inserten
}
?>
Dubbele records voorkom je door in de database (de combinatie van) kolommen op UNIQUE te zetten.
Dat UNIQUE gaat niet lukken omdat er ook
meerdere leden zijn met dezelfde naam, maar
de variabelen bovenin komen voort uit
Als die variabelen overeen komen met de sql
wat voor waarde geeft $Result dan terug?
En wat voor waarde moet er uit mysql_num_rows($result) dan komen?
Gewijzigd op 19/11/2014 15:14:24 door Willem L
Als je die wilt zien zal je ze moeten ophalen met een van de mysql_fetch_xxxx() functies.
Mysql_num_rows() geeft het aantal van de records die zijn gevonden.
Let op: mysql functies zijn verouderd. Gebruik mysqli of pdo functies.
Wat is het nut van de regels 2 / 4?
Waarom regel 7 / 9?
Je kunt $_POST-waarden prima gebruiken in query of vergelijking.
Voorkomt ook dat je 3 variabelen hebt met dezelfde inhoud.
Debuggen:
Krijg je een echo te zien als je een dubbele (of lege) waarde invult?
Echo de query eens naar het scherm. Klopt er dan wat er staat met wat je verwacht?
Waar is de foutafhandeling bij je query? Je gaat er van uit dat de query is gelukt, maar klopt dat ook?
Je controleert of mysql_num_rows > 0 --> wat is de werkelijke waarde als je die echoot?
Hoor je zelf wel wat je hier zegt? ;-)
Je wilt geen unique index omdat er meerdere leden zijn met dezelfde naam, en dus ga je in je PHP-code controleren of een naam al voorkomt, en weiger je de insert uit te voeren als dat het geval is.
Het netto effect is hetzelfde, maar jouw manier is omslachtiger. En omdat die niet werkt, is het netto effect eigenlijk dat een unique index wél werkt. ;-)
Willem vp op 19/11/2014 21:46:55:
Hoor je zelf wel wat je hier zegt? ;-)
Mooi he?! ;-)