Autor Zpráva
Dev!l_1415
Profil *
Dobrý den,

mám databázi uměleckých děl s 10ti údaji v tabulce (autor, název, ...). Na stránce mám 10 inputů pro specifičtější vyhledávání (podle autora, názvu díla, atd.. ). Dotazy mohou být křížové (uživatel zadá zároveň autora a naźev díla). Samozřejmě ostatní inputy zůstanou prázdné. Potřebuju sestrojit SELECT tak, aby mi vrátil všechny výsledky v databázi, které splňují vyhledávací kritéria. Můj kód:

"SELECT * " .
"FROM history " .
"WHERE history_author = '$author' AND history_art_name = '$art_name' AND history_birth_date BETWEEN '$birth_date_from' AND '$birth_date_to' AND history_dimension = '$dimension' AND history_technology = '$technology' AND history_signature = '$signature' AND history_saved_as = '$saved_as' AND history_source = '$source'";


Tento kód mi ovšem nic nevrátí. Pokud zadám pouze jméno autora, nenajde to nic, protože ostatní proměnné obsahují prázdný řetězec. Jednoduše potřebuji dotaz, který bude ignorovat prázdné řetězce a v klauzuli WHERE uvažovat pouze proměnné, které jsou vyplněné.. Víte někdo jak na to?
Taps
Profil
Dev!l_1415:
musíš kontrolovat zda input byl vyplněn. Např.
<?
if(!empty($_POST['history_autor']){
$dotaz.=history_author='$author';
}
?>

Jsou některé inputy povinné ?
Dev!l_1415
Profil *
Taps:
Nene, žádný input není povinný...

Čili pokud tomu dobře rozumím, u všech inputů zkontroluju, zda jsou vyplněny a sestrojím na základě toho dotaz..?
Stano
Profil
Dev!l_1415:
si ten where generuj: typujem že máš daky formulár:
<input type="text" name="history_autor">
<input type="text" name="history_art_name">
atd
<?php
//a teraz prejdeš celé pole $_POST

$sql = "SELECT * FROM history WHERE";

foreach($_POST as $key => $value){
  if($value != ""){
    $sql .= " $key = '$value' AND ";
    }
   }
$sql .= "1=1"; //alebo odstráň to posledné AND  
?>

Je možné že existuje aj lepšie riešenie toto som nikdy nepoužil len mi to teraz napadlo
ešte mi napadlo
WHERE history_author like '%$author%' AND history_art_name like '%$art_name%' AND....

aj keď toto ti na druhú stranu môže vracať viac výsledkov ako by si chcel. ale skús
Dev!l_1415
Profil *
Stano:
ešte mi napadlo
>
1
>
WHERE history_author like '%$author%' AND history_art_name like '%$art_name%' AND....
>
>
aj keď toto ti na druhú stranu môže vracať viac výsledkov ako by si chcel. ale skús

Přesně tohle jsem zkoušel a vracelo to víc výsledků.. Teď zkouším foreach...
Dev!l_1415
Profil *
Stano:
pomocí foreach šlape... :)
Mnohokrát děkuji :))

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:

0