Avatar billede cmau Nybegynder
09. oktober 2005 - 13:37 Der er 36 kommentarer og
1 løsning

Søgefunktion som ikke virker

Hejsa

Jeg har en lidt advanceret søgefunktion som jeg ikke kan få til at virke.

I kan prøve den på http://babesite.woox.dk/ ved at klikke på "KILK HER FOR ADVANCERET SØGNING" også prøve forskellige kombinationer. Jeg har lave så man kan se hvordan der bliver søgt, med nedenstående som standart:

  Her er sql søgningen:
SELECT * FROM freeporn_data ORDER BY id DESC LIMIT 0, 100 


Lidt af php koden som bliver brugt:

<?
include('sql.php');

if (isset($_GET["category"]) && $_GET["category"]!="") {
  $category = "WHERE category = '".$_GET["category"]."'";
} else {
  $category = " ";
}
$order = (isset($_GET['order'])) ? $_GET['order'] : "DESC";
$sort = (isset($_GET['sort'])) ? $_GET['sort'] : "id";
$from = (isset($_GET['from'])) ? $_GET['from'] : 0;
$limit = 100;

$query = mysql_query("SELECT * FROM freeporn_data $category ORDER BY $sort $order LIMIT $from, $limit") or die(mysql_error());
?>
Avatar billede jaw Nybegynder
09. oktober 2005 - 13:40 #1
Du bruger $_GET[] i dine if'er, men du sætter jo ikke nogen $_GET'er. Hvad er din method i din form? Hvis du har sat den til post, så skal det jo være $_POST og ikke $_GET.
Avatar billede cmau Nybegynder
09. oktober 2005 - 13:42 #2
<form method="GET" action="main.php" enctype="multipart/form-data">

Den er GET
Avatar billede cmau Nybegynder
09. oktober 2005 - 14:10 #3
Ingen der ved noget om det?
Avatar billede nizo Nybegynder
11. oktober 2005 - 16:29 #4
Jeg faar ingen ting ud af denne del:

$order = (isset($_GET['order'])) ? $_GET['order'] : "DESC";
$sort = (isset($_GET['sort'])) ? $_GET['sort'] : "id";
$from = (isset($_GET['from'])) ? $_GET['from'] : 0;

Forklar..
Avatar billede cmau Nybegynder
11. oktober 2005 - 20:46 #5
altså
$order = (isset($_GET['order'])) ? $_GET['order'] : "DESC";

variablen order er lig med, $_GET[order] hvis den altså findes. Hvis den ikke findes er order lig med DESC

Sådan fungerer de.
Avatar billede nizo Nybegynder
12. oktober 2005 - 12:55 #6
Har aldrig før set noget paa den maade.. Hvorfor ikke bare bruge en ganske alm. if?

ex.

if(!$_get[order]) $order="DESC";


Jeg ved ikke om dit virker, jeg har ikke set noget lign. før..
Avatar billede nizo Nybegynder
12. oktober 2005 - 13:00 #7
hmm..
Den siger SELECT * FROM freeporn_data ORDER BY LIMIT 0, 100


der mangler lige et id.. eller noget..
Avatar billede jaw Nybegynder
12. oktober 2005 - 13:02 #8
Problemet er, at du bruger GET, men da du bruger frames, så kommer de aldrig i adresselinien, og derfor kan php ikke finde dem.

Jeg ville prøve at udskifte alle GET med POST og prøve igen. Umiddelbart er der ikke noget jeg kan se der er galt.

Nizo - Det virker nu godt nok. En nemmere måde at skrive if/else på, men den giver begrænsning i, at man ikke kan bruge elseif :)
Avatar billede cmau Nybegynder
12. oktober 2005 - 13:47 #9
nizo > Hvad mener du med der mangler id?

