Hej! Börja med att kolla om alla fält skickas över till sökskriptet: Alla fält skickas med vad jag kan se... Hur bygger jag SQL-satsen? Har en tanke om att kanske köra olika elseif som bygger ihop WHERE klausulen... Vad tror du? Det blir lätt en himla massa elseif-grenar. Man kan använda en loop i stället: Hej! En sak glömde jag nämna: Hmmm, nu stämmer allt som det ska, men vad jag än väljer så hittas ingenting i databasen... Skumt... Även när jag vill göra en "tom " sökning så hitttas ingenting.... Funderar på det med AND och OR.... Om man har AND måste ju alla kriterier uppfyllas så kanske är det det som strular? Jag trodde att du gjort fel och egentligen ville ha AND. Men det var kanske jag som var för snabb där... Byt ut det till OR och se om det är det du vill ha. Hej! Ja, om det är OR och första villkoret är uppfyllt, så spelar resten inte någon roll. Men om första villkoret inte är uppfyllt, så skall resterande villkor ha betydelse. Så borde det vara ja.... Till att börja med kan du pröva att sätta <b>value=""</b> på alla "alla-val": Hej! $where[] = "($fält = '$value')"; Men du föreslår att man ska skriva <option value=""> blablabla </option> eller? Ja, med tomt value på "alla-valen" (t.ex. "Alla län"). För <b>if(!empty($_POST[$fält])) {</b> gör att endast de fält som inte är tomma tas med i sökningen. Hej! Det hjälpte inte att sätta value="" på alla Alla-fält... Det blir samma som innan.... Jag har så här nu: Skriv ut SQL-satsen, så jag får se hur den blev: Så här blir SQL-satsen: Har du satt <b>value=""</b> för annonsörvalet Alla? Det var ett syntax-fel i min kod. Detta är nu åtgärdat men problemet är kvar. Väljer jag något mer alternativ, till exempel Län, så kommer ändå sökträffar med alla län med... Du vill nog ha <b>AND</b> mellan villkoren, inte <b>OR</b>. NU FUNKAR DET!!!!Problem med sökfunktion - använder bara första villkoret....
Har en annonssida som har en sökfunktion. Får inte denna att fungera ordentligt. Den är uppbyggd med en sökruta med fritextsökning och fyra dropdownlister där man väljer villkor.
Problemet är att om jag väljer till exempel annonstyp och Län så söker den bara på annonstyp.....
Fattar inte varför....
Skulle gärna också vilja ha hjälp med en paging-funktion.... Har läst mig till att man bör ändra till GET för det så det ska jag fixa....
KOD:
<H1 class="marginal">Sök annonser</H1><br>
<form action="index.php?link=sok" method="post" name="sokannons">
<table class="huvudsida marginal" width="20%" border="0" cellpadding="1" cellspacing="1">
<tr>
<td valign="top">
Söktext:<br>
<input type="text" size="20" name="soktext">
</td>
<td> </td>
<td valign="top">
Annonstyp:<br>
<select name="annonstyp" size="1">
<option selected>Finnes</option>
<option>Sökes</option>
</select>
</td>
</tr>
<tr>
<td valign="top">
Län:<br>
<select name="lan" size="1">
<option selected>Alla Län</option>
<option>Blekinge</option>
<option>Dalarna</option>
<option>osv...</option>
</select>
</td>
<td> </td>
<td valign="top">
Kategori:<br>
<select name="kategori" size="1">
<option selected>Alla Kategorier</option>
<option>Bygg, Anläggning</option>
<option>Ekonomi, Finans</option>
<option>osv...</option>
</select>
</td>
</tr>
<tr>
<td valign="top">
Annonsör:<br>
<select name="annonsor" size="1">
<option selected>Alla</option>
<option>Företag</option>
<option>Privatperson</option>
</select>
</td>
</tr>
<tr>
<td valign="top" colspan="2">
<input type="submit" name="submitsearch" value="Sök">
</td>
</tr>
<tr>
<td colspan="2">
PHP:
<?php
if ($_POST['submitsearch'])
{
//Koppla upp mot MySQL
$dbh=mysql_connect ("$host", "$user", "$pass") or die (mysql_error());
mysql_select_db ("$dbname");
$query = "SELECT Annonsnummer, Datum, Tid, Bild, Rubrik, Kategori, Lan, Annonsor FROM annons WHERE Annonstyp = '{$_POST['annonstyp']}' || Lan = '{$_POST['lan']}' || Annonsor = '{$_POST['annonsor']}' || Kategori = '{$_POST['kategori']}' || Annonstext LIKE '{$_POST['soktext']}' ORDER BY Datum DESC, Tid DESC";
$result = mysql_query($query) or die('Kunde inte söka annonser:<br>'.mysql_error());
$soktraffar = MYSQL_AFFECTED_ROWS();
if ($soktraffar == 0)
{
echo '</tr>';
echo '<tr>';
echo '<td nowrap><br><B>Hittade inga annonser som motsvarar din sökning...</B></td>';
echo '</tr>';
}
else
{
echo '<br>Sökträffar: 1-'.$soktraffar.' av '.$soktraffar;
echo '</tr>';
echo '<tr>';
echo '<td nowrap>|<B>Datum och Tid</B></td>';
echo '<td>|<B>Bild</B></td>';
echo '<td>|<B>Rubrik</B></td>';
echo '<td>|<B>Kategori</B></td>';
echo '<td>|<B>Län</B></td>';
echo '<td>|<B>Annonsör</B></td>';
echo '</tr>';
}
//Hämta datan från databasen och skriva ut den
$result = mysql_query($query) or die ("Kunde inte hämta data ".mysql_error());
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo '<tr>';
echo '<td nowrap>|'.$row['Datum'].' '.$row['Tid'].'</td>';
echo '<td><img src="/bilder/'.$row['Annonsnummer'].'.jpg" border="0"></td>';
echo '<td>|<a class="soktraff" href="index.php?link=visatraff&id='.$row['Rubrik'].'" target="_new">'.$row['Rubrik'].'</a></td>';
echo '<td nowrap>|'.$row['Kategori'].'</td>';
echo '<td nowrap>|'.$row['Lan'].'</td>';
echo '<td nowrap>|'.$row['Annonsor'].'</td>';
echo '</tr>';
echo '<tr>';
echo '<td colspan="6">';
echo '<hr>';
echo '</td>';
echo '</tr>';
}
echo '</table>';
}
else
{
return false;
}
?>Sv: Problem med sökfunktion - använder bara första villkoret....
<?php
echo '<pre>'; print_r($_POST); echo '</pre>';
if ($_POST['submitsearch'])
{
Sedan förstår jag inte varifrån ofoget att sätta alla strängvariabler inom citationstecken (speciellt vid databasuppkopplingen) kommer ifrån... Det räcker gott med
//Koppla upp mot MySQL
$dbh=mysql_connect ($host, $user, $pass) or die (mysql_error());
mysql_select_db ($dbname);
Sv:Problem med sökfunktion - använder bara första villkoret....
Sv: Problem med sökfunktion - använder bara första villkoret....
<?php
$alla_fält = array('annonstyp', 'lan', 'annonsor', 'kategori', 'annonstext');
$where = array();
foreach($alla_fält as $fält) {
if(!empty($_POST[$fält])) {
$value = mysql_escape_string($_POST[$fält]);
$where[] = "$fält = '$value'";
}
}
if(count($where) > 0)
$where = 'WHERE ' . implode(' AND ', $where);
else
$where = '';
$query = "SELECT Annonsnummer, Datum, Tid, Bild, Rubrik, Kategori, Lan, Annonsor FROM annons $where ORDER BY Datum DESC, Tid DESC";
Sv:Problem med sökfunktion - använder bara första villkoret....
Tack för ditt tips... Tyvärr så fungerar inte loopen... Det händer ingenting när man "submittar" nu... Kopierade rakt av så nu ser detr ut så här....
<?php
if ($_POST['submit'])
{
$alla_fält = array('annonstyp', 'lan', 'annonsor', 'kategori', 'annonstext');
$where = array();
foreach($alla_fält as $fält)
{
if(!empty($_POST[$fält]))
{
$value = mysql_escape_string($_POST[$fält]);
$where[] = "$fält = '$value'";
}
}
if(count($where) > 0)
$where = 'WHERE ' . implode(' AND ', $where);
else
$where = '';
$query = "SELECT Annonsnummer, Datum, Tid, Bild, Rubrik, Kategori, Lan, Annonsor FROM annons $where ORDER BY Datum DESC, Tid DESC";
Vad kan bråka?
Sv: Problem med sökfunktion - använder bara första villkoret....
Byt namn på
<b><input type="text" size="20" name="soktext"> </b>
till
<b><input type="text" size="20" name="annonstext"></b>
Om inte det hjälper, skriv ut SQL-satsen som den ser ut efter att $where har satts in:
$query = "...";
echo $query;
Sv:Problem med sökfunktion - använder bara första villkoret....
Sv: Problem med sökfunktion - använder bara första villkoret....
Sv:Problem med sökfunktion - använder bara första villkoret....
Nu fungerar sökfunktionen men nu är allt tillbaka från början igen.... Bara första sökkriteriet tas med i sökningen, detta beror säkert på att det är OR emellan, första kriteriet uppfylls så struntar den i resten.... Kan man skriva SQL-satsen på något annat sätt? Sv: Problem med sökfunktion - använder bara första villkoret....
Hur vill du egentligen att det skall vara? Skall alla villkor vara uppfyllda eller räcker det med ett av dem? Eller skall det vara blandat på något vis?
Du kanske kan ge exempel på vilka data som finns, vad du söker på och vilka poster som då skall synas?Sv:Problem med sökfunktion - använder bara första villkoret....
Tanken är att jag vill ha någon blandning... På sidan kan man välja att söka på fritext, Annonstyp(sökes/finnes), Län, Kategori och Annonsör(Företag/Privatperson)
Som standardval är fritext tom, Annonstyp=Finnes, Län=Alla Län, Kategori=Alla Kategorier och Annonsör=Alla. Då ska en sökning på alla annonser med annonstyp Finnes göras. Om man sedan ändrar på någon av sökkriterierna ska sökning på alla annonser med vald annonstyp+ valfritt sökkriterium.
Ex. Annonstyp=Finnes och Län=Stockholm ska hitta alla annonser av annonstyp Finnes med Län = Stockholm, Kategori = Alla Kategorier och Annonsör = Alla
Sökfunktionen ligger uppe på www.jobbkompis.se/index.php?link=sok så kan du kolla hur den är uppbyggd.
Ska nog också lägga till en Annonstyp = Alla så att man kan söka både på Finnes och Sökes...Sv: Problem med sökfunktion - använder bara första villkoret....
<code><option selected >Alla Län</option></code>
Då borde ett fält som man satt "alla" på inte komma med i sökvillkoren.Sv:Problem med sökfunktion - använder bara första villkoret....
Ska testa det... En kompis till mig gav tipset att man kunde sätta parenteser runt alla villkor + parenteser runt hela uttrycket... Var lägger jag till parenteserna i satsen som bygger upp where-satsen? Sv: Problem med sökfunktion - använder bara första villkoret....
och
$where = 'WHERE (' . implode(' AND ', $where) . ')';
men det skall inte behövas eftersom = har binder hårdare än såväl AND som OR.Sv:Problem med sökfunktion - använder bara första villkoret....
Sv: Problem med sökfunktion - använder bara första villkoret....
Sv:Problem med sökfunktion - använder bara första villkoret....
<code><option value="" selected> Alla Län </option></code>Sv: Problem med sökfunktion - använder bara första villkoret....
echo $query;
Sv:Problem med sökfunktion - använder bara första villkoret....
SELECT Annonsnummer, Datum, Tid, Bild, Rubrik, Kategori, Lan, Annonsor FROM annons WHERE ((annonstyp = 'Finnes') OR (annonsor = 'Alla')) AND Status = 'Godkänd' ORDER BY Datum DESC, Tid DESC
Det verkar som om value på annonsor inte sätts till tomt.... eller nått....Sv: Problem med sökfunktion - använder bara första villkoret....
<select name="annonsor" size="1">
<option value="" selected>Alla</option>
<option>Företag</option>
<option>Privatperson</option>
</select>
Sv:Problem med sökfunktion - använder bara första villkoret....
?????Sv: Problem med sökfunktion - använder bara första villkoret....
Sv:Problem med sökfunktion - använder bara första villkoret....
Tack så otroligt mycket för all hjälp! Du är fantastisk!