Autor Zpráva
FilipTarbaj
Profil
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
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
  }
}
?>
[/img]

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
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">
Pak by ta podmínka vypadala takto:
if(isset($_POST["oci"]) and $_POST["oci"] !== "nevyplneno") {

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: