Egyedi sorok beszúrása ellenőrzéssel
Sziasztok!
Van egy űrlap, a felhasználó adatokat küld be rajta keresztül.
Szeretném valahogy elkerülni azt, hogy egyet kétszer is beszúrhasson az adatbázisba, így unique tulajdonságot adtam a mezőnek. Egyszerre több sort is szeretnék beszúrni, de ha talál egy már létezőt akkor leáll a folyamat.
Eddig ezt a megoldást találtam, működik is, de szeretnék érdeklődni, hogy létezik-e szebb, okosabb, gyorsabb megoldása is ennek?Köszönöm a segítségeteket!
■ Van egy űrlap, a felhasználó adatokat küld be rajta keresztül.
Szeretném valahogy elkerülni azt, hogy egyet kétszer is beszúrhasson az adatbázisba, így unique tulajdonságot adtam a mezőnek. Egyszerre több sort is szeretnék beszúrni, de ha talál egy már létezőt akkor leáll a folyamat.
Eddig ezt a megoldást találtam, működik is, de szeretnék érdeklődni, hogy létezik-e szebb, okosabb, gyorsabb megoldása is ennek?
mysql_query('INSERT ...');
if (mysql_errno() == 1062) {
echo 'Dupla!';
}
Szeretném valahogy elkerülni
- miféle adatokról van szó
- milyen mezői vannak a táblának
- mely mező unique
nem lehet pontosabb véleményt kialakítani.Általában session+egyedi szám segítségével oldják meg:
- amikor az űrlapot generálod gondolsz egy véletlen és egyedi számra majd a számot beírod az űrlapba egy hidden mezőbe és elmented a sessionba
- amikor az űrlapot beküldik összeveted a hidden mezőben levő egyedi számot a sessionbelivel, majd törlöd a sessionból
Így ha az űrlapot többször küldik be, a második és további próbálkozásokat a PHP elveti, mert a hidden mezőben megmaradt a régi egyedi szám, de a sessionban már nincs.Természetesen kérdés, hogy az űrlap többszöri kitöltése ugyanazokkal az adatokkal duplázásnak számít, vagy nem. De ez már a logikai rész, amiben csak az dönthet aki ismeri az illető adatok mibenlétét.
Valóban, így nehezen érthető
Konkrét feladat egy része: Szeretnénk email címeket tárolni adatbázisban. (Persze nem spamelés céljából). Egy szövegmezőt használva erre, akár egy, akár száz email címet is feltudjunk tölteni. Ezt a részt már megvalósítottam, a problémám az, hogy ha létezik már az adott email cím az adatbázisban, akkor elszáll, nem tudja folytatni a többivel.
Egyesével ellenőrizni, hogy szerepel-e már szerintem nem egy szép megoldás, inkább egysével insertelem őket, csak valahogy kellene tudnom, hogy melyik email szerepelt már.
Itt a tábla egyszerűsített verziója amivel tesztelem.
Így már más. Így tényleg kell
- benyomod az összes kapott e-mail címet egy időszakos táblába
- az emailek táblába átmásolod azokat amelyek még nincsenek benne
- az időszakos táblából törlöd a feldolgozottakat
Az első és második lépés között lehetnek más lépések, például ellenőrzés tiltólistából.A lépések között lehet késleltetés, például ha úgyis csak éjfélkor van e-mail küldés, akkor bőven elég csak előtte végezni az átömlesztést.
De az az érzésem, hogy én valószínűleg az egyenkénti select + insert páros ellenőrzést választanám. Nem hinném, hogy érdemes volna bonyolítani.
Tetszik az ötleted, de jó ha