Avatar billede clausberg Nybegynder
28. juli 2005 - 13:48 Der er 33 kommentarer og
1 løsning

mysql query rod i sætning

Når jeg kører følgende sætning:
$rs = mysql_query("SELECT * FROM artikler WHERE titel LIKE '%".$_POST['titel']."%' or kategori LIKE '%".$_POST['kategori']."%' or mærker LIKE '%".$_POST['mærker']."%' or antal LIKE '%".$_POST['search']."%' LIMIT 0, 150") or die(mysql_error());

så finder den alle mine poster frem i min DB og det er ikke meningen. Det er jo meningen at brugeren skal kunne  indsnævre søgningen, og det sker altså ikke.

"Titel" og "mærke" er et tomt tekstfelt, hvor det er det brugeren skriver, der skal søges på.
"Kategori" og "antal": her har brugeren mulighed for at vælge ud fra en drop down menu forskellige kategorier - det er det brugeren vælger at klikke af, som query sætningen skal søge i DB efter.

Hvad er der galt i denne sætning????????
Avatar billede kdjweb Nybegynder
28. juli 2005 - 14:01 #1
du kunne lave det som $_GET istedet for $_POST og så bare indtaste i adresselinien i stedet
Avatar billede clausberg Nybegynder
28. juli 2005 - 14:05 #2
Det har jeg prøvet,og det virker desværre ikke :-(
Hvad er det jeg skal indtaste i adresselinien?
Avatar billede kdjweb Nybegynder
28. juli 2005 - 14:08 #3
du kunne lave
if(empty($_POST['titel'])){
  $titel = //start titel;
} else {
  $titel = $_POST['titel'];
}

osv. ?
Avatar billede clausberg Nybegynder
28. juli 2005 - 14:21 #4
Du mener, at hvis brugeren efterlader feltet tomt, så ignorerer query sætningen den???

Det skal jo være sådan, at man ikke nødvendigvis skal gøre brug af alle fire søgefelter, men blot kan nøjes med at bruge den ene, eller kombinere 2 - og dermed åbne søgemulighederne eller snævre dem ind.
Avatar billede kdjweb Nybegynder
28. juli 2005 - 14:28 #5
nååh, så forstår jeg.

if($_POST['titel']){
  $sql = "titel LIKE '%".$_POST['titel']."%'";
} else if($_POST['titel'] && $_POST['kategori']){
  $sql = "titel LIKE '%".$_POST['titel']."%' or kategori LIKE '%".$_POST['kategori']."%'";
}
osv?

noget i den stil?

$rs = mysql_query("SELECT * FROM artikler WHERE $sql LIMIT 0, 150") or die(mysql_error());
Avatar billede clausberg Nybegynder
28. juli 2005 - 14:43 #6
Hvad er ideen med at bruge if og else i dit eksempel?
I den nederste sætning du har skrevet, har du skrevet ...where $sql limit... osv... hvad henviser $sql til i denne forbindelse?
Avatar billede kdjweb Nybegynder
28. juli 2005 - 15:01 #7
hvis man har indtastet en titel så er $sql = "titel LIKE '%".$_POST['titel']."%'";... det bliver så indsat i din query så den kun leder efter titel
Avatar billede clausberg Nybegynder
28. juli 2005 - 15:02 #8
Lækker detalje... :-)

men hvor skal jeg skrive alt det der med if og else?
Avatar billede kdjweb Nybegynder
28. juli 2005 - 15:03 #9
bare oven over :)
Avatar billede clausberg Nybegynder
28. juli 2005 - 15:38 #10
Jeg prøver det lige og vender tilbage...
Avatar billede kdjweb Nybegynder
28. juli 2005 - 15:40 #11
okay :)
Avatar billede clausberg Nybegynder
28. juli 2005 - 16:20 #12
Ja, nu virker det... sådan nogenlunde :-D

Men det undrer mig bare rigtigt meget, at query sætningen skal være så lang for at kunne det jeg ønsker?!?!?!?!

