Voorkomen van dubbele records

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Willem L

Willem L

19/11/2014 13:57:12
Quote Anchor link
Ter voorkoming van dubbele records heb ik onderstaande code.
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php mysql_num_rows($result)?>

maar hoe?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
       }
?>
 
PHP hulp

PHP hulp

29/03/2024 13:59:23
 
- SanThe -

- SanThe -

19/11/2014 14:07:16
Quote Anchor link
Je doet eerst een SELECT en dan ga je pas kijken of er wel iets is ingegeven, niet logisch.

Dubbele records voorkom je door in de database (de combinatie van) kolommen op UNIQUE te zetten.
 
Willem L

Willem L

19/11/2014 14:48:57
Quote Anchor link
Ok, San The
Dat UNIQUE gaat niet lukken omdat er ook
meerdere leden zijn met dezelfde naam, maar
de variabelen bovenin komen voort uit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if ( isset ($_GET['p']) && $_GET['p'] == 'addregsql' ) {
?>

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
 
- SanThe -

- SanThe -

19/11/2014 16:36:15
Quote Anchor link
$result geeft een set met resultaten.
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.
 
Obelix Idefix

Obelix Idefix

19/11/2014 21:33:48
Quote Anchor link
De hele volgorde van je script komt onlogisch over.
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?
 
Willem vp

Willem vp

19/11/2014 21:46:55
Quote Anchor link
> Dat UNIQUE gaat niet lukken omdat er ook meerdere leden zijn met dezelfde naam

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. ;-)
 
Obelix Idefix

Obelix Idefix

19/11/2014 22:26:40
Quote Anchor link
Willem vp op 19/11/2014 21:46:55:
Hoor je zelf wel wat je hier zegt? ;-)

Mooi he?! ;-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.