Suchanfrage auf mehrern Seiten verteilen !

skype20

Mitglied
Hallo, ich habe schon in einen anderen Post mein Problem geschildert aber meiner Meinung zu unverständlich deshalb will ich hier eine neues Thema eröffnen. Es geht um eine Suchanfrage die auf mehreren Seiten verteilt werden soll.Dies klappt auch gut bis auf eins das wenn eine 2 seite ausgegeben werden soll einfach alle User angezeigt werden. Ich habe error reporting eingeschaltet und es scheint alles ok zu sein der Compiler seiter her.

Naja , hier ist mal das Skript

Suchanfrage
PHP:
// Prüfen ob das Formular gesendet wurde
if(isset($_POST['submit'])){
    // Array initializieren. Falls kein argument angegeben wurde,
    // dann ist die Argumentliste ein leeres Array
    $wheres = array();
    //Jedes Feld prüfen und ggf in den Where-Array einfügen
    if($_POST['sex']) $wheres[] = "sex='{$_POST['sex']}'";
    if($_POST['land']) $wheres[] = "land='{$_POST['land']}'";
    if($_POST['username']) $wheres[] = "nickname LIKE '%{$_POST['username']}%'";
    if($_POST['state']) $wheres[] = "state='{$_POST['state']}'";
    if($_POST['status']) $wheres[] = "status='{$_POST['status']}'";



    // WHERE-Tel des SQL-String zusammenstellen
    if(count($wheres)>0) $wherestring = "WHERE ".implode(' AND ', $wheres);
    //SQL-String zusammensetzen
    $sql = mysql_query("SELECT * FROM `".PREFIX."user`{$wherestring}");
    //TODO: Sql an die DB absetzen

}
// Anzahl der Mitglieder
$user_count= safe_query("SELECT * FROM ".PREFIX."user ");
$user_results= mysql_num_rows($user_count);
// Anzahl der Mitglieder


Ausgabe auf mehreren Seiten

PHP:
$maxusers = 2;
$alle = safe_query("SELECT * FROM `".PREFIX."user`{$wherestring}");
$gesamt = mysql_num_rows($alle);
$pages = ceil($gesamt/$maxusers);

if(isset($_GET['page'])) $page=(int)$_GET['page'];
else $page = 1;
$sort="nickname";
if(isset($_GET['sort'])){
  if(($_GET['sort']=='country') || ($_GET['sort']=='nickname') || ($_GET['sort']=='lastlogin') || ($_GET['sort']=='registerdate')) $sort=$_GET['sort'];
}

$type="ASC";
if(isset($_GET['type'])){
  if(($_GET['type']=='ASC') || ($_GET['type']=='DESC')) $type=$_GET['type'];
}

if($pages>1) $page_link = makepagelink("index.php?site=registered_users&sort=$sort&type=$type", $page, $pages);
else $page_link='';

if($page == "1") {
	$ergebnis = safe_query("SELECT * FROM `".PREFIX."user`{$wherestring} ORDER BY ".$sort." ".$type." LIMIT 0,".$maxusers);
	if($type=="DESC") $n=$gesam;
	else $n=1;
}
else {
	$start=$page*$maxusers-$maxusers;
	$ergebnis = safe_query("SELECT * FROM `".PREFIX."user`{$wherestring} ORDER BY ".$sort." ".$type." LIMIT ".$start.",".$maxusers);
	if($type=="DESC") $n = ($gesamt)-$page*$maxusers+$maxusers;
	else $n = ($gesamt+1)-$page*$maxusers+$maxusers;
}



mfg

skype20
 
Ich würde an deiner Stelle das Ganze überdenken. Aus 2 Gründen:
- Wenn Du selbst die Umsetzung für Dich als Herausforderung ansiehst: die doppelte Abfrage von SQL-Statements (einmal für die aktuelle Seite, einmal für die Gesamtseitenzahl) ist unnötig und kann dank MySQL einfacher umgesetzt werden. Stichwort: SQL_CALC_FOUND_ROWS -> http://neunzehn83.de/blog/2010/07/13/blattern-mit-mysql-und-sql_calc_found_rows/
- Wenn du einfach nur eine seitenweise Anzeige haben willst: schau dich mal nach "seitenweise Blättern" oder auch "Pagination" um, dort gibt es viele Vorlage-Scripte die man durchaus verwenden kann: http://www.cw-internetdienste.de/dev/pager/
 