Men lige for en god ordens skyld:
I det eksempel du gav med if og else - er der et mønster i de ting du sætter sammen - jeg kan jo se at du har kædet titel sammen med kategori - hvorfor?

Du skriver også "osv."... hvad vil du skrive efterfølgende for at gøre den del af query færdig?
Avatar billede kdjweb Nybegynder
28. juli 2005 - 16:35 #13
jeg har lavet en else if.. du sagde jeg at man skulle have mulighed for mere end 2 :)

osv. menes
titel LIKE '%".$_POST['titel']."%' or kategori LIKE '%".$_POST['kategori']."%' or mærker LIKE '%".$_POST['mærker']."%' or antal LIKE '%".$_POST['search']."%'

skal laves om til if sætninger..

det er sikkert ikke den bedste måede men det virker.. :)
Avatar billede clausberg Nybegynder
28. juli 2005 - 16:39 #14
aha :)

Er denne sætning så korrekt:
else if($_POST['titel'] && $_POST['kategori'] && $_POST['mærke'] && $_POST['antal'])

Jeg har jo 4 felter brugeren kan gøre brug af.
Avatar billede kdjweb Nybegynder
28. juli 2005 - 16:43 #15
jeg har fået en bedre ide.. skal lige finskrive det :)
Avatar billede clausberg Nybegynder
28. juli 2005 - 16:45 #16
Konge!
Avatar billede kdjweb Nybegynder
28. juli 2005 - 16:50 #17
if($_POST['titel']{
  $a = "titel LIKE '%".$_POST['titel']."%'";
  $antallet++;
}
if($_POST['kategori']{
  $b = "kategori LIKE '%".$_POST['kategori']."%'";
  $antallet++;
}
if($_POST['mærke']){
  $c = "mærker LIKE '%".$_POST['mærker']."%'";
  $antallet++;
}
if($_POST['antal']){
  $d = "antal LIKE '%".$_POST['search']."%'";
  $antallet++;
}
$antal_ialt = count($antallet);
if($antal_ialt > 1){
  $mellemrum = "or";
}

$sql = $a.$mellemrum.$b.$mellemrum.$c.$mellemrum.$d;

$rs = mysql_query("SELECT * FROM artikler WHERE $sql LIMIT 0, 150") or die(mysql_error());

er ikke sikker på at det virker :p
Avatar billede kdjweb Nybegynder
28. juli 2005 - 16:52 #18
nogle dumme fejl...

<?php
if($_POST['titel']){
  $a = "titel LIKE '%".$_POST['titel']."%'";
  $antallet++;
}
if($_POST['kategori']){
  $b = "kategori LIKE '%".$_POST['kategori']."%'";
  $antallet++;
}
if($_POST['mærke']){
  $c = "mærker LIKE '%".$_POST['mærker']."%'";
  $antallet++;
}
if($_POST['antal']){
  $d = "antal LIKE '%".$_POST['search']."%'";
  $antallet++;
}
$antal_ialt = count($antallet);
if($antal_ialt > 1){
  $mellemrum = "or";
}

$sql = $a.$mellemrum.$b.$mellemrum.$c.$mellemrum.$d;

$rs = mysql_query("SELECT * FROM artikler WHERE $sql LIMIT 0, 150") or die(mysql_error());
?>
Avatar billede clausberg Nybegynder
28. juli 2005 - 16:56 #19
Det virker desværre ikke :(
Du skriver antallet? - hvad er det? Jeg har dog en tabel i DB der hedder antal
Avatar billede kdjweb Nybegynder
28. juli 2005 - 17:03 #20
tjae antallet er bare til hvis der er mere en 1 ting man søger efter så sætter den "or" imellem
Avatar billede kdjweb Nybegynder
28. juli 2005 - 17:04 #21
$sql = $a." ".$mellemrum." ".$b." ".$mellemrum." ".$c." ".$mellemrum." ".$d;
er det bedre ?
Avatar billede clausberg Nybegynder
28. juli 2005 - 17:07 #22
Nej :(

jeg får stadig den samme fejlmelding:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'antal LIKE '%%' LIMIT 0, 150' at line 1
Avatar billede kdjweb Nybegynder
28. juli 2005 - 17:13 #23
heh mig der laver fejl så


<?php
if(!empty($_POST['titel'])){
  $a = "titel LIKE '%".$_POST['titel']."%'";
  $antallet++;
}
if(!empty($_POST['kategori'])){
  $b = "kategori LIKE '%".$_POST['kategori']."%'";
  $antallet++;
}
if(!empty($_POST['mærke'])){
  $c = "mærker LIKE '%".$_POST['mærker']."%'";
  $antallet++;
}
if(!empty($_POST['antal'])){
  $d = "antal LIKE '%".$_POST['search']."%'";
  $antallet++;
}
$antal_ialt = count($antallet);
if($antal_ialt > 1){
  $mellemrum = "or";
}

$sql = $a." ".$mellemrum." ".$b." ".$mellemrum." ".$c." ".$mellemrum." ".$d;

$rs = mysql_query("SELECT * FROM artikler WHERE $sql LIMIT 0, 150") or die(mysql_error());
?>


please sig det virker :)
Avatar billede clausberg Nybegynder
28. juli 2005 - 17:19 #24
Stadig samme fejl :)
Avatar billede clausberg Nybegynder
28. juli 2005 - 17:20 #25
Underligt at fejlmeldingen retter sig mod den tabel der hedder antal?
Avatar billede kdjweb Nybegynder
28. juli 2005 - 17:24 #26
mig der er dum... :p undskyld :)
$sql = $a." ".$b." ".$c." ".$d;
Avatar billede clausberg Nybegynder
28. juli 2005 - 17:29 #27
Æv æv... stadig den samme fejlmelding :(
Avatar billede kdjweb Nybegynder
28. juli 2005 - 17:39 #28
var sku da irriterende.. :p

<?php
if(!empty($_POST['titel'])){
  $a = "titel LIKE '%".$_POST['titel']."%' ";
}
if(!empty($_POST['kategori'])){
  $b = " kategori LIKE '%".$_POST['kategori']."%' ";
}
if(!empty($_POST['mærke'])){
  $c = " mærker LIKE '%".$_POST['mærker']."%' ";
}
if(!empty($_POST['antal'])){
  $d = " antal LIKE '%".$_POST['search']."%' ";
}

$rs = mysql_query("SELECT * FROM artikler WHERE $a or $b or $c or $d LIMIT 0, 150") or die(mysql_error());
?>
Avatar billede clausberg Nybegynder
28. juli 2005 - 17:44 #29
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'or mærker LIKE '%%%' or or antal LIKE '%%' LIMIT 0, 15
Avatar billede kdjweb Nybegynder
28. juli 2005 - 17:47 #30
hmm

<?php
if(!empty($_POST['titel'])){
  $a = "titel LIKE '%".$_POST['titel']."%' ";
} else {
  $a = ""; 
}

if(!empty($_POST['kategori'])){
  $b = " kategori LIKE '%".$_POST['kategori']."%' ";
} else {
  $b = ""; 
}

if(!empty($_POST['mærke'])){
  $c = " mærker LIKE '%".$_POST['mærker']."%' ";
} else {
  $c = ""; 
}

if(!empty($_POST['antal'])){
  $d = " antal LIKE '%".$_POST['search']."%' ";
} else {
  $d = ""; 
}

$rs = mysql_query("SELECT * FROM artikler WHERE $a or $b or $c or $d LIMIT 0, 150") or die(mysql_error());
?>
Avatar billede clausberg Nybegynder
28. juli 2005 - 17:48 #31
Øjeblik... lavede vist en fejl - tjekker lige igen
Avatar billede kdjweb Nybegynder
28. juli 2005 - 17:51 #32
okay :)
Avatar billede clausberg Nybegynder
28. juli 2005 - 22:01 #33
Alle forslag er testet igen, og jeg bliver ved med at få den samme fejlmelding :(
Avatar billede clausberg Nybegynder
04. august 2005 - 09:20 #34
jeg lukker
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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