Avatar billede rossi-v Nybegynder
21. marts 2010 - 03:53 Der 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&oslash;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


while ($raekke=mysql_fetch_array($resultat)){

print "<a href=\"kildemoes.php".$raekke['id']."\"<strong>$raekke[kmaerke]</strong></a><br />";
print "<a href=\"kildemoes.php".$raekke['id']."\"<strong>$raekke[kpris]</strong></a><br />";

print "<a href=\"winther.php".$raekke['id']."\"<strong>$raekke[wmaerke]</strong></a><br />";
print "<a href=\"winther.php".$raekke['id']."\"<strong>$raekke[wpris]</strong></a><br />";

print "<a href=\"BrugteCykler.php".$raekke['id']."\"<strong>$raekke[bmaerke]</strong></a><br />";
print "<a href=\"BrugteCykler.php".$raekke['id']."\"<strong>$raekke[bpris]</strong></a>";
}

} mysql_close($forbindelse);

?>
Avatar billede arne_v Ekspert
21. marts 2010 - 04:01 #1
prøv med en:

print $minQuery;

og se hvordan den ser ud !
Avatar billede rossi-v Nybegynder
21. marts 2010 - 11:23 #2
kan ikke lige se hvor du vil smide den ind henne?
Avatar billede arne_v Ekspert
21. marts 2010 - 14:19 #3
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
Avatar billede rossi-v Nybegynder
21. marts 2010 - 14:29 #4
$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


saadan der du mener?

hvis det er saa virker det ikke.
Avatar billede arne_v Ekspert
21. marts 2010 - 15:35 #5
Det ændrer jo ikke noget, men det skulle printe den faktiske SQL.

Hvordan ser den ud?
Avatar billede rossi-v Nybegynder
21. marts 2010 - 15:45 #6
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

Du skal indetaste søgeord
Avatar billede nemlig Professor
21. marts 2010 - 16:29 #7
Du når slet ikke til at printe din SQL, da din $_POST['soeg'] er tom.

Vi skal nok se lidt mere kode - Fx. hvordan du har defineret dit input-felt (søg feltet).
Avatar billede rossi-v Nybegynder
21. marts 2010 - 16:44 #8
okay hmm det er det her du er ude efter?

    <th scope="col"><form method="get" action="soeg2.php">
                    <input name="soeg" type="text" />
                    <input type="submit" value="Søg"/></form></th>
Avatar billede nemlig Professor
21. marts 2010 - 16:46 #9
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.
Avatar billede rossi-v Nybegynder
21. marts 2010 - 16:50 #10
okay noget du kan se hvad fejlen er? ville være super heh
Avatar billede nemlig Professor
21. marts 2010 - 16:51 #11
Hvad sker der hvis du i din form method i stedet for "get" anvender "post"
Avatar billede rossi-v Nybegynder
21. marts 2010 - 16:56 #12
ja nu sker der noget men for en fejl

hvis du prøver og søg nu så kan du se fejlen.

mange tak indtil vider xD
Avatar billede rossi-v Nybegynder
21. marts 2010 - 16:59 #13
undskyld det var en -Notice- ved godt hvordan man kommer af meed den.

nå men du skal jo ha de 60 point mange tak for hjælpen
Avatar billede nemlig Professor
21. marts 2010 - 17:02 #14
Du får her et svar.
Avatar billede rossi-v Nybegynder
21. marts 2010 - 17:11 #15
men kan jeg ikke lige få dig til og teste den for den søger ikke helt som den skal
Avatar billede nemlig Professor
21. marts 2010 - 17:19 #16
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.
Avatar billede rossi-v Nybegynder
21. marts 2010 - 17:23 #17
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&oslash;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


while ($raekke=mysql_fetch_array($resultat)){

print '<center>';
print "<br /><br />";
print "<a href=\"kildemoes.php".$raekke['id']."\"<strong>$raekke[kmaerke]</strong></a><br />";
print "<a href=\"kildemoes.php".$raekke['id']."\"<strong>$raekke[kpris]</strong></a><br />";
print "<br /><br />";
print "<br /><br />";
print "<a href=\"winther.php".$raekke['id']."\"<strong>$raekke[wmaerke]</strong></a><br />";
print "<a href=\"winther.php".$raekke['id']."\"<strong>$raekke[wpris]</strong></a><br />";
print "<br /><br />";
print "<br /><br />";
print "<a href=\"BrugteCykler.php".$raekke['id']."\"<strong>$raekke[bmaerke]</strong></a><br />";
print "<a href=\"BrugteCykler.php".$raekke['id']."\"<strong>$raekke[bpris]</strong></a>";
print '</center>';
}

} mysql_close($forbindelse);

?>
Avatar billede nemlig Professor
21. marts 2010 - 18:15 #18
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";
Avatar billede nemlig Professor
21. marts 2010 - 18:21 #19
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.
Avatar billede rossi-v Nybegynder
21. marts 2010 - 18:32 #20
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.
Avatar billede nemlig Professor
21. marts 2010 - 18:42 #21
OK - den kode jeg skrev til dig i #18, henter de cykler, der har en pris, som er under den indtastede. Så det virker.

Men hvis der angives fx. 1000, og der ikke er nogen poster, der matcher, så returnere MySQL 0 poster.

Derfor skal du have et tjek mere, hvis antal poster er 0.
Det gør du med:

if(mysql_num_rows($resultat) == 0) {
print "Desværre - ingen cykler matchede dine søgekriterier";
}

Jeg kan ikke hjælpe mere nu, da jeg er optaget af anden opgave.
Avatar billede rossi-v Nybegynder
21. marts 2010 - 18:46 #22
ok takker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester