21. marts 2010 - 03:53Der er
21 kommentarer og 1 løsning
søge funktion problemmer
jeg skal lave en søg som skal kunne søge - på pris , på mærke. men den fungere ikke. nogen der kan se hvad der er galt?
koden er =
<?php include('forbindelse.php');
//kontrollerer om variablen fra søge feltet er tomt if (empty($_POST['soeg'])){ print '<br /><br />'; print '<center>'; print 'Du skal indetaste søgeord'; print '</center>'; }else{
$minQuery = "SELECT * FROM `uffe` WHERE kpris < \"%$_POST[soeg]%\" OR wpris < \"%$_POST[soeg]%\" OR bpris < \"%$_POST[soeg]%\" OR kmaerke LIKE \"%$_POST[soeg]%\" OR wmaerke LIKE \"%$_POST[soeg]%\" OR bmaerke LIKE \"%$_POST[soeg]%\" ORDER BY id";
$resultat=mysql_query($minQuery, $forbindelse);//henter fra databasen
Lige efter at du har du har giver $minQuery en værdi i:
$minQuery = "SELECT * FROM `uffe` WHERE kpris < \"%$_POST[soeg]%\" OR wpris < \"%$_POST[soeg]%\" OR bpris < \"%$_POST[soeg]%\" OR kmaerke LIKE \"%$_POST[soeg]%\" OR wmaerke LIKE \"%$_POST[soeg]%\" OR bmaerke LIKE \"%$_POST[soeg]%\" ORDER BY id";
og lige før at du nruger den i:
$resultat=mysql_query($minQuery, $forbindelse);//henter fra databasen
$minQuery = "SELECT * FROM `uffe` WHERE kpris < \"%$_POST[soeg]%\" OR wpris < \"%$_POST[soeg]%\" OR bpris < \"%$_POST[soeg]%\" OR kmaerke LIKE \"%$_POST[soeg]%\" OR wmaerke LIKE \"%$_POST[soeg]%\" OR bmaerke LIKE \"%$_POST[soeg]%\" ORDER BY id";
print $minQuery;
$resultat=mysql_query($minQuery, $forbindelse);//henter fra databasen
den printer kun det her som den hele tiden har gjordt. her er linket saa kan se hvordan den virker hvis det kan hjaelpe? http://ws2.ceuherning.dk/23836/web
Og så er det generelt en god ide, at beskrive, hvori fejlen består. I dette eksempel er det, at du, selvom du har indtastet et søgeord, får beskeden "Du skal indtaste søgeord".
Så havde vi fanget noget hurtigere, at det slet ikke er et MySQL-problem, men givet vis et problem med din input-form.
Og hvad er problemstillingen lidt mere præcist? Hvis det var mig, ville jeg nok lave 2 søge-felter: 1 = Søg på prisen og endnu bedre, et prisinterval med min. og max. 2 = Søg på navnet
Linksene i dine søge-resultater har du vist også et problem med, ligesom du bør præsentere priserne i søge-resulatet med dansk formatering.
kan jeg få dig til og forklar lidt mere ved og lave om på den her kode. heh bare som du nok ville have det lavet?
<?php include('forbindelse.php');
//kontrollerer om variablen fra søge feltet er tomt if (empty($_POST['soeg'])){ print '<br /><br />'; print '<center>'; print 'Du skal indetaste søgeord'; print '</center>'; }else{
$minQuery = "SELECT * FROM `uffe` WHERE kpris < \"%$_POST[soeg]%\" OR wpris < \"%$_POST[soeg]%\" OR bpris < \"%$_POST[soeg]%\" OR kmaerke LIKE \"%$_POST[soeg]%\" OR wmaerke LIKE \"%$_POST[soeg]%\" OR bmaerke LIKE \"%$_POST[soeg]%\" ORDER BY id";
//print $minQuery;// set denne her til for at teste soegen
$resultat=mysql_query($minQuery, $forbindelse);//henter fra databasen
Det med at du får alle resultateter, hænger sammen med din MySQL. Det er jeg ikke nogen ørn til, men som jeg forstår den, søger du på alle, hvor de forskellige pristyper er mindre end dit input eller hvor dit input er en del af teksterne.
Prøv denne her SQL:
$minQuery = "SELECT * FROM `uffe` WHERE kpris < '".$_POST[soeg]."' OR wpris < '".$_POST[soeg]."' OR bpris < '".$_POST[soeg]."' OR kmaerke LIKE '".$_POST[soeg]."' OR wmaerke LIKE '".$_POST[soeg]."' OR bmaerke LIKE '".$_POST[soeg]."' ORDER BY id";
Og min idé med flere søgefelter, er at det nok er mere forståeligt for kunden. Hvis kunden fx. vil søge efter en cykel til 40.000 kr. og alle cykler koster mindre, ja så præsenteres kunden også for dem, der koster 2.5000 kr. Endvidere gør det, at du meget nemmere kan validere for korrekt input. Derfor kunne du fx. anvende 3 input-felter, i stedet for 1. 1 = Min. pris 2 = Max. pris 3 = tekst-søg
Og så mener jeg, at du skal validere på inputtene. Fx. er det et tal, der er angivet i min og max priser. Eller hvad nu, hvis kunden skriver "4.500,00". Så skal du konvertere tallet til engelsk format, for at du kan hente de korrekte poster fra MySQL. OG hvad med SQL-injektions?
Det var bare nogle input - men der er givet vis flere steder, hvor du kan/bør gøre din kode bedre.
ja det skal jo være sådan at man kan søge efter det man maks vi gi for en cykel også skal den vise dem der koster det man søger og det der er under prisen.
men hvis du prøver den nu kan du se at det virker lidt for når du søger efter noget som ikke er der. så skriver den heller ikke noget. f.eks. hvis du søger efter 1000.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.