| | |
| Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Autor | Správa |
---|
Registrovaný: 31.05.09 Prihlásený: 02.06.17 Príspevky: 562 Témy: 37 Bydlisko: BegyBen |
Zdravim,
Potreboval by som radu. Mam klasicky formular pre vyhladavanie podla urcitych konkretnych poziadaviek. Cize napr. pohlavie, vek, mesto, stat
Podla tychto poziadavkov searchera chcem vyhladavat udaje ktore tieto poziadavy splnuju. Cize ak zadam:
Pohlavie => muz
Vek => 28
Mesto => Bratislava
Stat => Slovensko
- vyhladam mi to uzivatela ktory v tabulke splna tieto poziadavky. Atuje kamen urazu. Problem je, ze ak chcem vyhladavat napr. len pohlavie vyhlada mi to osoby, krore maju zadane len pohlavie a vek, mesto, stat je "prazdny" cize mi to nenajde nikho teda jeto blbost. Porebujem aby vyhladavanie vedelo urcit ze vyplneni je len vek a teda budem hladat iba podla tohoto parametru.
Dufam, ze je otazka jasna.
Dakujem za odpoved
Peter
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 Bydlisko: Žilina |
urob správne podmienky a nie je problém... v čom konkrétne máš zádrhel? nevieš na to vymyslieť príkaz IF alebo... ? skús sem hodiť aj časť zdrojáku, že ako to máš riešené
_________________ C#, PHP, ... |
|
Registrovaný: 31.05.09 Prihlásený: 02.06.17 Príspevky: 562 Témy: 37 Bydlisko: BegyBen | Napísal autor témy Snacker: 31.05.2009 15:57 | |
|
FORMULAR:
Kód: <form action="profil.php?profil=searchcontacts_profil&search=1" method="post"> Nick: <input type="text" name="search_nick" value="" maxlength=29><br /> Vek: <input type="text" name="search_years" value="" maxlength=29><br /> Pohlavie:<br /> <input type="radio" name="search_sex" value="1" checked="checked" />Muz <input type="radio" name="search_sex" value="2" checked="checked" />Zena<br /> Stat: <input type="text" name="search_country" value="" maxlength=29><br /> Mesto: <input type="text" name="search_city" value="" maxlength=29><br /><br /> <input type="submit" value="Hladat"> </form> (mam aj vypisanie vysledkov aj vyhladavanie na jedej stranke teda ak <form action="profil.php?profil=searchcontacts_profil& search=1" method="post"> zacne sa vyhladavanie) A tu je PHP skript:Kód: <?php $server = "***"; $username = "***"; $password_databaza = "***";
$search = $_REQUEST['search'];
$search_nick = $_REQUEST['search_nick']; $search_years = $_REQUEST['search_years']; $search_sex = $_REQUEST['search_sex']; $search_country = $_REQUEST['search_country']; $search_city = $_REQUEST['search_city'];
if ($search == 1){
@mysql_connect($server, $username, $password_databaza) or die("Nemozem nadviazat spojenie s databazou!"); @mysql_select_db('profil') or die("Nemozem nadviazat spojenie s databazou!");
$query = "SELECT nick FROM `edit_profil` WHERE [color=darkblue][b]tu nasava problem ak tam dam vsetky premenne zacne vyhladavat aj tie, ktore som nevyplnil cize policka v tabulke ktore su prazdne a preto mi to nic nevyhlada. Ak damlen mapr. vek tak to pekne ide, no ja potrebujem nieco take aby aby vyhladavano udaje len co su zadane.[/b][/color] "; $result = mysql_query($query);
for($count = 0; $count < mysql_numrows($result); $count++) { $nick = mysql_result($result, $count, "nick"); echo "<br /><b>$nick</b><br /><br />"; } } ?>
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 Bydlisko: Žilina |
formulár:
Kód: <form action="profil.php?profil=searchcontacts_profil" method="post"> Nick: <input type="text" name="search_nick" value="" maxlength=29><br /> Vek: <input type="text" name="search_years" value="" maxlength=29><br /> Pohlavie:<br /> <input type="radio" name="search_sex" value="1" checked="checked" />Muz <input type="radio" name="search_sex" value="2" checked="checked" />Zena<br /> Stat: <input type="text" name="search_country" value="" maxlength=29><br /> Mesto: <input type="text" name="search_city" value="" maxlength=29><br /><br /> <input type="submit" value="Hladat" name="hladaj"> </form>
php skript: Kód: <?php $server = "***"; $username = "***"; $password_databaza = "***";
if (isset($_POST['hladaj'])){ $search_nick = osetrujuca_funkcia($_POST['search_nick']); $search_years = osetrujuca_funkcia($_POST['search_years']); $search_sex = osetrujuca_funkcia($_POST['search_sex']); $search_country = osetrujuca_funkcia($_POST['search_country']); $search_city = osetrujuca_funkcia($_POST['search_city']);
@mysql_connect($server, $username, $password_databaza) or die("Nemozem nadviazat spojenie s databazou!"); @mysql_select_db('profil') or die("Nemozem nadviazat spojenie s databazou!");
$query = "SELECT nick FROM `edit_profil` WHERE
// sem pride este ta podmienka, len si ju musim premysliet :)
"; $result = mysql_query($query);
for($count = 0; $count < mysql_numrows($result); $count++) { $nick = mysql_result($result, $count, "nick"); echo "<br /><b>$nick</b><br /><br />"; } } ?>
hodil som ti zatiaľ taký polovičný skript..
1.) NEPOUŽÍVAJ $_REQUEST
2.) nikde neošetruješ premenné, ktoré získavaš od návštevníka -> neprípustné! VŠETKO vždy kontroluj!
3.) ošetrujúcu funkciu som ti do skriptu nezahrnul, ale snáď si ju zvládneš urobiť.. predtým ale odporúčam naštudovať si čo-to o bezpečnosti internetových aplikácií
4.) kontrolu som ti obmedzil na stlačenie gombíka, nie na parameter v url
idem ešte pouvažovať nad tou podmienkou pre query...
_________________ C#, PHP, ... |
|
Registrovaný: 31.05.09 Prihlásený: 02.06.17 Príspevky: 562 Témy: 37 Bydlisko: BegyBen | Napísal autor témy Snacker: 31.05.2009 16:24 | |
|
Dakujem velmi za rychlu a hlavne kvalitnu odpoved
Premenne som este neostril, pretoze to zvyknem az na koniec. Az ked mam funkcny ten zaklad.
Osetrnie robim proti HTML tagom
Str_Replace("<","<",$surename);
Str_Replace(">",">",$surename);
alebo ak sa jedna o specialny udaj napr. datum tak si na to spravim regularny vyraz.
Este som sa ta chcel spytat na to $_REQUEST. Presiel som zopar for no doteraz neviem vyhodny - nevyhody $_REQUEST vs. $_POST
A este vyhodu :
kontrolu som ti obmedzil na stlačenie gombíka, nie na parameter v url
Dakujem
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 Bydlisko: Žilina |
1.) ohľadom $_REQUEST - pozri si napr. toto: http://php.vrana.cz/problemy-pole-_request.php . Je o tom po nete popísaných dosť vecí... Najdôležitejšia časť z toho článku je ale veta: Na obsah tohoto pole se tak ani nedá spolehnout. (problém s tým je v tom, že do $_REQUEST patria cookies, post, get...)
2.) kontrola - no napríklad výhodu to má takú, že je url o dačo kratšia Celé to myslím dáva potom aj väčší zmysel, keď kontroluješ, či je stlačený gombík alebo nie. Okrem toho, $_POST premennú ti napadnú o dačo ťažšie ako url (aj keď spoľahlivé samozrejme nie je ani to, ale aspoň to skrýva zbytočnú časť url pred bežnými užívateľmi.. čím menej parametrov, tým lepšie)
3.) zabezpečuj hneď ako píšeš skript, inak sa ti môže stať, že na dačo zabudneš... pokiaľ sa aplikácia príliš rozrastie, nie je potom ľahké hľadať všetky potencionálne diery...
4.) to ošetrenie nie je dostatočné... vôbec tým neošetríš nebezpečný vstup do mysql.. neošetruješ tým napr bodkočiarky, čiarky, úvodzovky atď...
_________________ C#, PHP, ... |
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 Bydlisko: Žilina |
tu je ešte dokončenie tej časti skriptu čo som spomínal... upozorňujem ale, že som to netestoval, takže to funguje zatiaľ len na úrovni mojich úvah Daj prosím ťa vedieť, či to ide alebo nie.
Kód: if ($search_nick != '' || $search_years != '' || $search_sex != '' || $search_country != '' || $search_city != ''){ // najskor treba prebehnut test, ci je zadana aspon jedna premenna a potom... : $query = "SELECT nick FROM edit_profil WHERE "; if ($search_nick != '') $query .= "nick='$search_nick' AND "; else $query .= "1=1 AND "; if ($search_years != '') $query .= "years='$search_years' AND "; else $query .= "1=1 AND "; if ($search_sex != '') $query .= "sex='$search_sex' AND "; else $query .= "1=1 AND "; if ($search_country != '') $query .= "country='$search_country' AND "; else $query .= "1=1 AND "; if ($search_city != '') $query .= "city='$search_city'"; else $query .= "1=1"; }
V teoretickej rovine by to mohlo fungovať tak, že keď nie je premenná prázdna, pripojí podmienku do query s danou premennou (príkaz .= určite poznáš). Ak je prázdna, pripojí do query len podmienku, ktorá platí vždy (1=1). Celé to je ešte obalené v podmienke, že minimálne jedna premenná musí byť naplnená, aby vôbec došlo ku query...
Vyskúšaj, daj vedieť Nič lepšie ma momentálne nenapadá...
_________________ C#, PHP, ... |
|
Registrovaný: 31.05.09 Prihlásený: 02.06.17 Príspevky: 562 Témy: 37 Bydlisko: BegyBen | Napísal autor témy Snacker: 31.05.2009 18:46 | |
|
Vyborna praca! Dakujem velmi pekne! Vsetko bezi ako ma. Este pridam kompletny skript pre tych, ktori pracuju na niecom podobnom.
pozn. Pripominam, ze treba osetrit vstupy.
Formular
Kód: <form action="profil.php?profil=searchcontacts_profil" method="post"> Nick: <input type="text" name="search_nick" value="" maxlength=29><br /> Vek: <input type="text" name="search_years" value="" maxlength=29><br /> Pohlavie:<br /> <input type="radio" name="search_sex" value="1" checked="checked" />Muz <input type="radio" name="search_sex" value="2" checked="checked" />Zena<br /> Stat: <input type="text" name="search_country" value="" maxlength=29><br /> Mesto: <input type="text" name="search_city" value="" maxlength=29><br /><br /> <input type="submit" value="Hladat" name="hladaj"> </form> PHP skriptKód: <?php $server = "***"; $username = "***"; $password_databaza = "***";
if (isset($_POST['hladaj'])){ $search_nick = $_POST['search_nick']; $search_years = $_POST['search_years']; $search_sex = $_POST['search_sex']; $search_country = $_POST['search_country']; $search_city = $_POST['search_city'];
@mysql_connect($server, $username, $password_databaza) or die("Nemozem nadviazat spojenie s databazou!"); @mysql_select_db('profil') or die("Nemozem nadviazat spojenie s databazou!");
if ($search_nick != '' || $search_years != '' || $search_sex != '' || $search_country != '' || $search_city != ''){ // najskor treba prebehnut test, ci je zadana aspon jedna premenna a potom... : $query = "SELECT nick FROM edit_profil WHERE "; if ($search_nick != '') $query .= "nick='$search_nick' AND "; else $query .= "1=1 AND "; if ($search_years != '') $query .= "vek='$search_years' AND "; else $query .= "1=1 AND "; if ($search_sex != '') $query .= "pohlavie='$search_sex' AND "; else $query .= "1=1 AND "; if ($search_country != '') $query .= "stat='$search_country' AND "; else $query .= "1=1 AND "; if ($search_city != '') $query .= "mesto='$search_city'"; else $query .= "1=1"; }
$result = mysql_query($query);
for($count = 0; $count < mysql_numrows($result); $count++) { $nick = mysql_result($result, $count, "nick"); echo "<br /><b>$nick</b><br /><br />"; } } ?>
PS: Neni problem pridat/odobrat parameter pre vyhladavanie. Premenne si definujte podla seba.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Vyhladavanie v PHP, ASP | 1 | 619 | 24.09.2010 20:22 VireL | | Vyhladavanie v Databázy | 3 | 373 | 08.04.2014 9:45 JanoF | | Vyhladavanie v Delphi, Visual Basic | 1 | 764 | 20.07.2009 19:25 Fico | | vyhľadávanie v HTML, XHTML, XML, CSS | 15 | 2288 | 04.12.2007 13:15 wotan | | vyhladavanie v Správy pre vedenie fóra | 9 | 1033 | 19.04.2012 20:53 Jeffo | | vyhladavanie v Ostatné programy | 4 | 699 | 30.06.2008 2:38 dedko45 | | Vyhladavanie v PHP, ASP | 3 | 606 | 15.04.2008 20:36 stenley | | vyhladavanie v Databázy | 1 | 855 | 29.08.2009 11:30 bmatias | | vyhladavanie v PHP, ASP | 5 | 467 | 25.04.2013 23:42 misko16 | | Vyhladavanie - spoje v PHP, ASP | 6 | 810 | 15.05.2008 16:29 jaji | | fulltextove vyhladavanie v PHP, ASP | 1 | 664 | 27.12.2007 0:56 suchy | | Vlastné vyhľadávanie v PHP, ASP | 1 | 632 | 09.10.2008 15:26 rooobertek | | Rýchle vyhladávanie v Služby a webstránky | 1 | 382 | 08.05.2018 13:02 liqua1 | | opat vyhladavanie v PHP, ASP | 21 | 1165 | 17.03.2008 20:58 neopagan | | mysql-vyhladavanie v Databázy | 5 | 626 | 11.11.2011 15:55 GoodWill | | Php? - Vyhladavanie v PHP, ASP | 2 | 361 | 12.06.2013 21:18 PepperSK |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|