Meerdere zoektermenZoekmachine voor database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Joep Kleinmeulman

Joep Kleinmeulman

10/11/2010 20:04:29
Quote Anchor link
Hallo,

Ik ben bezig met een zoekmachine die gegevens uit een tabel (MySQL) haalt. Opzich werkt dit al wel, alleen als ik 2 zoektermen invul krijg ik meer resultaten ipv minder..
Ik heb eigenlijk nauwelijks php ervaring (alleen een beetje C) dus ik loop al snel vast. Maar wat ik dus tracht te krijgen is wanneer ik meerdere zoektermen invul ik alleen resultaten krijg die aan beide zoektermen voldoen.

Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?
    //Maak verbinding met database
$host = "localhost";
$user = "xxxxxxx";
$pass = "xxxxxxx";
$database = "xxxxxxxxx";
$table = "xxxxxxxx";

mysql_connect($host, $user, $pass) or die (mysql_error());
mysql_select_db($database) or die (mysql_error());

 
$sql = "SELECT id,tekst,plaats,provincie,soort,link FROM $table WHERE MATCH(tekst,plaats,provincie,soort) AGAINST('%$_POST[zoekterm]%' IN BOOLEAN MODE)";


$res = mysql_query($sql) or die(mysql_error());
    

    if (mysql_num_rows($res) >= 1)
    {

        while ($row = mysql_fetch_array($res))
        {

  echo "
  <b><p>
  $row[tekst]<br></b>
  $row[plaats]<br>
  $row[provincie]<br>
  $row[soort]<br>
  <a href='http://$row[link]'>Website</a><br>
  </p>"
;
      }

        
        echo "<a href=\"zoek.php\" title=\"zoek opnieuw\">zoek opnieuw</a>";
    }


    else
    {
       echo "<p>Er is niets gevonden op jou zoekterm:<b> $HTTP_POST_VARS[zoekterm]</b></p>";
        
       echo "<p><a href=\"zoek.php\" title=\"zoek opnieuw\">zoek opnieuw</a></p>";
    }

?>


Alvast Bedankt!

Joep
Gewijzigd op 10/11/2010 20:21:08 door Joep Kleinmeulman
 
PHP hulp

PHP hulp

26/01/2025 02:05:29
 
Noppes Homeland

Noppes Homeland

10/11/2010 20:20:02
Quote Anchor link
Quote:
Opzich werkt dit al wel, alleen als ik 2 zoektermen invul krijg ik meer resultaten ipv minder..


ja en dat is toch in het algemeen altijd zo?

--------------
En nu de bagger van je script:
- or die() is geen correcte foutafhandeling, als er iets fout gaat mag het script niet stoppen maar moet de vervolg code volgens een bepaalde defualt doorlopen kunnen worden!
- _fetch_array is niet optimaal in gebruik zonder 2de parameter, gebruik gewoon _fetch_assoc
- ik zie totaal geen post afhandeling / contoreles en validaties
- sql injectie
- de manier van quote staat me ook tegen, ga strings een quoten met enkele quotes en dan wordt je al gedwongen de variabelen naar buiten te halen
- er is ook geen foutafhandeling indien de queries mislukken
 
Joep Kleinmeulman

Joep Kleinmeulman

10/11/2010 20:36:26
Quote Anchor link
Noppes Homeland op 10/11/2010 20:20:02:
Quote:
Opzich werkt dit al wel, alleen als ik 2 zoektermen invul krijg ik meer resultaten ipv minder..


ja en dat is toch in het algemeen altijd zo?

--------------
En nu de bagger van je script:
- or die() is geen correcte foutafhandeling, als er iets fout gaat mag het script niet stoppen maar moet de vervolg code volgens een bepaalde defualt doorlopen kunnen worden!
- _fetch_array is niet optimaal in gebruik zonder 2de parameter, gebruik gewoon _fetch_assoc
- ik zie totaal geen post afhandeling / contoreles en validaties
- sql injectie
- de manier van quote staat me ook tegen, ga strings een quoten met enkele quotes en dan wordt je al gedwongen de variabelen naar buiten te halen
- er is ook geen foutafhandeling indien de queries mislukken


