Avatar billede rossi-v Nybegynder
21. marts 2010 - 19:30 Der er 23 kommentarer og
1 løsning

Har fejl i min søgefunktion.

Laver en søg der kan søge på mærke og pris.

Idéen er at når man søger på en pris som f.eks. 1000

Og så de vare som er under 1000 bliver vist.

Problemet er at der kommer desværre osse vare som er over det søgte beløb.

Koden :

<?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)){
if(mysql_num_rows($resultat) == 0) {
print "Desværre - ingen cykler matchede dine søgekriterier";
}

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);

?>



Evt. selv prøv den af på http://ws2.ceuherning.dk/23836/web/index.php


Skal have det til at fungere i aften! :/
Avatar billede erikjacobsen Ekspert
21. marts 2010 - 19:56 #1
Hvor bruger du prisen i din sql-sætning?
Avatar billede rossi-v Nybegynder
21. marts 2010 - 20:01 #2
er ikke helt sikker på hvad du mener, men det eneste sted selve prisen står i koden er:

$minQuery = "SELECT * FROM `uffe` WHERE
kpris < '".$_POST[soeg]."' OR
wpris < '".$_POST[soeg]."' OR
bpris < '".$_POST[soeg]."' OR
Avatar billede wanze Nybegynder
21. marts 2010 - 21:05 #3
Du opstiller jo blot et krav om at ét af de 6 kriterier skal være sande. Det er jo ikke det du vil. Du vil have at én af de første 3 kriterier er sande, og 1 af de næste 3 kriterier er sande.
Avatar billede erikjacobsen Ekspert
21. marts 2010 - 21:12 #4
$_POST[soeg] er vel dit søgeord - hvordan kommer prisen ind i billedet?
Avatar billede rossi-v Nybegynder
21. marts 2010 - 22:27 #5
wanze, det hjælper ikke ligefrem .


erikjacobsen, $_POST[soeg] kan jo være et tal som i en pris. ?
Som f.eks. hvis du søger på bilbasen . og så søger man normalt på en pris fra f.eks. 10.000 til 100.000 .. Det eneste i denne søg er at man søger på f.eks. 1000 og så kommer der de vare frem der ligger under dét beløb? .. skulle meget gerne være til at forstå .. :b
Avatar billede rossi-v Nybegynder
21. marts 2010 - 22:29 #6
wanze , ingen af de ting du ser i koden fungere... lige så meget tekst som i tal .. :/ ..
Avatar billede nemlig Professor
21. marts 2010 - 23:00 #7
Hvis jeg fx. skriver 5000 i søge feltet, så vil den hente de poster, hvor bare én af prisfelterne er under 5000.

Fx. har du en cykel, der står til 21000 kr., og som vises, selvom der kun søger på 5000.

Hvis bare én af de 3 priser, "kpris", "wpris" eller "bpris" er under 5000, så vises den i resultatet.

Hvorfor skal den tjekke 3 forskellige priser?
Avatar billede erikjacobsen Ekspert
21. marts 2010 - 23:04 #8
Det kan være bilbasen tænker noget i retningen af: Hvis brugeren har tastet et tal, så laver vi en særlig SQL-sætning, ellers laver vi en anden SQL-sætning.

Og så har nemlig nemlig ret i det der med OR.

Find ud af hvad du præcist mener, inden du kaster noget kode sammen.
Avatar billede nemlig Professor
21. marts 2010 - 23:05 #9
Jeg så lige et af dine andre spørgsmål.
Jeg gætter mig til, at de 3 priser er:

kpris=killemoes
wpris=winther
bpris=brugt

Men har du ikke lavet din tabel sådan, at alle 3 priser er registreret på hver sin post (cykel).
Dvs. at du på en killemoes-cykel også har registreret en bpris på 0 og en wpris på 0 eller hvordan har du gjort det?
Avatar billede wanze Nybegynder
21. marts 2010 - 23:09 #10
"Hvis bare én af de 3 priser, "kpris", "wpris" eller "bpris" er under 5000, så vises den i resultatet."

Ja, selvfølgelig gør den det. Du skriver OR. Du siger bare at én af dem skal være under 5000. Hvis du mener at alle skal være under 5000, så skal du jo skrive AND.
Avatar billede rossi-v Nybegynder
21. marts 2010 - 23:18 #11
min database ser sådan ud...


Feltnavn     Datatype     Nulværdi    
id              int(11)       Nej
kmaerke      text               Nej
kpris              int(11)       Nej
kinfo              text               Nej
wmaerke      text               Nej
wpris              int(11)       Nej
winfo              text               Nej
bmaerke        text               Nej
bpris              int(11)       Nej    
binfo              text               Nej   
news              text               Nej