jaw > Doh det er jo også rigtigt. Nu har jeg prøvet at ændre til POST, men der kommer stadig fejl
Avatar billede jaw Nybegynder
12. oktober 2005 - 13:55 #10
For lige at fejlsøge, kunne du så ikke trække din søgning ud af dine frames og køre den "alene" ? Jeg har tjekket dit lille script, og jeg kan ikke finde noget galt, men jeg kan godt se, at dine post's heller ikke kommer igennem rigtigt.
Avatar billede jaw Nybegynder
12. oktober 2005 - 13:55 #11
Hvis du vel og mærke har husket at ændre til post alle steder - også i dine if'er?
Avatar billede cmau Nybegynder
12. oktober 2005 - 14:04 #12
Du kan kigge her http://babesite.woox.dk/main.php det er uden framet uden om.
Avatar billede jaw Nybegynder
12. oktober 2005 - 14:06 #13
Kan du ikke paste din kode igen? Gerne det hele der har med søgningen og forms'ene at gøre...
Avatar billede cmau Nybegynder
12. oktober 2005 - 14:23 #14
Avatar billede jaw Nybegynder
12. oktober 2005 - 14:32 #15
Prøv lige:

$order = (isset($_POST['order']) && !empty($_POST['order'])) ? $_POST['order'] : "DESC";
$sort = (isset($_POST['sort']) && !empty($_POST['sort'])) ? $_POST['sort'] : "id";
$from = (isset($_POST['from']) && !empty($_POST['from'])) ? $_POST['from'] : 0;
Avatar billede cmau Nybegynder
12. oktober 2005 - 14:40 #16
hmm.. hjælp ikke meget .. http://babesite.woox.dk/main.php

Men jeg kom lige til at kigge på at det pluseligt bliver lidt vanskeligt, da jeg har glemt $type i min sql sætning.

type skal vel flettes sammen med:

if (isset($_GET["category"]) && $_GET["category"]!="") {
  $category = "WHERE category = '".$_GET["category"]."'";
} else {
  $category = " ";
}

også derefter smide her inde på en måde:

$query = mysql_query("SELECT * FROM freeporn_data $category ORDER BY $sort $order LIMIT $from, $limit") or die(mysql_error());
Avatar billede jaw Nybegynder
12. oktober 2005 - 14:44 #17
Tjoh, men din type er ikke så vigtig lige nu.

Og du har rettet det du lige pastede til $_POST, ik???

Og så skal du lige smide "asc" ind som value i din stigende/faldende, ellers duer det jo selvf. ikke. Men vi er da kommet så langt, at der nu kommer id som standard.
Avatar billede jaw Nybegynder
12. oktober 2005 - 14:45 #18
Nå nej, asc er jo sådan set default, så den kan måske forsvares :)
Avatar billede cmau Nybegynder
12. oktober 2005 - 14:50 #19
Joh det jeg skreve med category kom jeg til at kopirer fra starten af det hele, jeg har rettet det i filen. Min fejl at vise det forkterte
Avatar billede jaw Nybegynder
12. oktober 2005 - 14:56 #20
Prøv at udskrive både $_POST['category'] og $category. Når jeg prøver det her lokalt virker det egentlig fint...
Avatar billede cmau Nybegynder
12. oktober 2005 - 15:00 #21
Der må fejlen være et sted. Prøv at se http://babesite.woox.dk/main.php hvis du søger efter en kategori
Avatar billede cmau Nybegynder
12. oktober 2005 - 15:02 #22
argh :@ fandt noget fejl jeg kommer til at definere $category længere ned som noget andet.. det burde være fixet nu, så jeg tester lige de andre ting.
Avatar billede jaw Nybegynder
12. oktober 2005 - 15:03 #23
Jep, nu nærmer det sig ret kraftigt...
Avatar billede cmau Nybegynder
12. oktober 2005 - 15:04 #24
Det andert virker nu :D:D.. så skal jeg bare have smidt type ind.. prøver lige selv i første omgang.
Avatar billede cmau Nybegynder
12. oktober 2005 - 15:10 #25
Har prøvet dette:

