Avatar billede tlunde Nybegynder
12. oktober 2005 - 14:32 Der er 22 kommentarer og
2 løsninger

Hjælp til søgefunktion?

Hejsa,
Jeg sidder og har gang i at skulle lave en søgefunktion til en stor side, som skal søge på annoncer.

Jeg skal have 3 ting til at indgå i søgningen: hovedkategori (dropdown), postnr (dropdown) og en fritekstsøgning.

Jeg har lavet hovedkategori søgningen og fritekstsøgningen, men lige nu er de udafhængige af hinanden, og jeg vil gerne have, at de kommer til at fungere som 1 søgning, hvordan får jeg dem koblet sammen?

Min kode til dem ser sådan her ud nu:
Hovedkategorisøgning:
-----
<form action="forside.php" method="get">
                <div align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Søgning:<br />

<select name="seek1">
<option value=''>Intet valg</option>";
<option value='Sorg'>Sorg</option>";
<option value='Familieproblemer'>Familieproblemer</option>";
<option value='Sygdom'>Sygdom</option>";
<option value='Misbrugsproblemer'>Misbrugsproblemer</option>";
<option value='Psykiske lidelser'>Psykiske lidelser</option>";
<option value='Pårørende til syge'>Pårørende til syge</option>";
<option value='Fødsel og børn'>Fødsel og børn</option>";
<option value='Ensomhed'>Ensomhed</option>";
<option value='Arbejdsproblemer'>Arbejdsproblemer</option>";
<option value='Andet'>Andet</option>";
</select>
                </font> <font face="Verdana, Arial, Helvetica, sans-serif" size="1">
                  <input type="submit" name="soeg" value="S&oslash;g" />
                </font></div>
                <font face="Verdana, Arial, Helvetica, sans-serif" size="1">
                <?
if ($seek1) {

db_con();

$dato = time();

$sql = mysql_query("select * from annoncer WHERE aktiv='ja' AND dato_slut > '$dato' AND hovedkategori like '%$seek1%'");
$number = mysql_num_rows($sql);
print  "Din s&oslash;gning p&aring;: <b>$seek1</b> gav $number resultat(er)";

while ($row = mysql_fetch_array($sql)) {
print "<li><a href=http://www.selvhjaelp.dk/for_organisationer/annoncer/annoncer_vis.php?id=$row[id]>$row[overskrift]</a></li>";
}
} elseif ($soeg) {
print "Du skal vælge noget i dropdown!";
} else {
}
?>
</form>
-----

Fritekstsøgning:
-----
<form action="soeg/index.php" method="get">
                <div align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">S&oslash;gning:<br />
                    <input name="seek" type="text" size="40" />
                    <input type="submit" name="sog" value="S&oslash;g" />
                </font> </div>
            </form>
                <p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
                  <?
if ($seek) {

db_con();

$dato_nu = time();

$sql = mysql_query("select * from annoncer WHERE aktiv='ja' AND dato_slut > '$dato_nu' AND (overskrift like '%$seek%' OR beskrivelse like '%$seek%' OR hovedkategori like '%$seek%' OR underkategori like '%$seek%')");
$number = mysql_num_rows($sql);
print  "Din s&oslash;gning p&aring;: <b>$seek</b> gav $number resultat(er)";

while ($row = mysql_fetch_array($sql)) {
print "<li><a href=http://www.selvhjaelp.dk/for_organisationer/annoncer/annoncer_vis.php?id=$row[id]>$row[overskrift]</a></li>";
}
} elseif ($sog) {
print "Du skrev ikke noget s&oslash;geord!!";
} else {
}
?>
-----

Nogen der har mod på at hjælpe mig her??
Avatar billede nizo Nybegynder
12. oktober 2005 - 15:51 #1
Saa vidt jeg husker kan du ikke bruge mere end én AND/OR i hver SQL streng..