DEN SKAL KUN SØGE I KPRIS , WPRIS , BPRIS OG KMÆRKE , WMÆRKE , BMÆRKE.
Avatar billede rossi-v Nybegynder
21. marts 2010 - 23:19 #12
jeg er nød til og dele det op i 3 priser for det skal jeg.
Avatar billede nemlig Professor
21. marts 2010 - 23:21 #13
Og fortæl os lige, hvilke værdier du har i de 3 priser på præcis den cykel, der hedder "Kildmeoes Bikerz" og hvor den ene pris er 3249.
Avatar billede nemlig Professor
21. marts 2010 - 23:23 #14
Jeg gætter på, at du ikke har de samme priser i alle 3 felter.
Det kunne løse dít umiddelbare problem, når du fx. gemmer en pris på en kildemose, så smid prisen i alle 3 pris-felter.
Avatar billede rossi-v Nybegynder
21. marts 2010 - 23:57 #15
hvordan vil det hjælpe det er jo og snyde.
Avatar billede nemlig Professor
22. marts 2010 - 07:35 #16
Jeg prøver såmænd bare at fejlsøge. Du slynger ikke om dig med detaljer, hvorfor vi må spørge ind til forskellige ting.

Men forklar lige, hvad du helt præcist gemmer i databasen, når du opretter en cykel.
Hvilke oplysninger, står der i de forskellige felter, fx. på den cykel jeg nævnte i #13:

kmaerke
kpris 
kinfo 
wmaerke
wpris 
winfo
bmaerke
bpris       
binfo     
news
Avatar billede wanze Nybegynder
22. marts 2010 - 15:33 #17
Jeg forstår ikke, hvorfor I bliver ved med at fejlsøge. Når der udføres:

kpris < '".$_POST[soeg]."' OR
wpris < '".$_POST[soeg]."' OR
bpris < '".$_POST[soeg]."' OR

så vil to af felterne jo være tomme, hvorfor alt i tabellen bliver hevet med ud. Med mindre jeg er gået helt galt i byen her, så synes jeg at problemet er rimelig åbenlyst.
Avatar billede nemlig Professor
22. marts 2010 - 15:44 #18
Det er ikke helt åbenlyst, da et input på fx. 2000 ikke returnerer nogen poster.
Derfor synes jeg, det vil være interessant at få en melding på, hvordan han gemmer.
Dette kan også være med til nogle bidrag om, hvordan han så kan løse det.
Avatar billede wanze Nybegynder
22. marts 2010 - 16:50 #19
Har slet ikke kigget på hans PHP-kode, men han bruger mysql_fetch_array(), hvorefter han forsøger at kalde vædier som $raekke['id'].

Rossi-v: Først og fremmest skal du ændre mysql_fetch_array() til mysql_fetch_assoc().

For det andet laver du et if-statement, der kontroller om der er noget i $resultat. Dette if-statement bliver dog udført i din while-løkke, som kun løbes igennem, hvis der er noget i $resultat. Det er paradoksalt, du bør flytte while-løkken ind i dit if-statement; ikke omvendt.
Avatar billede wanze Nybegynder
22. marts 2010 - 16:51 #20
Nemlig nævner, at der ikke returneres poster, når der søges på fx 2000. Hvordan har I gennemført den test? Har du prøvet at sende din query direkte til databasen, så du kan sikre dig, at fejlen er i din query, og ikke i din PHP-kode?
Avatar billede nemlig Professor
22. marts 2010 - 17:09 #21
Jeg testede bare i går på det site, som Rossi-v oplyste i den anden tråd.
Her kunne jeg konstatere, at et input på 2000 ikke gav nogen resultater.
Lige nu virker det slet ikke.

Noget tyder på, at et det er en stor mundfuld, som Rossi-v er i gang med.

Der mangler også valideringer på input-feltet, ligesom database strukturen virker forkert - i hvert fald set med mine øjne.

Linkene i while-løkken er også defineret forkert.
Siden bliver ikke vist korrekt i IE 7, men er umiddelbart OK med Firefox.
Avatar billede wanze Nybegynder
22. marts 2010 - 17:23 #22
At have 3 felter, hvoraf kun 1 indeholder noget er i hvert fald noget juks. Og ja, han validerer ingenting. Hans side er meget udsat for MySQL-injections, og han bruger forældede tags som <center>.
Avatar billede nemlig Professor
29. marts 2010 - 08:47 #23
Der er blevet lidt stille i denne tråd.
Rossi-v: Jeg håber ikke, at jeg har skræmt dig, for det har på ingen måder været meningen. Jeg/vi har bare villet gøre opmærksom på nogle udfordringer, du står overfor.
Du må komme på banen, og vi skal prøve at hjælpe..... :)
Avatar billede rossi-v Nybegynder
13. april 2010 - 14:34 #24
1
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