controleren van dubbele rij.
Mvg,
Erik
Veld die niet dubbel mag voor komen uniek maken
Dan inserten en error afvangen :)
Of de moeilijke manier en mysql_num_rows gebruiken =P
zo doe ik het ook altijd...
UNIQUE maken is de enige juiste manier. De database moet er zelf voor zorgen dat er geen dubbelen (lees: mogelijk corrupte) data in de database wordt gezet.
SELECT * FROM tabel WHERE email = '[email protected]';
en dan mysql_query enz...
en daarna de insert
of meteen de inseert en dan de error goed afvangen...
titel, bericht, poster, email....
als iemand dubbel op de submit knop druk o.i.d.
hoe controleer je dat dan?
elk veld unique maken heeft dan weinig zin,
2x dezelfde titel komt vaker voor toch.
Mvg,
Erik
De combinatie van kolommen is ook unique te maken. 2x exact hetzelfde bericht door dezelfde persoon op dezelfde datum, is dan niet mogelijk.
Eris:
PurpleMadness waarom zou je het willen. Het is trager het vraagt een query extra enz..
Ja, maar voor de mensen die niet weten hoe ze de andere manier moeten doen enz. ;)
en zo 'trager' is het niet hoor, het is minder dan 1/10 van een seconde verschil, wat doen mensen hier daar toch moeilijk over.. =/
Ik had hier dan weer niet bij nagedacht.. inderdaad kan je de velden voor de foutmelding, want daar gaat het hier over, als combinatie uniek maken.
Dan moet je alleen niet in je functie ook weer gaan verwijzen, zodat die foutmelding ook in je database komt :P
bij enorm veel data wordt dit verschil groter en merk je dit wel...
De hoeveelheid data valt hier (als het goed is) te verwaarlozen.. Het gaat om een foutafhandelingsscript.. maar een bepaalde fout hoeft maar 1 keer voor te komen, omdat dan de fout al bekend is.
Maar toch is de MySQL oplossing de beste, minder kans op fouten.
@Erik
Misschien ook wel leuk om er een Admin bij te maken, waarbij je status op "wordt aan gewerkt" kan zetten, en dat ook terug kan geven aan de gebruiker.. En eventueel een status opgelost, of gewoon de rij deleten uit je error log tabel.
PurpleMadness:
Ja, maar voor de mensen die niet weten hoe ze de andere manier moeten doen enz. ;)
en zo 'trager' is het niet hoor, het is minder dan 1/10 van een seconde verschil, wat doen mensen hier daar toch moeilijk over.. =/
Voor mensen die niet weten hoe ze dit moeten maken, is het misschien een leuke uitdaging om het te leren. Zo moeilijk is het niet.Eris:
PurpleMadness waarom zou je het willen. Het is trager het vraagt een query extra enz..
Ja, maar voor de mensen die niet weten hoe ze de andere manier moeten doen enz. ;)
en zo 'trager' is het niet hoor, het is minder dan 1/10 van een seconde verschil, wat doen mensen hier daar toch moeilijk over.. =/
En in die 1/10 van een seconde kan het helemaal fout gaan. Jij controleert of iets al bestaat, antwoord is nee, ondertussen vindt er een INSERT plaats (door een ander script/gebruiker) en vervolgens ga jij op basis van jouw controle nogmaals een INSERT uitvoeren. Resultaat: corrupte database.
En als er iets is dat je ten koste van alles wilt vermijden, dan is dat wel een corrupte database. Wanneer je de data niet meer kunt vertrouwen, ben je reddeloos verloren.
Frank:
De combinatie van kolommen is ook unique te maken. 2x exact hetzelfde bericht door dezelfde persoon op dezelfde datum, is dan niet mogelijk.
wat bedoel je met de combinatie van kolommen UNIQUE maken?
en hoe voer je de controle uit?
Mvg,
Erik
Een query zal geweigerd worden als de waarde voor kolom1 al in de tabel staat.
of bijv:
Je kunt gewoon een insert of update uitvoeren, als het fout gaat kun je met mysql_errno() de foutcode ophalen en hierop actie ondernemen. De foutcode voor een UNIQUE-overtreding is volgens mij 1062.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$qryInsert = "INSERT INTO t (kol1,kol2,kol) VALUES( 1, 2, 3)";
if( !mysql_query( $qryInsert, $rConn ) )
{
if( mysql_errno( ) == 1062 )
{
echo 'Waarde bestaat al....';
}
}
?>
$qryInsert = "INSERT INTO t (kol1,kol2,kol) VALUES( 1, 2, 3)";
if( !mysql_query( $qryInsert, $rConn ) )
{
if( mysql_errno( ) == 1062 )
{
echo 'Waarde bestaat al....';
}
}
?>
dus al ik heb:
titel.
bericht.
en ik run deze query:
ALTER TABLE jouw_tabelletje ADD UNIQUE(titel,bericht).
dan moet er een foutmelding komen als er een dubbele melding wordt gepost.
oke thnx :)
Als er al dubbele gegevens in je database staan zal de ALTER-statement mislukken en zul je eerst die gegevens aan moeten passen.