Autor | Zpráva | ||
---|---|---|---|
FilipTarbaj Profil |
#1 · Zasláno: 6. 3. 2015, 23:56:29
Ahoj, potřeboval bych nějak nakopnout, jak udělat hledací formulář s filtrováním. Já už to dělám dva dny, projel jsem snad všechna videa na youtube, nic jsem nenašel, proto se zkouším obrátit na vás.
Data z mysql: http://postimg.org/image/sk1x4eohp/ formulář, jak bych ho chtěl: http://s1.postimg.org/71xkerm7j/postava.jpg |
||
lionel messi Profil |
FilipTarbaj:
Niečo takéto (kľúčová je zvýraznená časť, formulár je trochu odfláknutý, ale funkčný): <form method="post"> Oči Modré <input type="radio" name="oci" value="modre"> Zelené <input type="radio" name="oci" value="zelene"> Postava Štíhlá <input type="radio" name="postava" value="stihla"> Atletická <input type="radio" name="postava" value="atleticka"> Inteligence Blbec <input type="radio" name="inteligence" value="blbec"> Normální <input type="radio" name="inteligence" value="normalni"> </form> <?php $link = mysqli_connect("server", "jmeno", "heslo", "databaze"); //nahraď vlastnými údajmi if (isset($_POST["oci"], $_POST["postava"], $_POST["inteligence"])) { $oci = mysqli_real_escape_string($link, $_POST["oci"]); $postava = mysqli_real_escape_string($link, $_POST["postava"]); $inteligence = mysqli_real_escape_string($link, $_POST["inteligence"]); $dotaz = "SELECT * FROM tabulka WHERE oci = '". $oci ."' AND postava = '". $postava ."' AND inteligence = '". $inteligence ."'"; $query = mysqli_query($link, $dotaz); while ($row = mysqli_fetch_assoc($query)) { echo $row["jmeno"]; //vypíše všetky mená spĺňajúce uvedenú podmienku v SQL dotaze } } ?> Filtrovanie má v SQL na starosti klauzula WHERE, umožňuje spájať viacero podmienok prostredníctvom logických operátorov AND, OR či !=. |
||
FilipTarbaj Profil |
#3 · Zasláno: 7. 3. 2015, 00:29:55
Ahoj, děkuji moc, jak ti to mohu oplatit? Já už měl i záchváty v těch dvou dnech, jak jsem to zkoušel... nicméně mě aspon uklidnuje fakt, že každý naprogramovaný řádek je zkušenost.
Hned jak nastartuju pc, jdu to zkoušet. |
||
FilipTarbaj Profil |
tak jsem to rozjel
<form method="post" action="display_data.php"> Oči Modré <input type="radio" name="oci" value="modre"> Zelené <input type="radio" name="oci" value="zelene"> Postava Štíhlá <input type="radio" name="postava" value="stihla"> Atletická <input type="radio" name="postava" value="atleticka"> Inteligence Blbec <input type="radio" name="inteligence" value="blbec"> Normální <input type="radio" name="inteligence" value="normalni"> <br> <input type="submit" name="jmeno" value="jmeno"> </form> <?php $link = mysqli_connect("localhost", "root", "", "vyhledavanilidi"); //nahraď vlastnými údajmi if (isset($_POST["oci"], $_POST["postava"], $_POST["inteligence"])) { $oci = mysqli_real_escape_string($link, $_POST["oci"]); $postava = mysqli_real_escape_string($link, $_POST["postava"]); $inteligence = mysqli_real_escape_string($link, $_POST["inteligence"]); $dotaz = "SELECT * FROM lide WHERE oci = '". $oci ."' != postava = '". $postava ."' != inteligence = '". $inteligence ."'"; $query = mysqli_query($link, $dotaz); while ($row = mysqli_fetch_assoc($query)) { echo $row["jmeno"] ; //vypíše všetky mená spĺňajúce uvedenú podmienku v SQL dotaze } } ?> A ještě bych se chtěl zeptat na skromnější dotaz. V případě, že bych zaškrknul v kolonce oči jen "zelené", a aby mi vyjela všechna jména, která mají zelené oči, to se dělá jak? napadá mě logicky jedna možnost, udělat si podmínku, která řekne, že když se zaškrkne jen jedna možnost, tak se má mají vypsat z mysql všechny řádky dané hodnoty. Je to tak? no jasné mám to :-D [img] <form method="post" action="display_data.php"> Oči Modré <input type="radio" name="oci" value="modre"> Zelené <input type="radio" name="oci" value="zelene"> <br> Postava Štíhlá <input type="radio" name="postava" value="stihla"> Atletická <input type="radio" name="postava" value="atleticka"> <br> Inteligence Blbec <input type="radio" name="inteligence" value="blbec"> Normální <input type="radio" name="inteligence" value="normalni"> <br> <input type="submit" name="jmeno" value="jmeno"> </form> <?php $link = mysqli_connect("localhost", "root", "", "vyhledavanilidi"); //nahraď vlastnými údajmi if (isset($_POST["oci"], $_POST["postava"], $_POST["inteligence"])) { $oci = mysqli_real_escape_string($link, $_POST["oci"]); $postava = mysqli_real_escape_string($link, $_POST["postava"]); $inteligence = mysqli_real_escape_string($link, $_POST["inteligence"]); $dotaz = "SELECT * FROM lide WHERE oci = '". $oci ."' != postava = '". $postava ."' != inteligence = '". $inteligence ."'"; $query = mysqli_query($link, $dotaz); while ($row = mysqli_fetch_assoc($query)) { echo $row["jmeno"] ; //vypíše všetky mená spĺňajúce uvedenú podmienku v SQL dotaze } } ?> <?php $link = mysqli_connect("localhost", "root", "", "vyhledavanilidi"); //nahraď vlastnými údajmi if (isset($_POST["oci"])) { $oci = mysqli_real_escape_string($link, $_POST["oci"]); $dotaz = "SELECT * FROM lide WHERE oci = '". $oci ."' "; $query = mysqli_query($link, $dotaz); while ($row = mysqli_fetch_assoc($query)) { echo $row["jmeno"] ; //vypíše všetky mená spĺňajúce uvedenú podmienku v SQL dotaze } } ?> Prosím o vyjádření z hlediska optimalizace.... Je to tak správně? Mě PHP a MySQL doslova pohltilo, dle mého je to nejlepší programátorský jazyk, proto mě omluvte, že i tak brzo ráno tu otravuji s dotazy :-D edit, takže je to hloupost, protože v případě, že bych potřeboval zaškrknout oči a postava, zase bych na to musel dělat skript. Takže nevím |
||
Keeehi Profil |
#5 · Zasláno: 7. 3. 2015, 06:07:41
Dotaz se dá dynamicky vytvářet
$filter = array(); if(isset($_POST["oci"])) { $filter[] = "oci = '". mysqli_real_escape_string($link, $_POST["oci"])."'"; } if(isset($_POST["postava"])) { $filter[] = "postava = '". mysqli_real_escape_string($link, $_POST["postava"])."'"; } if(isset($_POST["inteligence"])) { $filter[] = "inteligence = '". mysqli_real_escape_string($link, $_POST["inteligence"])."'"; } $filterQuery = implode(' AND ', $filter); $dotaz = "SELECT * FROM lide".(!empty($filterQuery) ? ' WHERE '.$filterQuery : ''); Ten formulář má problém, že pokud jednou nějaké radio zaškrtnu, tak už se ho nezbavím. Chtělo by to ještě přidat možnost "nevyplněno" <input type="radio" name="oci" value="nevyplneno"> if(isset($_POST["oci"]) and $_POST["oci"] !== "nevyplneno") { |
||
Časová prodleva: 9 let
|
0