Men hvad er problemet? Din kode ser ok ud, bortset fra det overstaaende.
Avatar billede horsmark Nybegynder
12. oktober 2005 - 16:39 #2
nizo jow da det kan man godt :-)
$sql =
"
  select * from
    annoncer
  WHERE
    aktiv='ja' AND
    dato_slut > '$dato_nu' AND
    (overskrift like '%".$seek."%' OR
    beskrivelse like '%".$seek."%' OR
    hovedkategori like '".%$seek."%' OR
    underkategori like '".%$seek."%')
";
er ok men måske du burde printe din sql ud

print $sql;
exit;
Avatar billede horsmark Nybegynder
12. oktober 2005 - 16:40 #3
$sql =
"
  select * from
    annoncer
  WHERE
    aktiv='ja' AND
    dato_slut > '$dato_nu' AND
    (overskrift like '%".$seek."%' OR
    beskrivelse like '%".$seek."%' OR
    hovedkategori like '%".$seek."%' OR
    underkategori like '%".$seek."%')
";
Avatar billede nizo Nybegynder
12. oktober 2005 - 22:36 #4
hmm.. synes bare aldrig det virker for mig med mere end én..
Avatar billede horsmark Nybegynder
13. oktober 2005 - 08:08 #5
Måske er UNION løsningen (istedet for = bruges LIKE )? http://dev.mysql.com/doc/refman/5.0/en/searching-on-two-keys.html
Avatar billede horsmark Nybegynder
13. oktober 2005 - 08:28 #6
nizo ...har søgt lidt på det.

For at slå fast at 2 like statements må forekomme læs denne (gå til UNION Joins delen):
http://www.keithjbrown.co.uk/vworks/mysql/mysql_p8.shtml
Avatar billede horsmark Nybegynder
13. oktober 2005 - 08:30 #7
Tlunde hvad er problemet så egentligt :-) ?
Avatar billede tlunde Nybegynder
13. oktober 2005 - 19:47 #8
de 2 søgeformer jeg har listet i min første post virker som de skal, men det jeg vil gerne vil, er at kombinere dem, sådan at begge 2 indgår i samme søgning. Dette er hvad jeg forsøger at få til at virke i første omgang, derefter skal jeg havde fundet ud af at have koblet endnu en dropdown på, så jeg også kan komme til at søge på post numre.

Men igen, jeg vil gerne have de 2 første søgninger sat sammen, så de indgår i samme søgning...
Avatar billede tlunde Nybegynder
14. oktober 2005 - 11:40 #9
Er det noget i har tid til at hjælpe med, for det er virkelig er problem jeg ik lige kan finde ud af, og ik ved hvordan jeg skal komme videre med...
Avatar billede horsmark Nybegynder
15. oktober 2005 - 07:59 #10
jamen det giver jo ingen mening at slå de to søgninger samen da anden søgning vil begrænse/indskrænke din først søgning og dermed give forkert count/resultat ???
Avatar billede horsmark Nybegynder
15. oktober 2005 - 08:04 #11
(måske har jeg bare misforstået..)

Det du vil er at slå dem sammen æ å :-) godt så hvad så med at lave én side hvor du både kan vælge kategori og /eller fritekst på alle kollonner ?

1. Hvis kategoridropdown er valgt = søg på kategori
2. Hvis fritekst valgt søg på alle kollonner med fritekst
3. Hvis både kategori og fritekst er valgt søg på den enkelte kategori HVOR der er minimum én match på de andre kollonner fra fritekstfeltet ?

Er det ikke det du vil ?
Avatar billede horsmark Nybegynder
15. oktober 2005 - 08:16 #12
alá
------------------------------------
search_form.php
------------------------------------
<form action="search.php" method="post">
<select name="category">
  <option value=''>Intet valg</option>
  <option value='Sorg'>Sorg</option>
  <option value='Familieproblemer'>Familieproblemer</option>
  <option value='Sygdom'>Sygdom</option>
  <option value='Misbrugsproblemer'>Misbrugsproblemer</option>
  <option value='Psykiske lidelser'>Psykiske lidelser</option>
  <option value='Pårørende til syge'>Pårørende til syge</option>
  <option value='Fødsel og børn'>Fødsel og børn</option>
  <option value='Ensomhed'>Ensomhed</option>
  <option value='Arbejdsproblemer'>Arbejdsproblemer</option>
  <option value='Andet'>Andet</option>
</select>
<input type="text" name="zip">
<input type="text" name="longtext">
<input type="submit" value="send">
</form>

------------------------------------
search.php
------------------------------------
$sCategory = $_POST['category'];
$sZip = $_POST['zip'];
$sLongtext = $_POST['longtext'];

$dato_nu = time();
$sql = "SELECT * FROM annoncer WHERE aktiv='ja' AND dato_slut > '".$dato_nu."' ";

if( $sCategory ) $sql .= " AND hovedkategori like '%".$sCategory ."%'";
if( $sZip ) $sql .= " AND zip like '%".$sZip ."%'";
if( $sLongtext ) $sql .= " AND  (overskrift like '%".$seek."%' OR
    beskrivelse like '%".$seek."%' OR
    hovedkategori like '%".$seek."%' OR
    underkategori like '%".$seek."%')";

...run SQL ... osv
Avatar billede horsmark Nybegynder
15. oktober 2005 - 08:17 #13
her udbygger jeg sql´et alt feter hvad der er posted... jo mere der er postede jo flere søgekriterier hæftes på sql´et... tror der er løsningen for dig :-) (håbehåbe)
Avatar billede tlunde Nybegynder
15. oktober 2005 - 08:26 #14
Horsmark:
Det jeg gerne vil, er at kunne bruge både dropdown og fritekst som kriterier i samme søgning. Og som du siger, skal de også kunne søge individuelt, hvis man kun vælger at benytte den ene af søgemulighederne...
Avatar billede tlunde Nybegynder
15. oktober 2005 - 08:29 #15
Hvad er det for noget SQL der skal køres der til aller sidst? Er det bare der hvor den hiver de data ud der passer med de valgte søgekriterier?
Avatar billede tlunde Nybegynder
15. oktober 2005 - 08:36 #16
Har lige prøvet at smide det i en fil, og prøve at printe resultaterne ud, men det virker ikke helt?? Her  er koden som den ser ud nu:

<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
<form action="search.php" method="post">
<select name="category">
  <option value=''>Intet valg</option>
  <option value='Sorg'>Sorg</option>
  <option value='Familieproblemer'>Familieproblemer</option>
  <option value='Sygdom'>Sygdom</option>
  <option value='Misbrugsproblemer'>Misbrugsproblemer</option>
  <option value='Psykiske lidelser'>Psykiske lidelser</option>
  <option value='Pårørende til syge'>Pårørende til syge</option>
  <option value='Fødsel og børn'>Fødsel og børn</option>
  <option value='Ensomhed'>Ensomhed</option>
  <option value='Arbejdsproblemer'>Arbejdsproblemer</option>
  <option value='Andet'>Andet</option>
</select>
<input type="text" name="zip">
<input type="text" name="longtext">
<input type="submit" value="send">
</form>

<?
$sCategory = $_POST['category'];
$sZip = $_POST['zip'];
$sLongtext = $_POST['longtext'];

$dato_nu = time();
$sql = "SELECT * FROM annoncer WHERE aktiv='ja' AND dato_slut > '".$dato_nu."' ";

if( $sCategory ) $sql .= " AND hovedkategori like '%".$sCategory ."%'";
if( $sZip ) $sql .= " AND zip like '%".$sZip ."%'";
if( $sLongtext ) $sql .= " AND  (overskrift like '%".$seek."%' OR
    beskrivelse like '%".$seek."%' OR
    hovedkategori like '%".$seek."%' OR
    underkategori like '%".$seek."%')";

$number = mysql_num_rows($sql);
print  "Din s&oslash;gning p&aring;: <b>$seek1</b> gav $number resultat(er)";

