Autor | Zpráva | ||
---|---|---|---|
cenek Profil |
#1 · Zasláno: 6. 8. 2012, 18:10:26
Ahoj,
Dělám vyhledávací filtr výpisu z databáze. Takže například: <select name="lokalita"> <option value="praha">Praha</option> <option value="ostrava">Ostrava</option> </select> Takže po zvolení sql příkaz bude vypadat třeba takto mysql_query("SELECT * FROM tabulka WHERE lokalita = ".$_GET["lokalita"]."); Ovšem nejsem si jist, jak zprovoznit aby se vypsali všechny lokality, pokud bych do selectu přidal položku "Všechny lokality". Volat přes to funkci, ve které by byly všechny lokality vypsané je kravina. Může mi někdo poradit nějaké řešení? Díky |
||
Alphard Profil |
#2 · Zasláno: 6. 8. 2012, 18:17:15
Tak tam vůbec nedávejte to
where . Ten dotaz je normální řetězec, můžete se ho připravit skládáním.
|
||
cenek Profil |
#3 · Zasláno: 6. 8. 2012, 18:51:19
Mel jsem za to, ze bez where to nepujde... jak by tedy takovy prikaz vypadal?
|
||
Someone Profil |
#4 · Zasláno: 6. 8. 2012, 19:00:48
<select name="lokalita"> <option value="vsechny">Všechny lokality</option> <option value="praha">Praha</option> <option value="ostrava">Ostrava</option> </select> <?php mysql_query("SELECT * FROM tabulka".($_GET['lokalita']!="vsechny"?" WHERE lokalita='".$_GET['lokalita']."'":'')); ?> |
||
Časová prodleva: 4 dny
|
|||
cenek Profil |
#5 · Zasláno: 10. 8. 2012, 15:43:23
Díky to funguje.
Ale mám s tím další problém. Co když má filtr více selectů? Vyhazovalo by mi to "SELECT * FROM tabulka WHERE lokalita=neco WHERE typ=neco.... atd.
Jde o to, že v tomhle řetězci se těžko určí kdy má být před tím parametrem WHERE a kdy AND. Možné by to bylo jen kdyby měla všechna pole vždy povinou hodnotu, což je v reálu nesmysl. Doufám, že jsem to popsal dostatečně ;) |
||
mzk Profil * |
#6 · Zasláno: 10. 8. 2012, 16:37:46
cenek:
pokud tam budeš mít jen 'AND', tak to jde jednoduše pomocí funkce implode() $sql = 'SELECT * FROM tabulka'; $par = array(); if ($_GET['lokalita'] != "vsechny") $par[] = 'lokalita="' . $_GET['lokalita'] . '"'; if ($_GET['podminka'] != "podminka") $par[] = 'podminka="' . $_GET['podminka'] . '"'; |
||
cenek Profil |
#7 · Zasláno: 10. 8. 2012, 18:00:36
Ok ale jak určím kdy má být v tom sql AND a kdy WHERE?
|
||
Alphard Profil |
#8 · Zasláno: 10. 8. 2012, 18:11:30
cenek:
Je to v poli, mohlo by se hodit count() (zjistíte, jestli vůbec where) a implode() (k čemu služí viz manuál). A ještě vaší pozornosti doporučuji funkci mysql_real_escape_string(). A kdyby vám tohle všechno přišlo složité a napadla vás myšlenka, že už to řešily tisíce lidí před vámi, máte pravdu. |
||
Časová prodleva: 20 dní
|
|||
Bear Profil * |
#9 · Zasláno: 30. 8. 2012, 08:45:37
mam podobny problem, osobne se v php moc nevyznam a potreboval bych poradit, potreboval bych vypis databaze pomoci 3 rolovacich filtru... v databazi mam asi 9 polozek a pomoci 3 udaju bych to chtel filtrovat. Pomuze mi nekdo? Potreboval bych kus kodu abych to pochopil.
|
||
panther Profil |
#10 · Zasláno: 30. 8. 2012, 08:51:58
Bear:
neuvadis problem, ktery by se v tomto vlakne drive jiz neresil. S cim konkretne mas kde problem? Dodej ukazku. |
||
Bear Profil * |
#11 · Zasláno: 30. 8. 2012, 09:04:25 · Upravil/a: Bear
Takhle to vypada, potreboval bych aby kdyz zmacknu odeslat tak aby mi to vyfiltrovalo podle tech 2 ( chci do budoucna 3) filtru a vypsalo pod sebe..
![]() ![]() |
||
Bear Profil * |
#12 · Zasláno: 30. 8. 2012, 10:29:46
|
||
panther Profil |
#13 · Zasláno: 30. 8. 2012, 11:33:20
Bear:
a kde je problem? Bude to obycejny select se dvema podminkami ve where spojenymi operatorem AND .
|
||
Šéva Profil |
Bear:
<form action="" method="post"> <select name="filtr1"> <option value="hodnota1">hodnota1</option> <option value="hodnota2">hodnota2</option> </select> <br> <select name="filtr2"> <option value="hodnota1">hodnota1</option> <option value="hodnota2">hodnota2</option> </select> <br> <input type="submit" name="filtrovat" value="Filtr"> </form> <?php if(IsSet($_POST["filtrovat"])) { $dotaz=mysql_query("select * from tabulka where sloupec1='$_POST[filtr1]' and sloupec2='$_POST[filtr2]'"); //atd atd... } ?> |
||
Bear Profil * |
#15 · Zasláno: 30. 8. 2012, 12:37:34 · Upravil/a: Bear
Mám takovy kod a vubec nevim jak to tam zakomponovat, ja vim ze to je docela silene ale programuje poprve teprve mesic a potrebuji to odeslat at to funguje, jedine co mi chybi je ten filtr pro 3 polozky, jestli mi s timto nekdo poradi tak budu mega moc rad
<form action="" method="get"> <p><b>Line:</b> <select name="id_line" value="<?php echo $id_line ?>" > <option value="">Vyberte linku</option> <option value="L1">L1</option> <option value="L2">L2</option> <option value="L3">L3</option> <option value="L4">L4</option> <option value="L5">L5</option> <option value="L6">L6</option> <option value="L7">L7</option> <option value="L8">L8</option> <option value="L9">L9</option> <option value="LA">LA</option> <option value="">All</option> </select> </p> <b>Nález:</b> <select name="zavada" value="<?php echo $zavada ?>" > <option value="">Vyberte Nález</option> <option value="Šroubovák">Šroubovák</option> <option value="INTERLOCK - Test fail">INTERLOCK - Test fail</option> <option value="INTERLOCK - Prasklá díra">INTERLOCK - Prasklá díra</option> <option value="INTERLOCK - Nevyskakuje klika">INTERLOCK - Nevyskakuje klika</option> <option value="">All</option> </select> <p> <INPUT name="odeslat2" TYPE=Submit VALUE="Zobrazit"> </p> </form> if (isset($_GET['odeslat2'])) { // Zpracovat formular. $zpráva = NULL; // Vytvoreni nove prazdne promenne. // Overit id line. if (empty($_GET['id_line'])) { $id_line = FALSE; $zpráva .= '<p>Zapomneli jste zadat cislo Line!</p>'; } else { $id_line = $_GET['id_line']; } if ($id_line) { echo '<table align="center" cellspacing="2" cellpadding="2" width="1000"> <tr> <td align="center"><b>Line</b></td> <td align="center"><b>Type</b></td> <td align="center"><b>OEM</b></td> <td align="center"><b>Serial Number</b></td> <td align="center"><b>Model Number</b></td> <td align="center"><b>Nález</b></td> <td align="center"><b>Dira na HDD</b></td> <td align="center"><b>Sroubovak Poloha</b></td> <td align="center"><b>Sroubky</b></td> <td align=\"center\" width=\"5%\"><b>Pridal</b></td> <td align="center"><b>Datum pridání</b></td> </tr>'; require_once ('mysql_spojit.php'); require_once('Pager.class.php'); $dotaz = "SELECT CONCAT(id) AS ID, id_line, g7_g8, oem, serial_number, model_number, zavada, sroubovak_dira, sroubovak_poloha, sroubky, add_user, DATE_FORMAT(date_time, '%d. %m. %Y - %k:%i') AS dr FROM data WHERE id_line = '$id_line' ORDER BY date_time DESC"; $výsledek = @mysql_query ($dotaz); // Spustit dotaz $pocet = mysql_num_rows ($výsledek); if ($výsledek) { // Je-li vse OK. echo '<div align="center">'; echo "<p><big><b>Pocet nalezenych zaznamu : $pocet </b></big></p>"; echo '<p></p></div>'; } //vytvoreni objektu, jako parametry konstruktoru se //predavaji SQL dotaz a parametr URL, ktery bude pager //pouzivat pro odkazy na dalsi stranky $pager = new Pager("SELECT * FROM data WHERE id_line LIKE '$id_line' ORDER BY date_time DESC", 'page'); $pager->HtmlSpecialChars = 0; $pager->PageSize = 4; $pager->PagerAlign = "left"; //ziska z databaze pozadovanou cast vysledkove sady $pager->DataBind(); //postupne ziskavani jednotlivych zaznamu z vysledkove sady while ($obj = $pager->GetOne()) echo '<tr> <td align=\"left\" width=\"5%\">'.$obj->id_line. '</td> <td align=\"left\" width=\"5%\">'.$obj->g7_g8. '</td> <td align=\"left\" width=\"8%\">'.$obj->oem. '</td> <td align=\"left\" width=\"15%\">'.$obj->serial_number. '</td> <td align=\"left\" width=\"15%\">'.$obj->model_number. '</td> <td align=\"left\" width=\"14%\">'.$obj->zavada. '</td> <td align=\"left\" width=\"8%\">'.$obj->sroubovak_dira. '</td> <td align=\"left\" width=\"5%\">'.$obj->sroubovak_poloha. '</td> <td align=\"left\" width=\"5%\">'.$obj->sroubky. '</td> <td align=\"left\" width=\"5%\">'.$obj->add_user. '</td> <td align=\"left\" width=\"15%\">'.$obj->date_time. '</td>'; echo '</tr><table/>'; //mody lze kombinovat - takto lze skombinovat //zakladni strankovani spolu s odkazy na prvni, //posledni, predchozi a nasledujici stranky //defaultni strankovani $firstLastMode = new FirstLastPagerMode(); $pager->AddPagerMode($firstLastMode); $prevNextMode = new PrevNextPagerMode(); $pager->AddPagerMode($prevNextMode); $defaultMode = new DefaultPagerMode(); $pager->AddPagerMode($defaultMode); $pager->DrawPager(); include ('sablony/pata2.inc'); } ...... else{ echo '<table align="center" cellspacing="2" cellpadding="2" width="1000"> <tr> <td align="center"><b>Line</b></td> <td align="center"><b>Type</b></td> <td align="center"><b>OEM</b></td> <td align="center"><b>Serial Number</b></td> <td align="center"><b>Model Number</b></td> <td align="center"><b>Nález</b></td> <td align="center"><b>Dira na HDD</b></td> <td align="center"><b>Sroubovak Poloha</b></td> <td align="center"><b>Sroubky</b></td> <td align=\"center\" width=\"5%\"><b>Pridal</b></td> <td align="center"><b>Datum pridání</b></td> </tr>'; require_once ('mysql_spojit.php'); require_once('Pager.class.php'); $dotaz = "SELECT CONCAT(id) AS ID, id_line, g7_g8, oem, serial_number, model_number, zavada, sroubovak_dira, sroubovak_poloha, sroubky, add_user, DATE_FORMAT(date_time, '%d. %m. %Y - %k:%i') AS dr FROM data ORDER BY date_time DESC"; $výsledek = @mysql_query ($dotaz); // Spustit dotaz $pocet = mysql_num_rows ($výsledek); if ($výsledek) { // Je-li vse OK. echo '<div align="center">'; echo "<p><big><b>Pocet nalezenych zaznamu : $pocet </b></big></p>"; echo '<p></p></div>'; } //vytvoreni objektu, jako parametry konstruktoru se //predavaji SQL dotaz a parametr URL, ktery bude pager //pouzivat pro odkazy na dalsi stranky $pager = new Pager('SELECT * FROM data ORDER BY date_time DESC', 'page'); $pager->HtmlSpecialChars = 0; $pager->PageSize = 5; $pager->PagerAlign = "left"; //ziska z databaze pozadovanou cast vysledkove sady $pager->DataBind(); //postupne ziskavani jednotlivych zaznamu z vysledkove sady while ($obj = $pager->GetOne()) echo '<tr> <td align=\"left\" width=\"5%\">'.$obj->id_line. '</td> <td align=\"left\" width=\"5%\">'.$obj->g7_g8. '</td> <td align=\"left\" width=\"8%\">'.$obj->oem. '</td> <td align=\"left\" width=\"15%\">'.$obj->serial_number. '</td> <td align=\"left\" width=\"15%\">'.$obj->model_number. '</td> <td align=\"left\" width=\"14%\">'.$obj->zavada. '</td> <td align=\"left\" width=\"8%\">'.$obj->sroubovak_dira. '</td> <td align=\"left\" width=\"5%\">'.$obj->sroubovak_poloha. '</td> <td align=\"left\" width=\"5%\">'.$obj->sroubky. '</td> <td align=\"left\" width=\"5%\">'.$obj->add_user. '</td> <td align=\"left\" width=\"15%\">'.$obj->date_time. '</td>'; echo '</tr><table/>'; //mody lze kombinovat - takto lze skombinovat //zakladni strankovani spolu s odkazy na prvni, //posledni, predchozi a nasledujici stranky //defaultni strankovani $firstLastMode = new FirstLastPagerMode(); $pager->AddPagerMode($firstLastMode); $prevNextMode = new PrevNextPagerMode(); $pager->AddPagerMode($prevNextMode); $defaultMode = new DefaultPagerMode(); $pager->AddPagerMode($defaultMode); $pager->DrawPager(); include ('sablony/pata2.inc'); } } takhle mi to funguje pro jeden filtr akorat nevim jak tam pridat ten druhy |
||
Šéva Profil |
<?php if (empty($_GET['id_line']) and empty($_GET['zavada'])) { $id_line = FALSE; $zpráva .= '<p>Zapomneli jste zadat cislo Line a Zavadu!</p>'; } else { $id_line = $_GET['id_line']; $zavada=$_GET['zavada']; } if (!empty($id_line) and !empty($zavada)) { //... $dotaz = "SELECT CONCAT(id) AS ID, id_line, g7_g8, oem, serial_number, model_number, zavada, sroubovak_dira, sroubovak_poloha, sroubky, add_user, DATE_FORMAT(date_time, '%d. %m. %Y - %k:%i') AS dr FROM data WHERE id_line = '$id_line' and zavada='$zavada' ORDER BY date_time DESC"; //... $pager = new Pager("SELECT * FROM data WHERE id_line LIKE '$id_line' and zavada LIKE '$zavada' ORDER BY date_time DESC", 'page'); //... } ?> zbytek si už nějak doplň, zhruba takhle nějak by to snad mohlo chodit... |
||
Bear Profil * |
#17 · Zasláno: 30. 8. 2012, 14:05:12
diky moc uz jsem to rozchodil =)
|
||
Časová prodleva: 7 let
|
|||
DepperDC Profil |
#18 · Zasláno: 23. 8. 2019, 19:05:19
nechci kazit krásnou diskuzi 7 let starou ale naučil jsem se používat : Select * from table Where 1=1 a následně můžete vkládat podmínky všechny začínající na AND neco = něco. není to tak čisté řešení jak je zde popisováno, ale učel plní dokonale a hlavně je nádherně čitelné i pro začátečníky. Proč 1=1 protože tato podmínka je vždy splněna, takže vypíše všechna data nikterak omezovaná a následně můžete na tomto stavět dál
|
||
Časová prodleva: 6 let
|
0