PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP -> Suchfunktion mit mehrseitiger Ausgabe


Gast
2004-09-26, 04:33:58
Hi,
das beste Beispiel für das was ich vorhabe sind wohl gängige Suchmaschinen, alle haben eine Mehrseitige Ausgabe der Suchergebnisse, d.h. ab 3en kommt eine neue Seite etc... das ist in Foren selten anders... jetzt die Frage: Wie kann ich so etwas in php umsetzen? Ich hab irgendwie keine Idee wie ich nur den Tei mit den Suchergebnissen auf ne eigene Seite setzen soll, oben ist in meinem Code nämlich noch die Möglichkeit, die Suche einzuschränken und die muss bestehen bleiben. d.h. es ist ein kleiner Teil der Seite, der je nachdem welche Seite ich anklicke die entsprechenden Suchergebnisse zurückgeben muss, aber ich weiss einfach nich wie ich anfangen soll das zu implentieren, zur Zeit zeigt meine Suche SUchergebnisse alle in derselben Seite an... wer nen Link weiss oder mirn Ansatzpunkt gibt, dem sei mein Dank gewiss,
thx im Vorraus

Sphinx
2004-09-26, 09:58:11
Kann dir meine Lösung mal anbieten...


<?
// Daten die per URL Übertragen werden...
// Beispiel http://server/index.php5?npp=20&....
//NPP Variable in meiner NEWSauflistung (News Per Page)

if (!isset($_GET["npp"])){
$npp = 10;
}

//start ab Seite...
if (!isset($_GET["start"])){
$beginat = 1;
}else{
$beginat = $_GET["start"];
}

// ----Wieviele News besitze ich überhaupt in meiner Datenbank
$sqlnewsgesamt = "SELECT * FROM pem_news WHERE topnews!=1";
$resultnewsgesamt = mysql_query($sqlnewsgesamt, $connection);
if ($resultnewsgesamt){
$newsgesamt = mysql_num_rows($resultnewsgesamt);
}

// Bereitet mir meine Buttons für Navigation vor...

// Meine < und << Button (also First bzw. Previewpage buttons)
$page = $beginat;

if ($page == "1"){
$beginat = "0";
}else{
$beginat = ($page-1) * $npp;
}

// ---------- PAGES Gesamt errechnen ...
$pages = $newsgesamt / $npp;
if ($pages != round($pages)){
if (round($pages) < $pages){
$pages = round($pages) + 1;
}
if (round($pages) > $pages){
$pages = round($pages);
}
}
else{
$pages = round($pages);
}

if ($page > $pages){
$page = $pages;
$beginat = ($page-1) * $npp;
}
if ($page < 1){
$page = 1;
$beginat = "1";
}


// BUTTON | TEXT LEISTE Oberhalb der NEWSAuflistung

// Aller erste Seite...
echo '<a href="';
echo '/php/index.php5?siteid=admincms&amp;id=news&amp;start=';
echo '1';
echo '">|«</a>';

// Previews Page (für den Fall das ich auf Seite 1(aktuellste) bin bleibt er auf Page 1... ansonsten wenn ich auf Page 5 bin würde hier start=4 als Bsp. stehen...
echo '<a href="';
echo '/php/index.php5?siteid=admincms&amp;id=news&amp;start=';
if ($page > 1){
echo $page-1;
}else{
echo '1';
}
echo '">« Previous</a>';

// Für informationen wo ich mich befinde zur Zeit... (zwischen der Navi)
echo 'Current Page ';
echo '<span class="redcolor">';
echo $page;
echo '</span>';
echo ' of ';
echo $pages;
echo '</span>';

// Nächste Page (+1)
echo '<a href="';
echo '/php/index.php5?siteid=admincms&amp;id=news&amp;start=';
if ($page < $pages){
echo $page + 1;
}else{
echo $pages;
}
echo '">';
echo 'Next »';
echo '</a>';