Bedankt voor de tips ik zal er aan werken!

Maar dan moet ik mijn vraag anders stellen; hoe krijg ik het voor elkaar om ervoor te zorgen dat er alleen resultaten weergegeven worden die aan alle (mooier misschien zelfs; minstens 2) zoektermen voldoet.

Joep
 
Noppes Homeland

Noppes Homeland

10/11/2010 20:45:40
Quote Anchor link
exact zoeken op de velden waarbij dit kan en dat kan je realiseren door je form anders op te zetten
 
Justin S

Justin S

10/11/2010 23:20:02
Quote Anchor link
Je zou kunnen explode() op een spatie, en elk woord in een afzonderlijke query behandelen en deze in één keer verwerken (kijk eens naar PDO exec()) en ook een keer op de hele string.
 
Joep Kleinmeulman

Joep Kleinmeulman

11/11/2010 19:37:15
Quote Anchor link
Ik heb nu een ander formulier gemaakt waarbij er dus 2 zoektermen zijn, maar nu vraag ik me af of dit kan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
  $presql
= "SELECT id, tekst, plaats, provincie, soort, link FROM $table WHERE
  MATCH(tekst, soort)
  AGAINST('%$_POST[zoekterm_wat]%' IN BOOLEAN MODE)"
;

  $sql = "SELECT id, tekst, plaats, provincie, soort, link FROM $presql WHERE
  MATCH(plaats,provincie) AGAINST('%$_POST[zoekterm_waar]%' IN BOOLEAN MODE)"
;

  $res = mysql_query($sql) or die(mysql_error()); etc...
?>


Ik krijg wel een error, dus ik vrees ervoor.

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 'SELECT id,tekst,plaats,provincie,soort,link FROM TABLE1 WHERE MATCH(tekst, soo' at line 1
Gewijzigd op 11/11/2010 19:44:00 door Joep Kleinmeulman
 
- Ariën  -
Beheerder

- Ariën -

11/11/2010 19:38:48
Quote Anchor link
Jammer dat je die niet deelt met ons?
 
Tobias Tobias

Tobias Tobias

11/11/2010 20:22:30
Quote Anchor link
Code zoals ik hem in mijn zoekmachine heb zitten (versie zonder post-check, foutafhandeling etc
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
$split = split(" ",$_POST['zoekterm']);
$sql = "SELECT * FROM tabel WHERE (";
$a = '%';
$tekst = " gevonden voor de woorden: ";
while(list($key,$val)=each($split))
{
    if($val<>" " and strlen($val) > 0)
    {
        $sql .= "(`kolom_van_de_tabel` LIKE '".$a.$val.$a."') AND";
    }
}
$sql=substr($sql,0,(strLen($sql)-4));// this will eat the last AND
$sql .= ")";
 
Joep Kleinmeulman

Joep Kleinmeulman

12/11/2010 14:05:55
Quote Anchor link
Ik heb nu dit en nog steeds krijg ik een error...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?  

  $presql
= "SELECT id, tekst, plaats, provincie, soort, link FROM $table WHERE
  MATCH(tekst, soort)
  AGAINST('%$_POST[zoekterm_wat]%' IN BOOLEAN MODE)"
;

  $preres = mysql_query($presql) or die(mysql_error());

  $sql = "SELECT id, tekst, plaats, provincie, soort, link FROM $preres WHERE
  MATCH(plaats,provincie)
  AGAINST('%$_POST[zoekterm_waar]%' IN BOOLEAN MODE)"
;

  $res = mysql_query($sql) or die(mysql_error());

?>


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 'MATCH(plaats) AGAINST('%apeldoorn%' IN BOOLEAN MODE)' at line 2
 
Teun Hesseling

Teun Hesseling

12/11/2010 14:13:24
Quote Anchor link
blijkbaar heb je ook niks geleerd van noppes.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
AGAINST('%$_POST[zoekterm_waar]%' IN BOOLEAN MODE)";
AGAINST('"
.%$_POST[zoekterm_waar]%."' IN BOOLEAN MODE)";
?>

plus tis zo lek als een zeef
Gewijzigd op 12/11/2010 14:13:47 door Teun Hesseling
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.