while ($row = mysql_fetch_array($sql)) {
print "<li>$row[overskrift]</li>";
}

?>
</BODY>
</HTML>

og et link til filen: www.selvhjaelp.dk/search.php
Avatar billede horsmark Nybegynder
15. oktober 2005 - 08:41 #17
du skal lige have en $sql = mysql_query($sql) or die( mysql_error() ); før denne linie
$number = mysql_num_rows($sql);

;-)
Avatar billede tlunde Nybegynder
15. oktober 2005 - 09:21 #18
Sådan, nu fik jeg smidt den linie ind, og havde også glemt at smide nogle databaseoplysninger ind, er også gjort...

Men den fungere stadig ik helt optimalt, prøv den...
Avatar billede horsmark Nybegynder
15. oktober 2005 - 09:46 #19
zip kollonnen er hedde det du kalder postnummer
Avatar billede horsmark Nybegynder
15. oktober 2005 - 09:48 #20
og lav lige en print $sql ligeså så du er sikker på at det der sendes afsted imod db´en er korrekt
Avatar billede tlunde Nybegynder
15. oktober 2005 - 10:17 #21
Når jeg laver print "$sql"; skriver den Resource id #4, hvad betyder det?
Og jeg forstår ik, hvorfor den som standard når jeg går ind på www.selvhjaelp.dk/search.php, skriver noget ud, det skal den vel ik??

Min kode ser sådan her ud nu:

<?
include("config.php");
?>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
<form action="search.php" method="post">
<select name="category">
  <option value=''>Intet valg</option>
  <option value='Sorg'>Sorg</option>
  <option value='Familieproblemer'>Familieproblemer</option>
  <option value='Sygdom'>Sygdom</option>
  <option value='Misbrugsproblemer'>Misbrugsproblemer</option>
  <option value='Psykiske lidelser'>Psykiske lidelser</option>
  <option value='Pårørende til syge'>Pårørende til syge</option>
  <option value='Fødsel og børn'>Fødsel og børn</option>
  <option value='Ensomhed'>Ensomhed</option>
  <option value='Arbejdsproblemer'>Arbejdsproblemer</option>
  <option value='Andet'>Andet</option>
</select>
<input type="text" name="postnr">
<input type="text" name="longtext">
<input type="submit" value="send">
</form>

<?
$sCategory = $_POST['category'];
$sZip = $_POST['postnr'];
$sLongtext = $_POST['longtext'];

$dato_nu = time();

db_con();
$sql = "SELECT * FROM annoncer WHERE aktiv='ja' AND dato_slut > '".$dato_nu."' ";

if( $sCategory ) $sql .= " AND hovedkategori like '%".$sCategory ."%'";
if( $sZip ) $sql .= " AND postnr like '%".$sZip ."%'";
if( $sLongtext ) $sql .= " AND  (overskrift like '%".$seek."%' OR
    beskrivelse like '%".$seek."%' OR
    hovedkategori like '%".$seek."%' OR
    underkategori like '%".$seek."%')";
$sql = mysql_query($sql) or die( mysql_error() );
print "SQL udskrivning: $sql<br><br>";

$number = mysql_num_rows($sql);
print  "Din s&oslash;gning p&aring;: <b>$seek1</b> gav $number resultat(er)";

while ($row = mysql_fetch_array($sql)) {
print "<li>$row[overskrift]</li>";
}

?>
</BODY>
</HTML>
Avatar billede tlunde Nybegynder
15. oktober 2005 - 10:18 #22
Har ændret de steder hvor der zip til postnr, det er hvad kolonnen hedder i databasen...
Avatar billede tlunde Nybegynder
17. oktober 2005 - 09:29 #23
Har du tid og lyst til at hjælpe mig færdig?? Står virkelig og skal bruge den søgefunktion...
Avatar billede horsmark Nybegynder
19. oktober 2005 - 14:54 #24
...super thx for poijnts :-)

(håber det kom til at virke som du behøvede)
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