// Last Page (älteste Einträgepage) Wert wurde oben berechnet...
echo '<a href="';
echo '/php/index.php5?siteid=admincms&amp;id=news&amp;start=';
echo $pages;
echo '">»|</a>';


// So nun kommt die eigentlich Auflistung der Seite (Default 10 Newsperpage $npp... bzw. $beginat)

$sqlcmsnews = "SELECT id,authorid,author,security,headline,articleid,date,time,relatedlinks,orderid,mo difiedbyid,filter,topnews FROM pem_news WHERE topnews!=1 ORDER BY orderid DESC LIMIT ".$beginat.",".$npp;
$resultcmsnews = mysql_query($sqlcmsnews, $connection);
if ($resultcmsnews){
while ($inhaltcmsnews = mysql_fetch_array($resultcmsnews, MYSQL_ASSOC)){

//Werte aus der Datenbank werden angezeigt...
..
..
..
~das erspar ich mir nun...
}
}

//Unten habe ich nochmal eine doppelte anzeige nur als RESULT ANZEIGE
//Beispiel 0-10 News, 11-14 News wenn max 14 Einträge...
echo 'Results<span class="redcolor">';
echo '&nbsp;';
echo (($page-1) * $npp) + 1;
echo '-';
if ($page * $npp < $newsgesamt){
echo $page * $npp;
}else{
echo ($page * $npp) + ($newsgesamt - ($page * $npp));
}
echo '&nbsp;';
echo '</span>of ';
echo $newsgesamt;

govou
2004-10-01, 22:14:37
// ----Wieviele News besitze ich überhaupt in meiner Datenbank
$sqlnewsgesamt = "SELECT * FROM pem_news WHERE topnews!=1";
$resultnewsgesamt = mysql_query($sqlnewsgesamt, $connection);
if ($resultnewsgesamt){
$newsgesamt = mysql_num_rows($resultnewsgesamt);
}
Schrecklich, mach das nicht so. Bei dieser Abfrage, wird der KOMPLETTE Inhalt von pem_news ausgelesen, was unnötig Ressourcen frisst. MySQL bietet da eine bessere Funktion als PHP:

$sqlnewsgesamt = "SELECT COUNT( * ) FROM pem_news WHERE topnews!=1";
$resultnewsgesamt = mysql_query($sqlnewsgesamt, $connection);
if ($resultnewsgesamt){
$newsgesamt=mysql_fetch_row($newsgesamt);
$newsgesamt=$newsgesamt[0];
}

In dieser optimierten Version zählt die MySQL-DB selber die Anzahl der Rows, anstatt den kompletten Inhalt der Tabelle an das PHP-Script zu schicken.
Das spart eine Menge Zeit. Dein Provider wirds dir danken. :)

govou
2004-10-01, 23:04:30
$pages = $newsgesamt / $npp;
if ($pages != round($pages)){
if (round($pages) < $pages){
$pages = round($pages) + 1;
}
if (round($pages) > $pages){
$pages = round($pages);
}
}

Das geht auch einfacher und kürzer :)

$pages = $newsgesamt / $npp;
$pages = $ceil($pages);

Sphinx
2004-10-02, 04:02:05
Das geht auch einfacher und kürzer :)

$pages = $newsgesamt / $npp;
$pages = $ceil($pages);


$pages = ceil($pages);

Natürlich richtig.


Zur MYSQL Abfrage ,) ich habe nur schnipsel von meinem Code eingefügt.
Da ich die Funktion als gleichzeitigen Abruf nutze in dem Script...

govou
2004-10-02, 12:28:00
$pages = ceil($pages);

Natürlich richtig.


Zur MYSQL Abfrage ,) ich habe nur schnipsel von meinem Code eingefügt.
Da ich die Funktion als gleichzeitigen Abruf nutze in dem Script...
Ich musste gestern Abend selber ein solches Script basteln und als ich mich von deinem Script inspirieren lassen hab, ist mir das aufgefallen. Ich finde dein Script ist gut strukturiert, relativ kurz und knackig und gut zu lesen. Weiter so! :up: