Lekérdező sztringben opcionális paraméterek
Szeretném azt megvalósítani az oldalon, hogy ha simán csak ennyi szerepel az URL-ben, hogy .../kategoria.php akkor véletlenül válasszon ki videókat (minden kategóriából egyet), ha pedig így adom meg, hogy .../kategoria.php?kategoria=video_kategoria1&sorszamto l=20. Tehát, hogy opcionálisak legyenek a paraméterek, mint pl. egy függvényben. Meg lehet ilyet valósítani PHP-ben?
re: Lekérdező sztringben opcionális paraméterek
Ha azt mondom, hogy meg, akkor jó? :)
Egyébként paramétert isset függvénnyel tesztelj.
PHP kód:
if (isset($_GET['kategoria']))
{
// kategóriában lévő videók listázása
}
else
{
// random videók listázása
}
re: Lekérdező sztringben opcionális paraméterek
Sokkal jobban járnál, ha keresnél itt a fórumon valakit a megcsinálja helyetted. Mert az URL-ben küldözgetett paraméterekkel óvatosan kell bánni. Konkrétan az l=20 gondolom Limit, feltételezem hogy SQL.
a Switch / case feltételt javaslom és a default: ágba tedd ami akkor fut le mikor nincs param.
http://twitt.hu/yS
Kód:
<?php
$kategoria = trim(strip_tags($_GET["katagoria"]));
//biztos hogy szám? :)
$limit = (int)$_GET["l"];
switch($kategoria){
case "lorem":
break;
case "ipsum":
break;
case "akarmi":
default:
//ez az alap
break;
}
?>
re: Lekérdező sztringben opcionális paraméterek
@arth2o:
Miért strip_tags-elsz és trim-elsz? XSS elleni védelem miatt inkább a view-ba kéne tenni.
Miért kell a kategóriákat megadni? Szvsz azokat az adatbázisban kellene tárolni.
re: Lekérdező sztringben opcionális paraméterek
Idézet:
arth2o eredeti hozzászólása
Sokkal jobban járnál, ha keresnél itt a fórumon valakit a megcsinálja helyetted. Mert az URL-ben küldözgetett paraméterekkel óvatosan kell bánni. Konkrétan az l=20 gondolom Limit, feltételezem hogy SQL.
a Switch / case feltételt javaslom és a default: ágba tedd ami akkor fut le mikor nincs param.
http://twitt.hu/yS Kód:
<?php
$kategoria = trim(strip_tags($_GET["katagoria"]));
//biztos hogy szám? :)
$limit = (int)$_GET["l"];
switch($kategoria){
case "lorem":
break;
case "ipsum":
break;
case "akarmi":
default:
//ez az alap
break;
}
?>
Az nem l=20, hanem sorszámtól, hogy hanyas sorszámtól adjon ki öt videót: kiválaszt véletlenül, abban a kategóriában lévő videók közül mondjuk az 53-at és onnantól kitesz az oldalra 5-öt (53-tól 57-ig).
És a video_kategória1, helyett eredetileg valamilyen konkrétan megnevezett kategória szerepel (nincs benne szám)
re: Lekérdező sztringben opcionális paraméterek
Idézet:
toldigabor eredeti hozzászólása
Az nem l=20, hanem sorszámtól, hogy hanyas sorszámtól adjon ki öt videót: kiválaszt véletlenül, abban a kategóriában lévő videók közül mondjuk az 53-at és onnantól kitesz az oldalra 5-öt (53-tól 57-ig).
Részletkérdés.
Idézet:
toldigabor eredeti hozzászólása
És a video_kategória1, helyett eredetileg valamilyen konkrétan megnevezett kategória szerepel (nincs benne szám)
Ez is.
Tegyük föl van két adatbázis táblád, a videók és a kategóriák
Kód:
| videok | | kategoriak |
-------------- --------------
| id | >>>>>| id |
| kategoria |>>>>> | seo |
| path | stb...
stb...
Ahol ID az elsődleges kulcs és videok.kategoria a kategoriak.id-re hivatkozik és seo a kategória keresőoptimalizált neve.
Ekkor ezzel a két lekérdezéssel lehet lekérdezni az adott kategoriákhoz tartozó videókat:
PHP kód:
SELECT * FROM videok LEFT JOIN (kategoriak) ON (videok.kategoria = kategoria.id) WHERE kategoriak.seo = "'kategoria-seo'" LIMIT 'sorszam', 5
De ha adatbázis nélkül is ismered a kategóriák azonosítóját, akkor
PHP kód:
SELECT * FROM videok WHERE kategoria = "'kategoria-azonosito'" LIMIT 'sorszam', 5
' ' alatt a saját beillesztett értékeidet értem.
re: Lekérdező sztringben opcionális paraméterek
Idézet:
mallee eredeti hozzászólása
Részletkérdés.
Ez is.
Tegyük föl van két adatbázis táblád, a videók és a kategóriák
Kód:
| videok | | kategoriak |
-------------- --------------
| id | >>>>>| id |
| kategoria |>>>>> | seo |
| path | stb...
stb...
Ahol ID az elsődleges kulcs és videok.kategoria a kategoriak.id-re hivatkozik és seo a kategória keresőoptimalizált neve.
Ekkor ezzel a két lekérdezéssel lehet lekérdezni az adott kategoriákhoz tartozó videókat:
PHP kód:
SELECT * FROM videok LEFT JOIN (kategoriak) ON (videok.kategoria = kategoria.id) WHERE kategoriak.seo = "'kategoria-seo'" LIMIT 'sorszam', 5
De ha adatbázis nélkül is ismered a kategóriák azonosítóját, akkor
PHP kód:
SELECT * FROM videok WHERE kategoria = "'kategoria-azonosito'" LIMIT 'sorszam', 5
' ' alatt a saját beillesztett értékeidet értem.
És akkor azt az isset-tel kell megadni, hogy adtam-e meg paramétereket? Mert úgy akarom, ha az oldalon rákattint valamelyik kategória linkre, akkor abból az adott kategóriából adjon ki 5-öt (ekkor kell az URL-ben a paraméter). Ha pedig felül a főmenűben kattint Videók kategóriánként-ra, akkor minden kategóriából 1-et tegyen ki véletlenül (ekkor nem kell paraméter).
re: Lekérdező sztringben opcionális paraméterek
Idézet:
toldigabor eredeti hozzászólása
És akkor azt az isset-tel kell megadni, hogy adtam-e meg paramétereket? Mert úgy akarom, ha az oldalon rákattint valamelyik kategória linkre, akkor abból az adott kategóriából adjon ki 5-öt (ekkor kell az URL-ben a paraméter). Ha pedig felül a főmenűben kattint Videók kategóriánként-ra, akkor minden kategóriából 1-et tegyen ki véletlenül (ekkor nem kell paraméter).
Igen, az isset-tel tudod ellenőrizni egy változó meglétét és hogy a változó értéke nem NULL. A te esetedben ez tökéletes lesz.
re: Lekérdező sztringben opcionális paraméterek
Idézet:
mallee eredeti hozzászólása
@arth2o:
Miért strip_tags-elsz és trim-elsz? XSS elleni védelem miatt inkább a view-ba kéne tenni.
Miért kell a kategóriákat megadni? Szvsz azokat az adatbázisban kellene tárolni.
Azért mert nem szabad megbízni a felhasználóktól érkező adatokban. Amit látsz, csak érzékeltetés. Egy jóravaló PHP programozó ennél sokkal paranoiásabb. Switch: azt gondoltam jobban kontroll alatt szeretné tartani a kategóriákat.
Én a view-ban már csak adatot jelenítenék meg. Ami oda ér, abban már nem lehet kártékony kód.
Nem elég betolni a komplett SQL kérést. Szép, (látszik hogy már 1-2 begépeltél) de nem látom benne, hogy védekeznél az SQL injection ellen. Tipikus példát írtál arra, hogyan lehet beoltani egy SQL kérést.
_http://en.wikipedia.org/wiki/SQL_injection
re: Lekérdező sztringben opcionális paraméterek
Idézet:
arth2o eredeti hozzászólása
Én a view-ban már csak adatot jelenítenék meg. Ami oda ér, abban már nem lehet kártékony kód.
100%-ban egyetértek. Ha már MVC-zik valaki, akkor a VIEW-t szerkesztő designernek ne kelljen már ismernie a php függvényeket. A paraméter kezelés "elméleti" ismereteim szerint egyébként is a Controller feladata. :wink: