[ 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 | 37
Bydlisko: BegyBen
NapísalOffline : 31.05.2009 14:40 | Vyhladavanie

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: 14571
Témy: 66 | 66
Bydlisko: Žilina
NapísalOffline : 31.05.2009 15:38 | Vyhladavanie

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 | 37
Bydlisko: BegyBen
Napísal autor témyOffline : 31.05.2009 15:57 | Vyhladavanie

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: 14571
Témy: 66 | 66
Bydlisko: Žilina
NapísalOffline : 31.05.2009 16:12 | Vyhladavanie

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 | 37
Bydlisko: BegyBen
Napísal autor témyOffline : 31.05.2009 16:24 | Vyhladavanie

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: 14571
Témy: 66 | 66
Bydlisko: Žilina
NapísalOffline : 31.05.2009 16:35 | Vyhladavanie

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: 14571
Témy: 66 | 66
Bydlisko: Žilina
NapísalOffline : 31.05.2009 17:38 | Vyhladavanie

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 | 37
Bydlisko: BegyBen
Napísal autor témyOffline : 31.05.2009 18:46 | Vyhladavanie

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.


 [ Príspevkov: 8 ] 


Vyhladavanie



Podobné témy

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

Vyhladavanie

v Backend

3

696

15.04.2008 20:36

stenley

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

vyhladavanie

v Databázy

1

949

29.08.2009 11:30

bmatias

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

vyhladavanie

v Backend

5

566

25.04.2013 23:42

misko16

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

Vyhladavanie

v Backend

1

795

24.09.2010 20:22

VireL

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

Vyhladavanie

v Databázy

3

476

08.04.2014 9:45

JanoF

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

Vyhladavanie

v Ostatné

1

859

20.07.2009 19:25

Fico

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

vyhľadávanie

v Frontend

15

2429

04.12.2007 13:15

wotan

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

vyhladavanie

v Ostatné programy

4

808

30.06.2008 2:38

dedko45

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

vyhladavanie

v Oznámenia a návrhy

9

1142

19.04.2012 20:53

Jeffo

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

mysql-vyhladavanie

v Databázy

5

716

11.11.2011 15:55

GoodWill

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

opat vyhladavanie

v Backend

21

1293

17.03.2008 20:58

neopagan

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

Php? - Vyhladavanie

v Backend

2

471

12.06.2013 21:18

PepperSK

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

Vyhľadávanie - otázka

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Oznámenia a návrhy

45

5050

29.12.2007 5:25

Roberbo

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

vyhladavanie ftp

v Sieťové programy

0

772

21.11.2007 18:49

BeatBastard

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

Vyhľadávanie súborov

v Windows

3

433

08.11.2017 19:01

michalesku

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

Vyhladavanie - spoje

v Backend

6

944

15.05.2008 16:29

jaji



© 2005 - 2026 PCforum, edited by JanoF