Blätterfunktion mit Suchformular - Ein teil gelöst!

Ich bin heute grad gut drauf. Darum habe ich mein Script, dass ich dir schon im letzten Thread verlinkt habe und du mit keinem Wort gewürdigt hast, trotzdem mal um ein Suchformular erweitert.

Musst nur noch einige Kleinigkeiten für deine Umgebung anpassen

PHP:
<form>
    <input type="text" name="search" value="<?php echo $_GET['search'];?>" />
    <input type="submit" name="submit" value = "submit">
</form>

<?php 
//Connection zur DB herstellen
include_once("connect.php");
//Die ListNavigator Klasse einbinden
//Source der Klasse: http://wiki.yaslaw.info/wikka/PhpListNavigation
include_once("../lib/listNavigator/ListNavigator.php");

//Anzahl Einträge pro Seite definieren
$itemsPerPage = 10;

//SQL für die Datenmenge zusammenstellen
if(isset($_GET['search'])) $where = "WHERE field1 LIKE '{$_GET['search']}'";
$sql = "SELECT * FROM perf_test {$where}";

//Aktuelle Seite abfragen
$actPageNr = ($_GET['nr']) ? $_GET['nr'] : 0; 

//Mein Navigator anlegen (Die Klasse ist weiter unten definiert)
$myNav = new ListNavigator($sql, $itemsPerPage);
//Aktuelle Seite setzen
$myNav->setPageNr($actPageNr);

//die anzuzeigenden Datensätze auslesen
$result = mysql_query($myNav->getActSql());

//Die Datentabelle aufbauen
echo '<table>';
while($row = mysql_fetch_assoc($result)){
    echo "<tr><td>{$row['id']}</td><td>{$row['field1']}</td><td>{$row['field2']}</td></tr>";
}
echo '</table><hr />';

/**
 *Aufbau der Navigation
 */
//Pattern für den Navigationslink
$linkpattern = "<a href='{$_SERVER['PHP_SELF']}?nr=%d&search=%s'>%s</a>";
//Erste/Vorhergehende Seite -Links einfügen
if(!$myNav->bof()){
    $navEntries[] = sprintf($linkpattern, $myNav->getFirstNr(), $_GET['search'], '&lt;&lt;');
    $navEntries[] = sprintf($linkpattern, $myNav->getPrevNr(), $_GET['search'], '&lt;');
}
//Pro Seite einen Link einfügen
foreach($myNav->getPageNumbers() as $nr){
    if($nr == $actPageNr){
        $navEntries[] = "<b>{$nr}</b>";        
    }else{    
        $navEntries[] = sprintf($linkpattern, $nr, $_GET['search'], $nr);
    }
}
//Nächste/Letzte Seite -Links einfügen
if(!$myNav->eof()){
    $navEntries[] = sprintf($linkpattern, $myNav->getNextNr(), $_GET['search'], '&gt;');
    $navEntries[] = sprintf($linkpattern, $myNav->getLastNr(), $_GET['search'], '&gt;&gt;');
}

//Alle Links mit ' | ' getrennt ausgeben
echo implode(' | ', $navEntries);

?>
 
Hallo Yaslaw,

ich habe schon mir das angeschaut mit deinem Listen Navigator, aber kein plan gehabt wie ich da was ändern muss.

Ich habe zwar versucht das auf meine Umgebung anzupassen, aber habe es nicht hinbekommen und dann eben gelassen.

Ich danke dir zwar für deine Hilfe und werde es nochmal versuchen mit deinem Listen Navigator wie oben im Code beschrieben, aber , ich weis auch nicht, im deinem Listen Navigator weis ich nicht wie ich es auf meine Umgebungen anpassen soll.

Ich brauche Eigentlich nur zwei Suchkriterien und wo ich diese ändern soll weis ich nicht.

Gruß
 
Nun, in meinem Beispiel ist halt nur ein Suchbegriff.
Schau es dir mal an, wo der überall im Code vorkommt. Dort muss halt überall der Zweite mit rein.

Und was du nicht verstehst, solltest du in der PHP-Hilfe mal anschauen und versuchen zu verstehen. Programmieren geht eigentlich nie mit reinem Script-Kopieren.
 
Hallo Yaslaw,

habe es soweit hinbekommen und funkt so la la.

Problem:

1. Ich verstehe nicht warum die ersten 10 Datensätze angezeigt werden sobald ich die Seite aufrufe obwohl ich noch keinen Suchbegriff eingegeben habe und wenn ich die links anklicke kommt folgende Fehlermeldungen:

HTML:
Warning: range() [function.range]: step exceeds the specified range in /home/XXXXX/html/XXXX/XXXXXX.php on line 76

Warning: array_keys() [function.array-keys]: The first argument should be an array in /home/master1/public_html/xxxxxx/xx.php on line 77

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/xxxxxx/html/xxxxxx/xx.php on line 178

Warning: reset() [function.reset]: Passed variable is not an array or object in /home/xxxxx/html/xxxxxxxx/xx.php on line 127

Warning: Invalid argument supplied for foreach() in /home/xxxxxx/html/xxxxx/xx.php on line 194

Warning: end() [function.end]: Passed variable is not an array or object in /home/xxxx/html/xxxxxx/xx.php on line 134

Warning: implode() [function.implode]: Invalid arguments passed in /home/xxxxx/html/xxxxx/xx.php on line 208


Die o.g. Fehlermeldungen kommen aber wie gesagt nur wenn ich nichts im Suchformular eingebe oder gleich die Blätterfunktion Links anklicke, wenn ich dagegen im Suchfeld einen zu suchenden Text eingebe funktioniert die Blätterfunktion wie es auch sein sollte.

2. warum fängt es bei 0 an, mir währe bei 1 lieber das die Blätterfunktion anfängt.

Mache ich da was falsch oder ist deine Blätterfunktion so aufgebaut?

Sollte es nicht eher so sein, dass man erst die Datensätze angezeigt bekommt, wenn man etwas im Suchfeld eingibt und die Blätterfunktion bei Nr. 1 anfängt?

Ansonsten ist das schon wirklich meine Richtung die ich gesucht habe, gefällt mir.

Vielen Dank Yaslaw

Grüße

master1971
 
Auf Zeile 17 das isset() entfernen. Hab vergessen dass bei Formularen ein Leerwert gesendet wird, wenn ein Feld leer bleibt, aber es wird gesendet.
PHP:
if($_GET['search']) $where = "WHERE field1 LIKE '{$_GET['search']}'";
 
Hallo Yaslaw,

ok, geht.

Ich habe noch ne weitere if schleife eingebaut, damit man die 10 Datensätze nicht gleich sehen kann wenn man die Seite aufruft, jetzt muss man erst etwas im Suchfeld eingeben damit die Datensätze aufgerufen werden und man diese sehen kann.

Ist das dann so ok mit der if Anweisung?

HTML:
//Die Datentabelle aufbauen

Also ab hier bis alle weiteren Befehlskette mit eingebunden.
 
if($_GET['search']) {

................

............

......

}

Was ich nicht hin bekomme, ist das die Blätterfunktion ab 1 anfängt und nicht bei 0, kannst du mir sagen wo das in deinen Script zu bzw. wo dieser befehl zu finden ist?

Grüße

master1971
 
Du willst nur die Anzeige um eins erhöhen. Der Wert dahinter nicht, weil sonst wird kompliziert
PHP:
//Pro Seite einen Link einfügen
foreach($myNav->getPageNumbers() as $nr){
    if($nr == $actPageNr){
        $navEntries[] = "<b>{$nr+1}</b>";        
    }else{    
        $navEntries[] = sprintf($linkpattern, $nr, $_GET['search'], $nr+1);
    }
}
 
ah, es ging zwar nicht so weil Fehler kam, sonder hab dann so gemacht z.B. $test = $n+1; und dann in der geschweiften klammer so eingeben
PHP:
 $navEntries[] = "<b>{$test}</b>";
 
Zurück