Autor Zpráva
kulhanek21
Profil
Mám na webu formulář. Vybraná data by se měla vyhledat v databázi. Výsledky by se měly zobrazit. Pro jednotlivý výběr to funguje bezvadně. Pro násobný výběr vůbec. Poraďte, už z toho dostávám pupínky! ;-) Nejsem programátor.

<form action="index2.php" method="post">
<SELECT NAME="keyword[]" WIDTH="26" SIZE="7" multiple="multiple">
<OPTION value="2008">2008</OPTION>
<OPTION value="2007">2007</OPTION>
<OPTION value="2006">2006</OPTION>
<OPTION value="2005">2005</OPTION>
<OPTION value="2004">2004</OPTION>
<OPTION value="2003">2003</OPTION>
</SELECT>
<input name="search" type="hidden" value="search">
<input name="search" type="image" src="vyhledat.gif" align="top">
</form>

<?
include "config.php";
mysql_query("SET NAMES 'cp1250'");
if (@$_POST['search']=="search")
{
$keyword=$_POST['keyword'];
$result=mysql_query("SELECT * FROM websites WHERE `description` LIKE '%$keyword%' ORDER BY `title`");
while ($results = mysql_fetch_array($result))
{
$title=$results['title'];
$url=$results['url'];
$description=$results['description'];
echo "<a href='$url'>$title</a><br><i>$description</i><br>$url<br><br>";
}
}
?>
Cargas
Profil
$title=$results[title];
$url=$results[url];
$description=$results[description];

echo '<a href="';

echo $url;

echo '">';

echo $title;

echo '</a><br><i>';

echo $description;

echo '</i><br>';

echo $url;

echo '<br><br>';


zkus to takhle
AM_
Profil
Cargas
To myslíš vážně? místo řetězcových indexů pole použít nedefinované konstanty (jejichž hodnota se implicitně nastaví na jejich název, ale hází to E_NOTICE a je to hnus), a hezky zformátovaný řetězec rozsekat do deseti řádků? Krom toho, že je to totální balast, s popsaným problémem to nemá nic společného. Dadaistická literární tvorba patří na počátek minulého století, tak ji tam také nechme.

kulhanek21
Chyba je v tom, že výsledek multiple selectu přijde jako pole, tak ho také musíš zpracovat. Napadá mě toto řešení, píšu to z hlavy, takže nezaručuju, že to je 100% dobře napsáno, detaily si jistě doladíš, jde o myšlenku.
$keyword= implode('%` OR description LIKE `%', $_POST['keyword']);
kulhanek21
Profil
ten "implode" je docela dobrej :-)

zkusil jsem to takhle: $keyword= implode('%', $_POST['keyword']);

ale ve stejném tagu SELECT to nefunguje

když budu mít třeba:

<SELECT NAME="keyword[]" multiple="multiple">
<OPTION value="Komedie">Komedie</OPTION>
<OPTION value="Horor">Horor</OPTION></SELECT>

<SELECT NAME="keyword[]" multiple="multiple">
<OPTION value="2008">2008</OPTION>
<OPTION value="2007">2007</OPTION></SELECT>

tak jdou tímhle způsobem vybrat třeba "komedie z r. 2008", ale už ne "komedie z r. 2008 a 2007" ;o)

... ale to už jsou detaily ;-) ještě si s tím pohraju...

díky za radu :-)
AM_
Profil
No, na to už by ti implode nestačil (popř. bys zkombinoval dva implody), ale teoreticky můžeš sestavit dotaz něco jako description NOT LIKE '%2006%' AND description NOT LIKE '%2007%' AND (description LIKE '%2008%' OR description LIKE '%2009') ...
vybere všechny položky, které budou obsahovat 2008 či 2009 (nebo oboje), vyjma těch, které zároveň obsahují 2006 nebo 2007. To ale nebude stačit foreachovat ten select, protože nevybrané hodnoty z něj nevytáhneš, musíš předem znát všechny hodnoty toho SELECTu a ty, které tam nejsou uvedené, dosazovat do první části s NOT LIKE.
Myslím si ale, pokud tím nechceš dosáhnout něčeho spešl, že logičtější chování je vybrat i ty filmy, které obsahují vybraný i nevybraný rok, čistě intuitivně když budu chtít najít film s rokem vydání řekněme 2007-2008, zadám jen jeden z roků, ne oba.
kulhanek21
Profil
jj. taky si říkám, že takhle by to mohlo být dobré (bez přehnaného perfekcionismu) ;-)
včera jsem se ještě koukal na nějaké tutoriály k php fulltextu
(jestli by se z toho nedalo něco využít)
ale bylo by to zřejmě třeba udělat nějak dynamicky
(když ty vybrané hodnoty předem neznám)
a na to - musím si přiznat - nestačím ;o)
... ale přinejmenším jsem se zase dozvěděl něco nového ;-)

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: