preg_match_all()
Code (php)
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
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
<?php
if(isset($_GET['q'])){
$q = $_GET['q'];
$q = xssfilter_all($q);
$zoekwoorden = preg_split("/ /", $q);
foreach($zoekwoorden AS $zoekwoord){
echo $zoekwoord . '<br>';
$sql = "SELECT * FROM berichten";
$resultaat = mysql_query($sql,$conn) or die(mysql_error());
$i = 0;
while($rij = mysql_fetch_assoc($resultaat)){
$tekst = $rij['tekst'];
$matches = array();
preg_match_all("/(.+?)$zoekwoord(.+?)/", $tekst, $matches[]);
if(preg_match("/\b$zoekwoord\b/i", $tekst)){
echo 'String found';
}
foreach($matches AS $match){
echo $match.'<br>';
}
}
echo '<br>';
}
}
?>
if(isset($_GET['q'])){
$q = $_GET['q'];
$q = xssfilter_all($q);
$zoekwoorden = preg_split("/ /", $q);
foreach($zoekwoorden AS $zoekwoord){
echo $zoekwoord . '<br>';
$sql = "SELECT * FROM berichten";
$resultaat = mysql_query($sql,$conn) or die(mysql_error());
$i = 0;
while($rij = mysql_fetch_assoc($resultaat)){
$tekst = $rij['tekst'];
$matches = array();
preg_match_all("/(.+?)$zoekwoord(.+?)/", $tekst, $matches[]);
if(preg_match("/\b$zoekwoord\b/i", $tekst)){
echo 'String found';
}
foreach($matches AS $match){
echo $match.'<br>';
}
}
echo '<br>';
}
}
?>
In $matches zitten de matches zelf, dus count($matches) geeft het aantal matches weer.
Code (php)
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
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
<?php
if(isset($_GET['q'])){
$q = $_GET['q'];
$q = xssfilter_all($q);
$zoekwoorden = preg_split("/ /", $q);
foreach($zoekwoorden AS $zoekwoord){
echo $zoekwoord . '<br>';
$sql = "SELECT * FROM berichten";
$resultaat = mysql_query($sql,$conn) or die(mysql_error());
while($rij = mysql_fetch_assoc($resultaat)){
$tekst = $rij['tekst'];
if(preg_match("/\b$zoekwoord\b/is", $tekst)){
echo 'String found - ';
}
else{echo 'String not fount - ';}
if(preg_match_all("/\b$zoekwoord\b/is", $tekst, $matches)){
echo '2nd String fount - ';
echo 'Matches: '.count($matches).'x<br>';
}
else{echo '2nd String not fount - <br>';}
}
echo '<br>';
}
}
?>
if(isset($_GET['q'])){
$q = $_GET['q'];
$q = xssfilter_all($q);
$zoekwoorden = preg_split("/ /", $q);
foreach($zoekwoorden AS $zoekwoord){
echo $zoekwoord . '<br>';
$sql = "SELECT * FROM berichten";
$resultaat = mysql_query($sql,$conn) or die(mysql_error());
while($rij = mysql_fetch_assoc($resultaat)){
$tekst = $rij['tekst'];
if(preg_match("/\b$zoekwoord\b/is", $tekst)){
echo 'String found - ';
}
else{echo 'String not fount - ';}
if(preg_match_all("/\b$zoekwoord\b/is", $tekst, $matches)){
echo '2nd String fount - ';
echo 'Matches: '.count($matches).'x<br>';
}
else{echo '2nd String not fount - <br>';}
}
echo '<br>';
}
}
?>
Zoekfunctie
Maak gebruik van FULLTEXT en dan laat MySQL de rest doen.
Voorbeeld:
Maak gebruik van FULLTEXT en dan laat MySQL de rest doen.
Voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if(isset($_POST['Search'])){
$result = mysql_query("SELECT *, MATCH (title,content) AGAINST ('".$_POST['termen']."') AS score FROM ".$db_tbl." WHERE MATCH(title,content) AGAINST ('".$_POST['termen']."' IN BOOLEAN MODE) ORDER BY score DESC") or die(mysql_error());
$count = mysql_num_rows( $result );
if($count == 0){
echo "<p>Geen zoekresultaten gevonden met de zoektermen: ".stripslashes($_POST['termen'])."<br />";
echo "Het kan zijn dat u specifieker moet zoeken.</p><br />";
}else{
echo "<p>U heeft gezocht met de zoektermen: ".stripslashes($_POST['termen'])."</p>";
echo "<p><b>".$count." match(es) gevonden</b></p><br />";
while($row = mysql_fetch_array($result)){
echo "<p>".$row['title'].": ".substr($row['content'], 0, 150)."...<br />
Relevantie: ".number_format(($row['score']*100),2)."%</p><hr />";
}
}
?>
if(isset($_POST['Search'])){
$result = mysql_query("SELECT *, MATCH (title,content) AGAINST ('".$_POST['termen']."') AS score FROM ".$db_tbl." WHERE MATCH(title,content) AGAINST ('".$_POST['termen']."' IN BOOLEAN MODE) ORDER BY score DESC") or die(mysql_error());
$count = mysql_num_rows( $result );
if($count == 0){
echo "<p>Geen zoekresultaten gevonden met de zoektermen: ".stripslashes($_POST['termen'])."<br />";
echo "Het kan zijn dat u specifieker moet zoeken.</p><br />";
}else{
echo "<p>U heeft gezocht met de zoektermen: ".stripslashes($_POST['termen'])."</p>";
echo "<p><b>".$count." match(es) gevonden</b></p><br />";
while($row = mysql_fetch_array($result)){
echo "<p>".$row['title'].": ".substr($row['content'], 0, 150)."...<br />
Relevantie: ".number_format(($row['score']*100),2)."%</p><hr />";
}
}
?>
Quote:
These assertions may not appear in character classes (but note that "\b" has a different meaning, namely the backspace character, inside a character class).
Maar kun je niet dit doen:
edit:
@GaMer13: Helemaal mee eensch
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
Volgens mij maakt preg_match_all een array aan voor elk type match dat hij vind, en waarschijnlijk moet je echo sizeof($matches[0]) doen, maar dat zie je wel wanneer je print_r($matches) doet
En je zou eventueel ook een substr_count() kunnen doen op je zoekwoord.
Gewijzigd op 01/01/1970 01:00:00 door Baarr
Ik heb in phpmyadmin de velden titel en tekst aangemaakt met FULLTEXT
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$sql = "SELECT *, MATCH (titel,tekst) AGAINST ('".$zoekwoorden."') AS score FROM berichten WHERE MATCH(titel,tekst) AGAINST ('".$zoekwoorden."' IN BOOLEAN MODE) ORDER BY score DESC";
$resultaat = mysql_query($sql, $conn) or die(mysql_error());
$count = mysql_num_rows($resultaat);
?>
$sql = "SELECT *, MATCH (titel,tekst) AGAINST ('".$zoekwoorden."') AS score FROM berichten WHERE MATCH(titel,tekst) AGAINST ('".$zoekwoorden."' IN BOOLEAN MODE) ORDER BY score DESC";
$resultaat = mysql_query($sql, $conn) or die(mysql_error());
$count = mysql_num_rows($resultaat);
?>
Misschien is je tabel geen MyISAM, want: "Wat je nodig hebt is een MyISAM tabel met een FULLTEXT index op één of meer velden."
die staat aan
edit:
Sleutel naam Type Kardinaliteit Actie Veld
PRIMARY PRIMARY 191 id
tekst FULLTEXT 1 tekst
titel FULLTEXT 1 titel
Gewijzigd op 01/01/1970 01:00:00 door Guido van C
bump;