Adatbázistábla és változó "egyeztetése"

Sziasztok!

Egy jó barátom megkért, hogy segítsek neki PHP-ban mivel nem ért hozzá és szerinte én igen (nos ez így nem teljesen igaz, most kezdek vele ismerkedni, de megígértem hogy segítek neki amennyit tudok). Adott a következő szituáció:
Felhasználó egy input mezőben megad egy karaktersorozatot, ezt eltárolom egy változóban. Valamint egy adatbázis táblában hasonló karaktersorozatok vannak. A kérdésem az lenne, hogy lehetne ezt ellenőrizni, hogy az felhasználó által megadott karaktersorozat benne van-e az adott táblában.

(FYI: ez egy nyereményjáték lenne az oldalán és a felhasználó vásárlás után kap egy kódot és így tudná meg, hogy nyert-e. Ezt szeretném neki valahogy hasonló módon megoldani.)

Várok mindenféle építőjellegű ötletet, esetleg teljesen más, hatékonyabb megoldást. Tényleg nemrég kezdtem el ismerkedni a PHP-val így a "mekkora láma vagy" és hasonló gondolatok esetén elég ha egy MLV-t írtok. :)

Előre is köszönöm mindenkinek!

Hozzászólások

MLV... te kerted.

Amugy... mezoket ossze szokas rendelni. Mittomen, ha van egy login nevu beviteli mezo (pontosabban egy olyan, ami a $_REQUEST['login'] erteket generalja) akkor az adatbazisban is _illik_ legyen egy login nevu mezo. Termeszetesen a ket nev tokre el is terhet, de annak nem latom ertelmet, hogy a komplett adatbazistablanak minden oszlopat vegigkeressuk (marpedig a kerdes megfogalmazasa ide vezet). Szoval akkor nezzuk a valaszokat fontossagi sorrendben:
1) tanulj meg kerdezni
2) tanitsd meg a baratodat is kerdezni
3) ha megvan, akkor probald meg megegyszer feltenni a kerdest.

Ha az a kerdes, amire en tippelek, akkor azt egy ilyen SQL queryvel lehet megcsinalni:


mysql_query("SELECT COUNT(*) AS nr_of_matches FROM tabla WHERE field LIKE '%" . $_REQUEST['field'] . "%'");

A szintaxis kozel sem jo, nyilvan meg kell nezni, van-e connection objektum, azt atadni, a feladat specifikaciojatol fuggoen az egyik wildcard %-ot el lehet hagyni, ha pl. a mezo elejen vagy vegen kell keresni.
A pelda jelenleg a talalhato sorok szamat adja vissza, ami nem biztos, hogy a feladatnak megfelel - a COUNT -os sort a valodi mezonevekre lecserelve az adott rekordok masznak be az eredmenybe.

--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Ezert mondtam, hogy a sor rengeteg hibat tartalmazhat. Nem torekedtem a biztonsagra, epp azert, hogy csak a lenyeg latszodjon. Jelenleg a kerdezo meg igazabol kerdezni sem tud, raadasul fingja nincs, mi valojaban a problema, es ennekokan szerintem bosegesen eleg neki amit irtam. Sot, meg sok is.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Látod ezért is írtam az MLV-t mert megérdemeltem kapom ha kapom. :)
1. Írtam igencsak az elején tartok a dolgoknak, kérdésfeltevés azért is lehet problémás mert sok fogalmat kell tisztáznom.
2. Ő csak egy feladatot mondott amire én botor módon azt mondtam megpróbáljuk, remélve magamtól is meglesz a megoldása, de ez nem jött össze.
3. Ezzel a ponttal egyet értek, de amit írtál az alapján úgy tűnik Neked is sikerült megérteni mit akartam kihozni a topikindító zagyvaságból. :)

Köszi a segítséget! :)

all resistance is useless

kupon kódot akarsz ellenőrizni?

Gondolom van egy tábla, amiben benne van, hogy
kuponkód, enabled, ...
FJDGJG, True, ...
DFGTGHR, True, ...
ZHRKK3, False, ...

Ahol a kuponkód egyértelmű, az enabled meg jelzi, hogy szabad-e még az a kód. Ha valaki eltalálja, akkor értelemszerűen False-ra állítod. Vagy 0-ra. Vagy majd valami Oracle buzi elmondja, hogy mire.

Csinálsz egy formot, ahol egy inputba beírhatja a kódot, illetve megnyomhat egy gombot.
SELECT * FROM kupon WHERE (enabled = true AND kuponkód = "$k")
Most itt vagy egy tárolt eljárást írsz, vagy prepared statementet, vagy kézzel sanitizálsz, a lényeg, hogy ezt nem kopipészteled. Eredménytől függően dobsz fel egy oldalt illetve állítod át az enabled mezőt.

Ha adott vissza sort, akkor egy UPDATE keretében az enable-t átállítod, illetve nyertél.php-t kitolod, vagy nem csinálsz semmit és visszadobod a főoldalra, ahogy jólesik. Innentől a te dolgod, hogy mit kérsz el a nyájas júzertől, hogy eljuthasson hozzá a nyeremény.

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

Szerintem felesleges mindent levalogatni. En inkabb ilyen query-t irnek:
SELECT COUNT(*) WHERE enabled = true AND kod = '" . $k "'
itt eleve kettos biztonsagi fix van: a visszajovo adat csak egy szam (jo esetben 0 es 1 kozotti), tehat meg sql injection eseten is egy cseppet biztonsagosabb, masfelol a count -os lekerdezesek mindig gyorsabbak, mint az adatot viszaadok. (mondjuk, ez egy uniq indexet feltetelez a kuponkod oszlopon)
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.