webForumDet fria alternativet

Fixa en sökning med hjälp av php?

PHP

6 svar · 502 visningar · startad av Dr-man

Medlem sedan juli 2002732 inlägg
Frågan#1

Jag har tänkt göra en sökfunktion med tre textrutor.
Det kan man söka är bilmärke, årsmodell och färg.

Informationen finns lagrad i en MySQL-tabell.
På vilket sätt löser man detta enklast med hjälp av php?

Sökningen skall fungera på följande sätt ifall man endast skriver i en textruta, så visas resultatet enligt sökordet. Den skall också fungera på detta sätt, ifall man skriver i två eller flera textrutor, så skall det endast visa resultatet enligt
sökorden. T.ex om man skriver i en textruta bilmärke, som Volvo och en annan textruta färg, som blå, skall det endast visa Volvo med färgen blå.

Medlem sedan feb. 2003777 inlägg
#2

Kan man inte göra det med hjälp av if satser.

Medlem sedan mars 2003429 inlägg
#3

Det är ju lite kul för din beskrivning av ditt problem är ju som psedukod (stavas?)
Det är ju bara att du programmerar som du sagt, skapa olika sql frågor med hjälp av dina "ifall satser" (if).
Det är ju alltså hur många attribut i WHERE satsen som ska matchas som du bestämmer med dina if-satser.

EDIT! Observera hur varje rad börjar på "Det är ju" :bire

Medlem sedan mars 20034 471 inlägg
#4

Om dina fält i formuläret heter "marke", "farg" och "ar" och formuläret postas mha POST samt databasens fält heter detsamma med inledande versal, så skulle det bli något liknande:

$where = "";
if (isSet($_POST["marke"])
  $where.= "Marke = '".$_POST["marke"]."' ";
if (isSet($_POST["farg"]) {
  if (strlen($where) > 0) $where .= " AND ";
  $where.= "Farg = '".$_POST["farg"]."' ";
}
if (isSet($_POST["ar"]) {
  if (strlen($where) > 0) $where .= " AND ";
  $where.= "Ar = '".$_POST["ar"]."' ";
}
$sql = "SELECT * FROM tabellnamn WHERE $where";
Medlem sedan jan. 2005110 inlägg
#5

I princip samma som ovantående, men lite mer kortfattat:

$marke = mysql_escape_string( $_POST['marke'] );
$farg = mysql_escape_string( $_POST['farg'] );
$ar = mysql_escape_string( $_POST['ar'] );

$where = '';
$where .= ($marke != '') ? "marke='$marke'" : '';
$where .= ($where != '') ? ' AND ' : '';
$where .= ($farg != '') ? "farg='$farg'" : '';
$where .= ($where != '') ? ' AND ' : '';
$where .= ($ar != '') ? "ar='$ar'" : '';

$sql = "SELECT * FROM bilar WHERE $where";
Medlem sedan nov. 200528 inlägg
#6

Går det inte bara att göra:

$marke = mysql_escape_string( $_POST['marke'] ); 
$farg = mysql_escape_string( $_POST['farg'] ); 
$ar = mysql_escape_string( $_POST['ar'] ); 

$sql = "SELECT * FROM tabellnamn WHERE marke LIKE '%$marke%' AND farg LIKE '%$farg%' AND ar LIKE '%$ar%'";
Medlem sedan mars 20034 471 inlägg
#7

...

153 ms totalt · 2 externa anrop · v20260731065814-full.2ae45ccc
0 ms — hämta statistik (cache)
149 ms — hämta tråd, inlägg och bilagor (db)