• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Suchergebnis auf mehrern Seiten verteilen!

skype90

Mitglied
Hallo,

Ich habe dieses Problem in unzähligen Foren gepostet keiner konnte mir wirklich weiterhelfen. Es geht um ein Suchergebnis auf mehrere Seiten zu verteilen. Das habe ich in gewisser Weise auch geschafft. Das Problem ist die Variable $wherestring das auf dem klicken der 2 Seite leer ist sprich das Post Array ist auf das klicken der 2. Seite leer und somit kriege ich alle User wieder angezeigt. Zum Vorschlag wurden mir : Session,Url-parameter und die sql abfrage in eine Datenbank zwischen speichern genannt. Jedoch bin ich nicht so gut in php um das zu realisieren oder habs so teilweise probiert aber es hat nicht geklappt. Deshlab frage ich hier um HILFE das problem belastet mich seit 3 Wochen ungefähr und will meine Homepage endlich hochladen.

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']}'";
    if($_POST['Alter_von']) $wheres[] = "age between '{$_POST['Alter_von']}'AND '{$_POST['Alter_bis']}'";
    if($_POST['Alter_bis']) $wheres[] = "age between '{$_POST['Alter_von']}'AND '{$_POST['Alter_bis']}'";


    // 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

$maxusers = 60;
$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;
}

Ich DANKE für jede hilfreiche Antwort.

skype90
 
Werbung:
Ich weiß nich, ob ich das Problem jetzt in der Schnelle richtig verstanden habe, aber übergib doch die Variable $wherestring per Link auf die nächste Seite, also zB index.php?page=$wherestring, dann kannst du dir den Wert auf der nächsten Seite mit $_GET["wherestring"] wiederholen und damit weiter arbeiten. Funktioniert bei mir super...
 
Echt es hat bei dir geklappt... könntest du mir das etwas näher erläutern bin leider nicht so gut in php.
 
Werbung:
Also ich habs nich mit deinem Code getestet, aber bei mir funktioniert es auf diese Weise. Allgemein funktioniert das eben so:
Du setzt unten auf deine Seite einen Link: <a href="index.php?wherestring=$wherestring">Seite 2</a>. Dann steht ja in der URL deine Variable $wherestring, die du mit $_GET["wherestring"] aufrufen kannst. Ich hab mir deinen Code jetzt nicht so genau angeschaut, aber du brauchst natürlich dafür eine Berechnung, nach der entschieden wird, wie viele Suchergebnisse pro Seite gezeigt werden und welche Einträge bei welcher Seitenzahl angezeigt werden. Also Seite 1 - Einträge 1 bis 10, Seite 2 - Einträge 11 bis 20 usw. Musst dir dafür halt ne sinnvolle Logik überlegen, die dir das ausrechnet.

Lies dich am besten im PHP-Manual zu $_GET schlau:
PHP: $_GET - Manual
 
hmm habe das mal so gemacht wie ich das verstanden habe aber trotz aller den klappt es nicht hier mal Skriptauschnitte.

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']}'";
    if($_POST['Alter_von']) $wheres[] = "age between '{$_POST['Alter_von']}'AND '{$_POST['Alter_bis']}'";
    if($_POST['Alter_bis']) $wheres[] = "age between '{$_POST['Alter_von']}'AND '{$_POST['Alter_bis']}'";


    // 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

}

if($_POST["submit"]) {

 $sex = $_POST["sex"];
 $land = $_POST['land'];
 $nickname = $_POST['username'];
 $state = $_POST['state'];
 $status = $_POST['status'];
 $Alter_von = $_POST['Alter_von'];
 $Alter_bis = $_POST['Alter_bis'];




}
else
{

  $sex = $_GET["sex"];
 $land = $_GET['land'];
 $nickname = $_GET['username'];
 $state = $_GET['state'];
 $status = $_GET['status'];
 $alter_von = $_GET['Alter_von'];
 $alter_bis = $_GET['Alter_bis'];

}


PHP:
$page_link = makepagelink("index.php?site=registered_users&amp;sort=$sort&amp;type=$type&amp;sex=".$sex."&amp;land=".$land."&amp;nickname=".$nickname."&amp;state=".$state."&amp;status=".$status."&amp;Alter_von=".$Alter_von."&amp;Alter_bis=".$Alter_bis, $page, $pages);

Und so sieht der Link in meinem Browser aus.

PHP:
http://localhost/webspell/index.php?site=registered_users&sort=nickname&type=ASC&sex=m&land=de&nickname=&state=&status=OFF&Alter_von=14&Alter_bis=100&page=2


mfg

skype90
 
Lass das mal alles über GET laufen und nimm POST da völlig raus. Aktuell wird beim Anklicken des Links natürlich keine Query abgeschickt, da die Bedingung isset($_POST['submit']) nicht mehr erfüllt ist.

Edit: Außerdem bitte über SQL-Injections informieren. http://phpforum.de/forum/showthread.php?t=218433
 
Zuletzt bearbeitet:
Werbung:
Danke mermshaus ,

Ich habe statt POST, GET benutzt. Aber nach wie vor hat sich das Problem immer noch nicht geregelt. Ich denke das Problem liegt bei den Ürl parameter... :(. Ich kann mal die Veränderung reinposten.

PHP:
// Prüfen ob das Formular gesendet wurde
if(isset($_GET['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($_GET['sex']) $wheres[] = "sex='{$_GET['sex']}'";
    if($_GET['land']) $wheres[] = "land='{$_GET['land']}'";
    if($_GET['username']) $wheres[] = "nickname LIKE '%{$_GET['username']}%'";
    if($_GET['state']) $wheres[] = "state='{$_GET['state']}'";
    if($_GET['status']) $wheres[] = "status='{$_GET['status']}'";
    if($_GET['Alter_von']) $wheres[] = "age between '{$_GET['Alter_von']}'AND '{$_GET['Alter_bis']}'";
    if($_GET['Alter_bis']) $wheres[] = "age between '{$_GET['Alter_von']}'AND '{$_GET['Alter_bis']}'";


    // 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

$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&amp;sort=$sort&amp;type=$type&amp;sex=".$sex."&amp;land=".$land."&amp;nickname=".$nickname."&amp;state=".$state."&amp;status=".$status."&amp;Alter_von=".$Alter_von."&amp;Alter_bis=".$Alter_bis, $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;
}

Grüße

skype90
http://www.html.de/members/mermshaus/
 
Werbung:
Zurück
Oben