if(isset($_POST["category"]) && $_POST["category"]!="") {
  if(isset($_POST["type"]) && $_POST["type"]!="") {
    $category = "WHERE category = '".$_POST["category"]."' AND type = '".$_POST["type"]."'";
  } else {
    $category = "WHERE category = '".$_POST["category"]."'";
  }
} else {
  $category = " ";
}

Det ser bare ikke ud til at virke :/
Avatar billede jaw Nybegynder
12. oktober 2005 - 15:12 #26
Prøv at udskrive din $category og se hvad du får.
Avatar billede cmau Nybegynder
12. oktober 2005 - 15:15 #27
Gør jeg hvis du prøver http://babesite.woox.dk/main.php
Avatar billede jaw Nybegynder
12. oktober 2005 - 15:17 #28
Har jeg prøvet, og det virker til dels, men ikke hvis du kun udfylder type og ikke category. Jeg ville nok bevæge mig ud i noget i stil med:
Men jeg ville måske nok gøre:
$categori = " WHERE ";
if( (isset($_POST['category']) && !empty($_POST['category'])) && (!isset($_POST['type']) || empty($_POST['type'])) ) {
  $category .= "category = '".$_POST['category']."'";
} elseif( (isset($_POST['type']) && !empty($_POST['type'])) && (!isset($_POST['category']) || empty($_POST['category'])) ) {
  $category .= "type = '".$_POST['type']."'";
} else {
  $category .= "category = '".$_POST['category']."' AND type = '".$_POST['type']."'";
}
Avatar billede cmau Nybegynder
12. oktober 2005 - 15:17 #29
$type bliver bare til ingenting hvis man vælger type.. men det må vel være fordi man også skal vælge $category !? :S
Avatar billede cmau Nybegynder
12. oktober 2005 - 15:18 #30
Hmm kan slet ikke finde rundt i den koder du lige har skrevet, vil du evt. prøve at forklare inden jeg prøver den?
Avatar billede jaw Nybegynder
12. oktober 2005 - 15:20 #31
Tjah, tjoh. Første del aktiveres hvis kun category er udfuldt. Anden del hvis kun type er udfuldt, og sidste del hvis de begge er udfyldt. (Eller det var i hvert fald tanken bag, har ikke testet den :)
Avatar billede cmau Nybegynder
12. oktober 2005 - 15:28 #32
Min computer giver:
Notice: Undefined index: type in c:\programmer\php\www\babesite\main.php on line 10


Nettet giver:
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 '= '' AND type = '' ORDER BY id DESC LIMIT 0, 100' at line 1


Ved begge af ovenstående har jeg ikke foretaget nogen søgning.
Avatar billede jaw Nybegynder
12. oktober 2005 - 15:33 #33
Ja ok, sagde jo den ikke var testet. Men nu er den:

if( (isset($_POST['category']) && !empty($_POST['category'])) && (!isset($_POST['type']) || empty($_POST['type'])) ) {
  $category = "WHERE category = '".$_POST['category']."'";
} elseif( (isset($_POST['type']) && !empty($_POST['type'])) && (!isset($_POST['category']) || empty($_POST['category'])) ) {
  $category = "WHERE type = '".$_POST['type']."'";
} elseif( (isset($_POST['type']) && !empty($_POST['type'])) && (isset($_POST['category']) && !empty($_POST['category'])) ) {
  $category = "WHERE category = '".$_POST['category']."' AND type = '".$_POST['type']."'";
} else {
    $category = "";
}
Avatar billede cmau Nybegynder
12. oktober 2005 - 15:36 #34
Nu ser det i hvert fald ud til at virke, smider du et svar?.. Så må jeg oprette et nyt spørgsmål hvis jeg finder en fejl en anden gang.
Avatar billede jaw Nybegynder
12. oktober 2005 - 15:38 #35
Hvis du finder en fejl, kan du jo også bare skrive her, lidt afhængig hvad det er selvf.
Avatar billede cmau Nybegynder
12. oktober 2005 - 15:39 #36
Ja okay ;)

MEn tusind tak i hvert fald.
Avatar billede jaw Nybegynder
12. oktober 2005 - 15:41 #37
Selv tak :)
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