Hmm... Ich habe es mal mit der Funktion SQL_CALC_FOUND_ROWS und habe es in meinen mysql query eingefügt soweit ich es verstanden habe und bin auf folgendes Ergebnis gekommen.

Skript

PHP:
// Prüfen ob das Formular gesendet wurde
if(isset($_POST['submit'])){
    // Array initializieren. Falls kein argument angegeben wurde,
    // dann ist die Argumentliste ein leeres Array
    $wheres = array();
    //Jedes Feld prüfen und ggf in den Where-Array einfügen
    if($_POST['sex']) $wheres[] = "sex='{$_POST['sex']}'";
    if($_POST['land']) $wheres[] = "land='{$_POST['land']}'";
    if($_POST['username']) $wheres[] = "nickname LIKE '%{$_POST['username']}%'";
    if($_POST['state']) $wheres[] = "state='{$_POST['state']}'";
    if($_POST['status']) $wheres[] = "status='{$_POST['status']}'";



    // WHERE-Tel des SQL-String zusammenstellen
    if(count($wheres)>0) $wherestring = "WHERE ".implode(' AND ', $wheres);


}



Ausgabe der Seiten

PHP:
$maxusers = 2;
$alle = safe_query("SELECT SQL_CALC_FOUND_ROWS  * FROM `".PREFIX."user`{$wherestring}");
$gesamt = mysql_query("SELECT FOUND_ROWS() FROM `".PREFIX."user`{$wherestring}");
$pages = ceil($gesamt/$maxusers);

if(isset($_GET['page'])) $page=(int)$_GET['page'];
else $page = 1;
$sort="nickname";
if(isset($_GET['sort'])){
  if(($_GET['sort']=='country') || ($_GET['sort']=='nickname') || ($_GET['sort']=='lastlogin') || ($_GET['sort']=='registerdate')) $sort=$_GET['sort'];
}

$type="ASC";
if(isset($_GET['type'])){
  if(($_GET['type']=='ASC') || ($_GET['type']=='DESC')) $type=$_GET['type'];
}

if($pages>1) $page_link = makepagelink("index.php?site=registered_users&sort=$sort&type=$type", $page, $pages);
else $page_link='';

if($page == "1") {
	$ergebnis = safe_query("SELECT SQL_CALC_FOUND_ROWS * FROM `".PREFIX."user`{$wherestring} ORDER BY ".$sort." ".$type." LIMIT 0,".$maxusers);
	if($type=="DESC") $n=$gesam;
	else $n=1;
}
else {
	$start=$page*$maxusers-$maxusers;
	$ergebnis = safe_query("SELECT SQL_CALC_FOUND_ROWS * FROM `".PREFIX."user`{$wherestring} ORDER BY ".$sort." ".$type." LIMIT ".$start.",".$maxusers);
	if($type=="DESC") $n = ($gesamt)-$page*$maxusers+$maxusers;
	else $n = ($gesamt+1)-$page*$maxusers+$maxusers;
}

Leider ist das Problem nach wie vor da ... es scheint so als kann er nicht die Anzahl der Datensätze erkennen die nach der Suchanfrage enstehen.
 
Wie sieht denn der Link (im erzeugten HTML-Code) auf die 2. Seite aus, wenn Du die 1. Seite anzeigen lässt?
 
Der sieht wie folgt aus. Sagen wir mal es soll einen Suchresultat ab 6 User eine zweite Seite eingerichtet werden. Dann gebe ich z.b. dem Buchstaben b in die Suche ein. Das Resultat sind 7 user sogesehen müsste eine zweite Seite eingerichtet sein , tuht es ja auch aber es enstehen aufeinmal 16 seiten oder so ... da er ja aufeinmal alle User anzeigt. Ich denke irgendwie kann er die Suchresultate nicht zählen.
 
Ich fragte nach dem konkreten erzeugten Link mit den Parameter, nicht nach einer Beschreibung der Suche allgemein.
 
achso :S hier falls du das meinst

PHP:
http://localhost/webspell/index.php?site=registered_users&sort=nickname&type=ASC&page=1
 
Der Link führt aber auf die 1. Seite, erkennbar am "page=1". Bist Du sicher, dass das der Link ist, der auf Seite 2 führen soll? Wenn ja, dann dürfte das falsche "page=1" die Ursache für die Probleme sein.
 
Sorry das ist der link der zur 2. Seite führt.

PHP:
http://localhost/webspell/index.php?site=registered_users&sort=nickname&type=ASC&page=2
 
Zurück