Hier iets van een tijdje geleden:
Het script bestaat uit één pagina.
Opties:
- Keuze hoeveel resultaten per pagina
- Keuze of woord moet beginnen, moet eindigen, of het zoekwoord moet bevatten.
- Simpele layout
- Pagina nummering + Vorige & Volgende
- Zoekwoorden DIKGEDRUKT in tekst.
de Tabel:
<?php
CREATE TABLE teksten (
id smallint(11) NOT NULL auto_increment,
tekst longtext NOT NULL,
titel varchar(255) NOT NULL default '',
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT ;
?>
Opmerking (3):
Je moet een paar dingen veranderen om dit script te laten werken.
1.) Allereerst de DATABASE instellingen veranderen naar jou eigen instellingen.
<?php
$db = Array();
$db['db'] = ""; // DE DATABASE
$db['user'] = ""; // GEBRUIKERSNAAM
$db['pass'] = ""; // WACHTWOORD
$db['host'] = "localhost"; // HOST
?>
2.) Om dit script persoonlijk te maken moet je het volgende veranderen:
<?php
// VUL HIER JOUW PERSOONLIJKE INSTELLINGEN IN.
$naam = 'Google'; // MINIMAAL 6 LETTERS (NAAM DIE BOVEN DE ZOEKMACHINE KOMT)
$displaystyle = '1'; // ORIGINELE STYLE LATEN ZIEN? 1 = JA, IETS ANDERS IS NEE.
$nextpage = 'teksten.php'; // PAGINA WAAR DE LINKS VAN DE ZOEKRESULTATEN HEEN VERWIJZEN
?>
3.) In het voorbeeld heb ik gebruik gemaakt van de zogenoemde Lorem Ipsum teksten.
(http://www.lipsum.nl)
Woorden waar je het meest kans van slagen hebt op een aantal zoekresultaten zijn bijvoorbeeld: 'in', 'de' of 'non'.
Code:
//--------- zoeken.php -----------------//
<?PHP
////////////////////////////////////////////////
// Script: DBsearch
//
// Door: Pieter van Linschoten
// Datum: Zondag 11 maart 2006
// Website: www.lapidi.nl
// Tevens origineel beschikbaar: www.phphulp.nl
// Email: 'webmaster @ lapidi . nl'
// Rechten: GNU General Public Licence
// Download: www.lapidi.nl
// Voorbeeld: www.lapidi.nl // tijdelijk: www.baracasino.com/new/zoeken.php
////////////////////////////////////////////////
/* BIJBEHORENDE TABEL:
CREATE TABLE `teksten` (
id smallint(11) NOT NULL auto_increment,
tekst longtext NOT NULL,
titel varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT ;
*/
// DATABASE CONNECTION. VUL HIER JE EIGEN GEGEVENS IN!
$db = Array();
$db['db'] = ""; // DE DATABASE
$db['user'] = ""; // GEBRUIKERSNAAM
$db['pass'] = ""; // WACHTWOORD
$db['host'] = "localhost"; // HOST
if (!mysql_select_db($db['db'],mysql_connect($db['host'], $db['user'], $db['pass'])))
{
echo "Database connectie mislukt.";
exit();
}
// VUL HIER JOUW PERSOONLIJKE INSTELLINGEN IN.
$naam = 'Google'; // MINIMAAL 6 LETTERS (NAAM DIE BOVEN DE ZOEKMACHINE KOMT)
$displaystyle = '1'; // ORIGINELE STYLE LATEN ZIEN? 1 = JA, IETS ANDERS IS NEE.
$nextpage = 'teksten.php'; // PAGINA WAAR DE LINKS VAN DE ZOEKRESULTATEN HEEN VERWIJZEN
// LEUK GRAPJE IN HET SCRIPT :)
function google($var)
{
if(strlen($var) >= 6)
{
for($i=0;$i<(strlen($var)-3);$i++)
{
$digit = substr($var,$i,1);
switch($i){
case 0: $color = "#0000FF";break;
case 1: $color = "#FF0000";break;
default: $color = "#EEEE00";break;
}
$str .= "<FONT COLOR='" . $color . "'>" . $digit . "</FONT>";
}
$str .= "<FONT COLOR='#0000FF'>" . substr($var,-3,1) . "</FONT>";
$str .= "<FONT COLOR='#00FF00'>" . substr($var,-2,1) . "</FONT>";
$str .= "<FONT COLOR='#FF0000'>" . substr($var,-1,1) . "</FONT>";
$str = "<b>" . $str . "</b>";
}
return $str;
}
// DE ZOEKWOORDEN VETGEDRUKT MAKEN
function search_result($tekst,$str)
{
$replace = strrev($str);
$tekst = str_replace($str,"<b>".$replace."</b>",$tekst); // STRING OMDRAAIEN, OMDAT DEZE AND
$tekst = str_replace($replace,"<b>".$str."</b>",$tekst);
return $tekst;
}
// ORGINELE STYLE SHEET (LAYOUT)
// (DIT KAN WORDEN WEGGEHAALD ZONDER DAT HET DE WERKING VAN HET SCRIPT BEINVLOED){
if($displaystyle == '1')
{
$style = "<style>\n";
$style .= "body{\nbackground-color:#F4F4F4;\nfont-family:verdana;\nfont-size:8pt;\n}\n";
$style .= "table{\n\nbackground-color:#FFFFFF;\nfont-family:verdana;\nfont-size:8pt;\nborder-collapse: collapse;\n}\n";
$style .= "table.search{\nborder: 1px solid #000000;\n}\n";
$style .= "input,select{\nfont-family:verdana;\nfont-size:8pt;\npadding:0px;\n}\n";
$style .= "tr.header{\ncolor:#ffffff;\nbackground-color:#99CCFF;\n}\n";
$style .= "</style>";
echo $style;
}
// }
// BEGIN BEREKENING TIJD NODIG VOOR ZOEKEN
$time_start = microtime(true);
?>
<FORM METHOD=GET ACTION="zoeken.php">
<TABLE class='search'>
<TR class='header'>
<TD colspan='2' align='center'><B><?=google($naam)?>-Zoeken</B></TD>
</TR>
<TR>
<TD>Zoeken:</TD>
<TD><INPUT TYPE="text" NAME="zoek" value="<?=htmlspecialchars($_GET['zoek']);?>"> <INPUT TYPE="submit" value='zoek'></TD>
</TR>
<TR>
<TD>tekst</TD>
<TD>
<SELECT NAME="position">
<option value="middle">bevat</option>
<option value="start">begint met</option>
<option value="end">eindigd op</option>
</SELECT> zoekwoord
</TD>
</TR>
<TR>
<TD>Resultaten</TD>
<TD>
<SELECT NAME="result">
<option value="10">10 per pagina</option>
<option value="20">20 per pagina</option>
<option value="30">30 per pagina</option>
<option value="40">40 per pagina</option>
<option value="50">50 per pagina</option>
</SELECT></TD>
</TR>
</TABLE>
</FORM>
<?PHP
// KIJKEN OF ER WAARDEN ZIJN
if(!empty($_GET['zoek']) && isset($_GET['position']))
{
// CONTROLE VAN DE 'GET' WAARDEN
$_GET['zoek'] = htmlspecialchars($_GET['zoek']);
if(!is_numeric($_GET['result']) || !isset($_GET['result']))
{
$_GET['result'] = '10';
}
if(!is_numeric($_GET['start']) || !isset($_GET['result']))
{
$_GET['start'] = '0';
}
// ZOEK-BEREDENERING
switch($_GET['position'])
{
case 'start':
$opdracht = $_GET['zoek'] . '%';
$text='beginnen met de woorden <B>' . $_GET['zoek'] . '</B>';
break;
case 'end':
$opdracht = '%' . $_GET['zoek'];
$text='eindigen op de woorden <B>' . $_GET['zoek'] . '</B>';
break;
case 'middle':
$opdracht = '%' . $_GET['zoek'] . '%';
$text='de woorden <B>' . $_GET['zoek'] . '</B> bevatten';
break;
default:
$opdracht = '%' . $_GET['zoek'] . '%';
$text='de woorden <B>' . $_GET['zoek'] . '</B> bevatten';
break;
}
echo "<p>U zoekt naar teksten die " . $text . ". Er worden <B>" . $_GET['result'] . "</B> zoekresultaten per pagina weergeven</p>";
// SELECTIE VAN DE TEKSTEN UIT DE DATABASE
$sql = "SELECT * FROM teksten WHERE titel LIKE '" . $opdracht . "' OR tekst LIKE '" . $opdracht . "' ";
$aantal = mysql_num_rows(mysql_query($sql));
// GEEN RESULTATEN
if($aantal < 1)
{
echo "<p><I>Er zijn geen zoekresultaten in de database van " . google($naam) . " van teksten die " . $text . "</I></p><p>Suggestie:<br>* Zorg ervoor dat alle woorden goed gespeld zijn.<br>* Probeer andere zoektermen.<br>* Maak de zoektermen algemener.<br>* Gebruik minder zoekwoorden.</p>";
}else{
// HET RESULTAAT
// BEREKENINGEN
$pages = ceil($aantal/$_GET['result']);
//$limit = "ORDER BY titel ASC LIMIT " . $_GET['start'] . "," . ($_GET['start'] + $_GET['result']);
$limit = "ORDER BY titel ASC LIMIT " . $_GET['start'] . "," . $_GET['result'];
$res = mysql_query($sql . " " . $limit);
echo "<p>Er zijn <B>" . $aantal . "</B> zoekresultaten.</p>";
//ZOEKRESULTATEN WEERGEVEN
while($row = mysql_fetch_array($res))
{
// DE TITEL
echo "<p><A HREF='".$nextpage."?tid=" . $row['id'] . "'>".search_result($row['titel'],$_GET['zoek']) . "</a><br>";
$row['tekst'] = search_result($row['tekst'],$_GET['zoek']);
// WEERGEEF EERSTE 70 WOORDEN VAN DE TEKST
if(strlen($row['tekst']) > 70){ $dots = '..';}
echo "<i>" . substr($row['tekst'],0,70) . "</i>".$dots."<br>";
// LAATSTE 70 WOORDEN WEERGEVEN, INDIEN TEKST MEER DAN 140 TEKENS HEEFT
if(strlen($row['tekst']) > 140)
{
echo ".. <i>" . substr($row['tekst'],-70,70) . "</i>";
}
echo "</p>";
}
// VORIGE PAGINA LINK
$start = $_GET['start'] - $_GET['result'];
if($start <= 0)
{
echo "<FONT COLOR='#DBDBDB'><< Vorige</FONT> ";
}else
{
echo "<A HREF='zoeken.php?zoek=" . $_GET['zoek'] . "&position=" . $_GET['position'] . "&start=" . $start . "&result=" . $_GET['result'] . "'><< Vorige</A> ";
}
echo " <A HREF='zoeken.php?zoek=" . $_GET['zoek'] . "&position=" . $_GET['position'] . "&start=" . 0 . "&result=" . $_GET['result'] . "'>" . (1) . "</A> \n";
// PAGINA NUMMERING
for($i=1; $i<($pages);$i++)
{
$start = $_GET['result'] * $i;
echo " <A HREF='zoeken.php?zoek=" . $_GET['zoek'] . "&position=" . $_GET['position'] . "&start=" . $start . "&result=" . $_GET['result'] . "'>" . ($i+1) . "</A> \n";
}
// VOLGENDE PAGINA LIMK
$start = $_GET['result'] + $_GET['start'];
if($start >= $aantal)
{
echo " <FONT COLOR='#DBDBDB'>Volgende >></FONT>\n";
}else
{
echo " <A HREF='zoeken.php?zoek=" . $_GET['zoek'] . "&position=" . $_GET['position'] . "&start=" . $start . "&result=" . $_GET['result'] . "'>Volgende >></A>\n";
}
}
// BEREKENING VAN DE TIJD NODIG VOOR ZOEKRESULTAAT
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "<p><FONT COLOR='DBDBDB'>De " . google($naam) . " zoekmachine vond <B>" . number_format($aantal,0,'','.') . "</B> zoekresultaten in " . $time . " seconden.</FONT></p>";
}
?>
Link gekopieerd
Handig maar ik bedoel voor phphulp.nl
Link gekopieerd