Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 8 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Vyhladavanie

Registrovaný: 31.05.09
Prihlásený: 02.06.17
Príspevky: 562
Témy: 37
Bydlisko: BegyBen
Príspevok NapísalOffline : 31.05.2009 14:40

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


Offline

Skúsený užívateľ
Skúsený užívateľ
Vyhladavanie

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 31.05.2009 15:38

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, ...
Offline

Užívateľ
Užívateľ
Vyhladavanie

Registrovaný: 31.05.09
Prihlásený: 02.06.17
Príspevky: 562
Témy: 37
Bydlisko: BegyBen
Príspevok Napísal autor témyOffline : 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&nbsp;&nbsp;
<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 />";
}
}
?>


Offline

Skúsený užívateľ
Skúsený užívateľ
Vyhladavanie

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 31.05.2009 16:12

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&nbsp;&nbsp;
<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, ...
Offline

Užívateľ
Užívateľ
Vyhladavanie

Registrovaný: 31.05.09
Prihlásený: 02.06.17
Príspevky: 562
Témy: 37
Bydlisko: BegyBen
Príspevok Napísal autor témyOffline : 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("<","&lt;",$surename);
Str_Replace(">","&gt;",$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


Offline

Skúsený užívateľ
Skúsený užívateľ
Vyhladavanie

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 31.05.2009 16:35

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, ...
Offline

Skúsený užívateľ
Skúsený užívateľ
Vyhladavanie

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 31.05.2009 17:38

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 :lol: 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ť :lol: Nič lepšie ma momentálne nenapadá...







_________________
C#, PHP, ...
Offline

Užívateľ
Užívateľ
Vyhladavanie

Registrovaný: 31.05.09
Prihlásený: 02.06.17
Príspevky: 562
Témy: 37
Bydlisko: BegyBen
Príspevok Napísal autor témyOffline : 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&nbsp;&nbsp;
<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 = $_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.


Odpovedať na tému [ Príspevkov: 8 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Vyhladavanie

v PHP, ASP

1

619

24.09.2010 20:22

VireL Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vyhladavanie

v Databázy

3

373

08.04.2014 9:45

JanoF Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vyhladavanie

v Delphi, Visual Basic

1

764

20.07.2009 19:25

Fico Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vyhľadávanie

v HTML, XHTML, XML, CSS

15

2288

04.12.2007 13:15

wotan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vyhladavanie

v Správy pre vedenie fóra

9

1033

19.04.2012 20:53

Jeffo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vyhladavanie

v Ostatné programy

4

699

30.06.2008 2:38

dedko45 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vyhladavanie

v PHP, ASP

3

606

15.04.2008 20:36

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vyhladavanie

v Databázy

1

855

29.08.2009 11:30

bmatias Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vyhladavanie

v PHP, ASP

5

467

25.04.2013 23:42

misko16 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vyhladavanie - spoje

v PHP, ASP

6

810

15.05.2008 16:29

jaji Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. fulltextove vyhladavanie

v PHP, ASP

1

664

27.12.2007 0:56

suchy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vlastné vyhľadávanie

v PHP, ASP

1

632

09.10.2008 15:26

rooobertek Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Rýchle vyhladávanie

v Služby a webstránky

1

382

08.05.2018 13:02

liqua1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. opat vyhladavanie

v PHP, ASP

21

1165

17.03.2008 20:58

neopagan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. mysql-vyhladavanie

v Databázy

5

626

11.11.2011 15:55

GoodWill Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Php? - Vyhladavanie

v PHP, ASP

2

361

12.06.2013 21:18

PepperSK Zobrazenie posledných príspevkov


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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra