M
Mr. Snoot
Gast
Hio,
ich bastel mal wieder an meinem Suchscript und will, dass man selbst wählen kann, wieviele Treffer pro Seite angezeigt werden.
Bisher wurde die Trefferanzahl von mir über eine eingebundene Datei vorgegeben, dass sah einfach so aus
Jetzt habe ich auf der Suchmaske eine Dropdownliste wo man eben wählt, wieviele Treffer man pro Seite haben möchte
Und jetzt wird einfach proseite übergeben
Wenn man aber auf die nächste Seite blättert, fehlt die Variable (Warning: Division by zero in .../suche.php on line 385 / weil durch die Anzahl an Treffern pro Seite geteilt werden muss um zu berechnen, wieviele Trefferseiten angezeigt werden).
Ich hatte ja schonmal ein ähnliches Problem, wo die Variable verloren ging, das wurde dadurch behoben, dass an den Link beim Weiterblättern (ab Zeile 375 # Anzeige der Blätterfunktion) die Variable noch angehängt werden musste.
Im jetzigen Fall wird $nps aber schon im Link berücksichtigt, deswegen weiß ich nicht, was da jetzt der Fehler ist.
Das komplette Script sieht so aus (hinzugefügt habe ich lediglich Zeile 75, entscheidend dürfte der letzte Teil ab Zeile 375 sein)
Kann mir jemand weiterhelfen?
ich bastel mal wieder an meinem Suchscript und will, dass man selbst wählen kann, wieviele Treffer pro Seite angezeigt werden.
Bisher wurde die Trefferanzahl von mir über eine eingebundene Datei vorgegeben, dass sah einfach so aus
PHP:
$nps = 10;
HTML:
<select name="proseite">
<option5</option>
<option>10</option>
...
</select>
PHP:
$nps = $_POST['proseite'];
Ich hatte ja schonmal ein ähnliches Problem, wo die Variable verloren ging, das wurde dadurch behoben, dass an den Link beim Weiterblättern (ab Zeile 375 # Anzeige der Blätterfunktion) die Variable noch angehängt werden musste.
Im jetzigen Fall wird $nps aber schon im Link berücksichtigt, deswegen weiß ich nicht, was da jetzt der Fehler ist.
Das komplette Script sieht so aus (hinzugefügt habe ich lediglich Zeile 75, entscheidend dürfte der letzte Teil ab Zeile 375 sein)
PHP:
<?php
if((($_POST["Lexikon"] == "on") AND ($_POST["Kapitel"] == "on")) OR ($_GET["bereich"]=="komplett"))
{
$logfile = "./search_log.txt"; //Pfadangabe zu Logdatei
$datenfile = "./search_data.txt"; //Pfadangabe zur Datendatei
$bereich = "komplett";
}
elseif(($_POST["Lexikon"] == "on") OR ($_GET["bereich"] == "lexikon"))
{
$logfile = "./search_log_lex.txt"; //Pfadangabe zu Logdatei
$datenfile = "./search_data_lex.txt"; //Pfadangabe zur Datendatei
$bereich = "lexikon";
}
elseif(($_POST["Kapitel"] == "on") OR ($_GET["bereich"] == "kapitel"))
{
$logfile = "./search_log_main.txt"; //Pfadangabe zu Logdatei
$datenfile = "./search_data_main.txt"; //Pfadangabe zur Datendatei
$bereich = "kapitel";
}
else
{
header("Location: http://www.halbleiter.org/suche/index.php");
exit();
}
###########################################################
#
# (c) PlaNet Concept e.K., Lars Odermath, 2005
#
###########################################################
#
# :: planetSearch iX :: Version vom 14.01.2005
#
# COPYRIGHT NOTICE
# Copyright 2005 PlaNet Concept e.K.
# All Rights Reserved.
# EMail: kontakt@planetc.de
# URL : http://www.planetc.de
#
# :: planetSearch iX :: darf für private Homepages kostenlos benutzt und geändert
# werden, solange SÄMTLICHE Copyright-Verweise und die restlichen Kommentare erhalten
# bleiben.
#
# Mit dem Einsatz dieses Skripts akzeptieren Sie, daß PlaNet Concept e.K.,
# Lars Odermath, von jeglicher Haftung und Gewährleistung hinsichtlich des
# Einsatzes befreit ist.
#
# Der Verkauf dieses Skripts, auch in modifizierter Form, ist ohne vorherige
# Absprache ausdrücklich untersagt! (Mit anderen Worten: Bitte fragen Sie uns,
# bevor Sie versuchen, mit unserem Script Geld zu verdienen.)
#
# Um dieses Skript über das Internet oder ein anderes Medium
# weiterzuverbreiten, benötigen Sie vorher unsere Erlaubnis. In jeden Fall
# müssen SÄMTLICHE Copyright-Verweise und die restlichen Kommentare erhalten
# bleiben.
#
# Sollten Sie den Copyright-Verweis in der Ausgabe des Scriptes nicht anzeigen
# oder das Script auf kommerziellen Seiten einsetzen wollen, können Sie dies gegen die
# Entrichtung einer Lizenz-Gebühr in Höhe von € 49,00 zzgl. der gesetzl. MWSt. tun.
# Senden Sie uns dazu bitte eine eMail und geben u.a. die URL für das Script an.
# Sie erhalten dann umgehend eine Rechnung von uns.
#
# BITTE LESEN UND BEACHTEN SIE UNSERE NUTZUNGSBEDINGUNGEN FÜR DIE SCRIPTE!!!
# Die Nutzungsbedingungen finden Sie in der der beigefügten "nutzungsbedingungen.txt"
# und unter http://www.planetc.de/download/nutzungsbedingungen.html
#
###########################################################
###########################################################
#############################
include ("...");
#############################
$nps = $_POST['proseite'];
@setlocale("LC_ALL", "da_DA");
###
# Suchbegriff(e) übernehmen und umwandeln
$search_exp = strip_tags($_POST['search_exp']);
$exp_capital = strip_tags($_POST['exp_capital']);
$exp_full = strip_tags($_POST['exp_full']);
###
###
#Prüfen, ob ein Suchbegriff eingegeben wurde
if (!empty($search_exp) || !empty($_GET["search_exp"])) {
if (!empty($_GET['search_exp'])) {
$search_exp = $_GET['search_exp'];
}
###
# Sonderzeichen entfernen
$frrepl = array("=\+=", "=\s+=");
$torepl = array("", " ");
$search_exp = preg_replace( $frrepl, $torepl, $search_exp);
$search_exp = preg_quote($search_exp);
$search_exp = trim($search_exp);
###
# Zeichenanzahl des Suchbgeriffes prüfen
if (strlen($search_exp) < $sexp_length) {
// Template laden
$tmpl = join('', file('./tmpl/search_error.php'));
$tmpl = str_replace('[search_error_count]', $error_count, $tmpl);
$tmpl = str_replace('[search_error_empty]', '', $tmpl);
$file = fopen ("tmpl.php", "w+");
fwrite ($file, $tmpl);
fclose($file);
include("tmpl.php");
unlink("tmpl.php");
}
else {
// Suchbegriffe in Array umwandeln und zählen
$search_arr = explode(' ', $search_exp);
$search_count = count($search_arr);
// "Dummy"-Array für Such-Array erzeugen
$arr = array();
$arr_all = array();
// Template laden
$tmpl = join('', file('./tmpl/search_result.php'));
// Bereich der Trefferanzeige aus dem Template ziehen
preg_match_all("=\[SEARCH_START\](.*)\[SEARCH_STOP\]=siU", $tmpl, $between);
$search_pages = 0;
###
# Datenfile durchsuchen
$cont_part = do_search();
$search_pages = count($cont_part); // Anzahl der Trefferseiten
rsort($cont_part); // Array sortieren
$blaetter = seitenaufteilung($search_pages);
if (!isset($_GET['a'])) {
$a = 0;
}
// Arrays auslesen
for ($j=$a; $j!=$a+$nps; $j++) {
if (($j == $search_pages) || (!preg_match("=.*=sU", $blaetter))) {
break;
}
list($anz_searchexp, $title, $descr, $new_path, $searchx) = $cont_part[$j];
$content = str_replace('[SEARCH_TITLE]', $title, $between[1][0]);
// Trefferseite nummerieren
$search_nr = $j+1;
$content = str_replace('[SEARCH_NR]', $search_nr, $content);
$searchx = stripslashes($searchx);
$content = str_replace('[SEARCH_CONTENT]', $searchx, $content);
$content = str_replace('[SEARCH_LINK]', $from_dir.$new_path, $content);
$content = str_replace('[SEARCH_URL]', 'http://'.$_SERVER['SERVER_NAME'].$from_dir.$new_path, $content);
$content = str_replace('[SEARCH_DESC]', $descr, $content);
$content = str_replace('[SEARCH_COUNT]', $anz_searchexp, $content);
$cont_x .= $content;
}
###
# Suchergebnis zusammenstellen und anzeigen
$tmpl = preg_replace("=\[SEARCH_START\](.*)\[SEARCH_STOP\]=siU", $cont_x, $tmpl);
$search_exp_all = urldecode($search_exp);
$search_exp_all = str_replace('\\', '', $search_exp_all);
$tmpl = str_replace('[SEARCH_WORDS]', $search_exp_all, $tmpl);
$tmpl = str_replace('[SEARCH_PAGES]', $search_pages, $tmpl);
$tmpl = str_replace('[SHOW_PAGES]', $blaetter, $tmpl);
if (empty($cont_part)) {
$tmpl = str_replace('[NO_MATCH]', $no_match, $tmpl);
} else {
$tmpl = str_replace('[NO_MATCH]', '', $tmpl);
}
$file = fopen ("tmpl.php", "w+");
fwrite ($file, $tmpl);
fclose($file);
include("tmpl.php");
unlink("tmpl.php");
##########
# Logdatei schreiben
foreach ($search_arr as $search_exp) {
$zeilen = @file($logfile);
$anz_zeilen = sizeof($zeilen);
$x = '0';
// Datenfile auslesen
for ($i=0; $i<$anz_zeilen; $i++) {
list ($search_word, $search_num) = split("\\|", chop($zeilen[$i]));
// wenn Suchbegriff gefunden wird
if ($search_exp == $search_word) {
$search_num++;
$i-2;
$x++;
}
$new_log .= $search_word.'|'.$search_num."\r\n";
}
// wenn der Suchbegriff nicht schon geloggt wurde
if ($x == '0') {
$search_num = '1';
$new_log .= $search_exp.'|'.$search_num."\r\n";
}
$data = fopen($logfile, "w+");
flock($data, LOCK_EX);
fwrite($data, $new_log);
flock($data, LOCK_UN);
fclose($data);
unset($new_log);
}
##########
}
}
#############################
# Wenn kein Suchbegriff eingegeben wurde
else {
// Template laden
$tmpl = join('', file('./tmpl/search_error.php'));
$tmpl = str_replace('[search_error_count]', '', $tmpl);
$tmpl = str_replace('[search_error_empty]', $error_empty, $tmpl);
$file = fopen ("tmpl.php", "w+");
fwrite ($file, $tmpl);
fclose($file);
include("tmpl.php");
unlink("tmpl.php");
}
#############################
#############################
# Datenfile durchsuchen
function do_search() {
global $datenfile, $search_exp, $exp_capital, $exp_full, $search_arr, $search_count, $search_area, $cont_part, $search_pages, $arr_all, $maxz, $hit_area, $_GET, $area_content, $area_title, $area_description, $area_keywords;
// Datenfile öffnen und auslesen
$zeilen = file($datenfile);
$anz_zeilen = sizeof($zeilen);
for ($i=0; $i<$anz_zeilen; $i++) {
list ($path, $title, $description, $keywords, $content) = split("\\|", chop($zeilen[$i]));
######
# zu durchsuchender Bereich
$a = '';
if ($area_content == '1') $a .= $content;
if ($area_description == '1') $a .= $description;
if ($area_title == '1') $a .= $title;
if ($area_keywords == '1') $a .= $keywords;
######
// Umlaute verarbeiten
$a = ch_uml($a);
$j=0;
// Werte aus der URL auslesen
if (empty($exp_full)) $exp_full = $_GET['exp_full'];
if (empty($exp_capital)) $exp_capital = $_GET['exp_capital'];
if ($exp_full == 'yes') $pref = "\b"; // nur ganze Wörter
if ($exp_capital == 'no') $capit = "i"; // Groß- und Kleinschreibung nicht unterscheiden
foreach ($search_arr as $search_word) { // jeden Suchbegriff prüfen
if (preg_match("=$pref$search_word$pref=$capit", $a)) { // wenn Suchbegriff vorkommt...
$anz_searchexp += preg_match_all("=$pref$search_word$pref=$capit"."sU", $a, $nullinger);
$j++; // i für jeden gefundenen Suchbegriff erhöhen
if ($j==$search_count) { // wenn ALLE Suchbegriffe gefunden wurden...
// Bereich der Treffer ermitteln und Treffer hervorheben
if ($hit_area==1) {
$swlen = strlen($search_word);
$strlen = strlen($a);
$len = floor(($maxz-$swlen)/2);
foreach ($search_arr as $search_word) {
if (preg_match("=$pref$search_word$pref=$capit", $hitx)) {
$hitx = $hitx;
}
else {
if (isset($hitx)) {
$len = floor($len/2);
}
// Trefferbereich ermitteln
preg_match("=\b.{0,$len}($pref$search_word$pref).{0,$len}\b=s$capit", $a, $hit);
// Punkte hinzufügen, wenn mehr Zeichen als Max vorhanden sind
if ($strlen>$swlen) { $hit[0] = " ...".$hit[0]."... "; }
$hitx .= $hit[0];
}
}
foreach ($search_arr as $search_word) {
$hitx = preg_replace("=$pref($search_word)$pref=$capit", "<span class='hitword'>\\1</span>", $hitx);
}
} // hit_area Ende
$s_show = array();
$s_show[] = $anz_searchexp;
$s_show[] = $title;
$s_show[] = $description;
$s_show[] = $path;
$s_show[] = $hitx;
array_push($arr_all, $s_show);
unset($a, $anz_searchexp, $hitx);
}
}
}
}
// Treffer-Array zurückgeben
$cont_part = $arr_all;
return ($cont_part);
} // end func
// Umlaute bearbeiten
function ch_uml($del_uml) {
$del_uml = str_replace('ä', 'ä', $del_uml); // Umlaute und ß
$del_uml = str_replace('ö', 'ö', $del_uml);
$del_uml = str_replace('ü', 'ü', $del_uml);
$del_uml = str_replace('Ä', 'Ä', $del_uml);
$del_uml = str_replace('Ö', 'Ö', $del_uml);
$del_uml = str_replace('Ü', 'Ü', $del_uml);
$del_uml = str_replace('ß', 'ß', $del_uml);
return ($del_uml);
} // end func
#################################################
#################################################
# Anzeige der Blätterfunktion
function seitenaufteilung($anz_zeilen) {
global $nps, $a, $_SERVER, $_GET, $search_exp, $exp_full, $exp_capital, $bereich;
$a = $_GET['a'];
$PHP_SELF = $_SERVER['PHP_SELF'];
$search_exp = urlencode($search_exp);
$seiten=ceil($anz_zeilen / $nps);
$foot = '<table width="400" border="0" cellspacing="0" cellpadding="0" align="center"><tr><td> </td></tr><tr><td align=center>';
if($a >= $nps) {
$back = $a-$nps;
$foot .= '<a href="'.$PHP_SELF.'?search_exp='.$search_exp.'&exp_full='.$exp_full.'&exp_capital='.$exp_capital.'&a='.$back.'&bereich='.$bereich.'" class="page_link"><img src="http://www.halbleiter.org/bilder/fuss_zuruck.gif" title="Eine Seite zurück"></a> ';
}
if ($anz_zeilen<=$nps) {
$foot .= '';
}
else {
for ($i=1; $i<=$seiten; $i++) {
$fwd=($i-1)*$nps;
if ($a==$fwd) {
$foot .= '<a href="'.$PHP_SELF.'?search_exp='.$search_exp.'&exp_full='.$exp_full.'&exp_capital='.$exp_capital.'&a='.$fwd.'&bereich='.$bereich.'" class="page_link"><b><u>'.$i.'</u></b></a> ';
}
else{
$foot .= '<a href="'.$PHP_SELF.'?search_exp='.$search_exp.'&exp_full='.$exp_full.'&exp_capital='.$exp_capital.'&a='.$fwd.'&bereich='.$bereich.'" class="page_link">'.$i.'</a> ';
}
}
}
if(($a < $anz_zeilen-$nps) && ($nps<$anz_zeilen)) {
$fwd = $a+$nps;
$foot .= ' <a href="'.$PHP_SELF.'?search_exp='.$search_exp.'&exp_full='.$exp_full.'&exp_capital='.$exp_capital.'&a='.$fwd.'&bereich='.$bereich.'" class="page_link"><img src="http://www.halbleiter.org/bilder/fuss_weiter.gif" title="Eine Seite weiter"></a>';
}
$foot .= '</td></tr></table></table>';
return($foot);
}
#################################################
?>
Zuletzt bearbeitet: