PHP Such und Sortierenfunktion der Blätterfunktion anpassen

borklaser

Cadet 3rd Year
Registriert
Dez. 2013
Beiträge
39
Tag,
ich habe folgendes gemacht: Eine Tabelle in einer MySQL Datenbank. Diese Tabelle wird ausgelesen und als Tabelle angezeit. Diese Tabelle kann man nach Spalten Auf- und Absteigend sortieren. Außerdem gibt es noch eine Suchfunktion die die Ergebnisse in der gleichen Tabelle anzeigt, auch zum auf und absortieren.

Jetzt das Problem: Wenn ich die Tabelle normal aufrufe klappt die Blätterfunktion.
Wenn ich die Normale Tabelle sortiere wird es sortiert aber wenn ich dann auf die 2. Seite gehe ist es wieder unsortiert und es wird das anzeigt was auch angezeigt wird wenn man normal auf seite 2 geht. Will aber das dann die sortierung weitergeführt wird.
Wenn ich was suche werden die ergebnisse angezeigt, aber wenn man auf seite 2 klickt kommt nicht die 2. seite mit ergebnissen sondern wieder die normale seite 2 mit den daten vom anfang
Und wenn ich beim ergebnis der suche auch wieder sortiere kommt das gleiche problem...

Ich weiß nicht wie ich das hinbekommen soll, ich hoffe jemand kann mir da helfen bin noch ein Anfänger.

Hier der link zur seite: http://testpage500.bplaced.net/test2.php Könnt ihr ja selber gucken.

Und hier der Code:
Code:
<?php



include "connection.php";


$seite = $_GET["seite"];


if(!isset($seite))
   {
   $seite = 1;
   }

$eintraege_pro_seite = 2;

$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;




if ( isset ( $_GET['order_var'] ) )
{
        $order_var = $_GET['order_var'];

        switch ( $order_var )
        {
                case 'ppvname_asc':
                        $order_var = "ppvname ASC";
                        break;
                case 'ppvname_dsc':
                        $order_var = "ppvname DESC";
                        break;
                case 'datum_asc':
                        $order_var = "datum ASC";
                        break;
                case 'datum_dsc':
                        $order_var = "datum DESC";
                        break;
                case 'art_asc':
                        $order_var = "art ASC";
                        break;
                case 'art_dsc':
                        $order_var = "art DESC";
                        break;
                case 'buyrate_asc':
                        $order_var = "buyrate ASC";
                        break;
                case 'buyrate_dsc':
                        $order_var = "buyrate DESC";
                        break;

                case 'matches_asc':
                        $order_var = "matches ASC";
                        break;
                case 'matches_dsc':
                        $order_var = "matches DESC";
                        break;
        }
}
else
{
        $order_var = "ppvname ASC";
}



    $sql = "SELECT * FROM PPVs ";
    if (isset($_POST['search'])) {
    $search_term = mysql_real_escape_string($_POST['search_box']);
    $sql .= "WHERE ppvname LIKE '%".$search_term."%'";
    $sql .= " OR datum LIKE '%".$search_term."%'";
    $sql .= " OR art LIKE '%".$search_term."%'";
    $sql .= " OR buyrate LIKE '%".$search_term."%'";
    $sql .= " OR matches LIKE '%".$search_term."%'";
    }

    $sql.=" ORDER BY $order_var ";
    $sql.=" LIMIT $start, $eintraege_pro_seite";


$query = mysql_query($sql) or die(mysql_error());


$ppvname_var = "ppvname_asc";
$datum_var = "datum_asc";
$art_var = "art_asc";
$buyrate_var = "buyrate_asc";
$matches_var = "matches_asc";

if ( $order_var == "ppvname ASC" )
{
        $ppvname_var = "ppvname_dsc";
}
else if ( $order_var == "ppvname DESC" )
{
        $ppvname_var = "ppvname_asc";
}

if ( $order_var == "datum ASC" )
{
        $datum_var = "datum_dsc";
}
else if ( $order_var == "datum DESC" )
{
        $datum_var = "datum_asc";
}

if ( $order_var == "art ASC" )
{
        $art_var = "art_dsc";
}
else if ( $order_var == "art DESC" )
{
        $art_var = "art_asc";
}

if ( $order_var == "buyrate ASC" )
{
        $buyrate_var = "buyrate_dsc";
}
else if ( $order_var == "buyrate DESC" )
{
        $buyrate_var = "buyrate_asc";
}

if ( $order_var == "matches ASC" )
{
        $matches_var = "matches_dsc";
}
else if ( $order_var == "matches DESC" )
{
        $matches_var = "matches_asc";
}




?>
<form name="search_form" method="POST" action="test2.php">
Search: <input type="text" name="search_box" value="" />
<input type="submit" name="search" value="Suchen"/>

</form>
<table width="70%" cellpadding="5" cellspacing="5">
<tr>

<td>Veranstaltung <a href="test2.php?order_var=ppvname_asc">▼</a> <a href="test2.php?order_var=ppvname_dsc">▲</a></td>
<td>Datum <a href="test2.php?order_var=datum_asc">▼</a> <a href="test2.php?order_var=datum_dsc">▲</a></td>
<td>Art <a href="test2.php?order_var=art_asc">▼</a> <a href="test2.php?order_var=art_dsc">▲</a></td>
<td>Buyrate <a href="test2.php?order_var=buyrate_asc">▼</a> <a href="test2.php?order_var=buyrate_dsc">▲</a></td>
<td>Matches <a href="test2.php?order_var=matches_asc">▼</a> <a href="test2.php?order_var=matches_dsc">▲</a></td>

</tr>

<?php while ($row = mysql_fetch_array($query)) { ?>

<tr>



<td><?php echo "<a href=\"../downloads/".$row['link']. "\">".$row['ppvname']."</a>"; ?></td>
<td><?php echo $row['datum']; ?></td>
<td><?php echo $row['art']; ?></td>
<td><?php echo $row['buyrate']; ?></td>
<td><?php echo $row['matches']; ?></td>

</tr>


<?php } ?>

</table>




<?php

$result = mysql_query("SELECT id, datum, art, buyrate, matches FROM PPVs");
$menge = mysql_num_rows($result);

//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;

//Ausgabe der Seitenlinks:
echo "<div align=\"center\">";
echo "<b>Seite:</b> ";


//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
   {
   $b = $a + 1;

   //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
   if($seite == $b)
      {
      echo "  <b>$b</b> ";
      }

   //Aus dieser Seite ist der User nicht, also einen Link ausgeben
   else
      {
      echo "  <a href=\"?seite=$b\">$b</a> ";
      }


   }
echo "</div>";
?>
 
Du musst deine GET-Parameter in der URL dynamisch anpassen, je nachdem ob jetzt sortiert, geblättert oder sonstwas wurde.
 
Die Get-Parameter in der URL fehlen beim klick auf den Pager.

Beispiel:
test2.php?order_var=ppvname_dsc (Nach sortieren)
test2.php?seite=2 (Nach Pager klick)

Muss aber so aussehen:

test2.php?order_var=ppvname_dsc&seite=2

Folgende Zeile muss angepasst werden:

echo " <a href=\"?seite=$b&order_var=$_GET["order_var"]\">$b</a> ";

Ebenso fehlt dir auch der Seiten Parameter beim Sortieren
 
Zuletzt bearbeitet:
apnotix schrieb:
Die Get-Parameter in der URL fehlen beim klick auf den Pager.

Beispiel:
test2.php?order_var=ppvname_dsc (Nach sortieren)
test2.php?seite=2 (Nach Pager klick)

Muss aber so aussehen:

test2.php?order_var=ppvname_dsc&seite=2

Folgende Zeile muss angepasst werden:

echo " <a href=\"?seite=$b&order_var=$_GET["order_var"]\">$b</a> ";

Ebenso fehlt dir auch der Seiten Parameter beim Sortieren
danke für die Antwort, aber habe das jetzt geändert und bekomme diese Meldung:
Parse error: syntax error, unexpected '"', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /users/testpage500/www/test2.php on line 206
 
@borklaser:

Sorry, mein Fehler. Muss so heißen:

Code:
echo " <a href=\"?seite=$b&order_var=".$_GET["order_var"]."\">$b</a> ";
 
Ok danke das mit den sortieren & seiten klappt jetzt.

Aber wenn ich jetzt was suche und beim ergebnis der Suche auf die 2. Seite gehe kommt diese Meldung:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'LIMIT 2, 2' at line 1
 
borklaser schrieb:
Ok danke das mit den sortieren & seiten klappt jetzt.

Aber wenn ich jetzt was suche und beim ergebnis der Suche auf die 2. Seite gehe kommt diese Meldung:

Das liegt daran, das der GET Parameter definiert ist und leer ist. Genau diesen Fall fängst du in deinem Switch Case nicht ab.
Füg ein

Code:
default:
   $order_var = "ppvname ASC";
   break;

in dein Switch Case ein

Andere Lösung wäre:

Code:
echo " <a href=\"?seite=$b&order_var=".($_GET["order_var"] == "" ? "ppvname_asc" : "")."\">$b</a> ";

Dies prüft ob der GET Parameter leer ist ansonsten wird dein Default eingefügt

Edit fehler...:

Code:
echo " <a href=\"?seite=$b&order_var=".($_GET["order_var"] == "" ? "ppvname_asc" : $_GET["order_var"])."\">$b</a> ";
 
Zuletzt bearbeitet:
habe jetzt
Code:
    echo " <a href=\"?seite=$b&order_var=".($_GET["order_var"] == "" ? "ppvname_asc" : "")."\">$b</a> ";
rein gemacht jetzt kann ich was suchen, ein ergebnis wird angezeigt soweit ok. aber da gibts noch ne 2. seite (eig unnötig, weil nur ein ergebnis) und auf der 2. seite wird aus der normalen tabelle also ohne suche die 2. seite mit daten angezeigt. wenn ich wieder auf die 1. seite will nach der suche kommt:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'LIMIT 0, 2' at line 1

EDIT:
OK hab deinen geänderten code jetzt drin und wenn ich dann wieder auf die 1. seite bei der suche gehe kommt kein fehler sondern eben die ersten beiden zeilen aus der DB.
will aber das bei der suche NUR die ergebnisse angezeigt werden und nur wenn nötig eine 2. seite angezeigt wird und da dann die scuhe weitergeht und nicht die zeilen aus der db nachd er is geordnet wieder kommen.
etwas kompliziert erklärt.
 
Zuletzt bearbeitet:
Das Problem liegt in dieser Zeile:

Code:
//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;

In deinem Fall ist jetzt $menge = 1 und $eintraege_pro_seite = 2

1 durch 2 = 0,5.

Somit geht er in die For Schleife, weil 0 kleiner als 0.5 ist.

Benutze an der Stelle die Funktion Floor:

http://www.php.net/manual/de/function.floor.php

Edit:

Das Problem welches bei der Suche auftritt ist, dass der Suchparameter in deinem Fall per POST an dein PHP Script gesendet wird. Sobald du deine Seite wechsels, geht dieser POST Parameter verloren.

Ändere folgende Zeile:

Code:
<form name="search_form" method="POST" action="test2.php">

in

Code:
<form name="search_form" method="GET" action="test2.php">

Desweiteren alle Zeilen mit "$_POST" in "$_GET"
 
Zuletzt bearbeitet:
Ich werde ja irgendwie das Gefühl nicht bloß, dass sich hier jemand seine Hausaufgaben machen lässt... Im dritten Thread zum gleichen Thema... Und Deine Fragen lassen vermuten, dass Du immer noch nicht verstanden hast was Du da tust. Evtl. solltest Du mal versuchen Dich selbst damit zu beschäftigen und das Thema zu verstehen.

Die Fehlermeldungen geben Dir ja sogar schon Info wo es harkt. Versuch mal die Fehler zu finden durch Ausgabe der strings/sqls etc. im Zweifel oder durch richtiges debuggen.
 
Zuletzt bearbeitet:
apnotix schrieb:
Das Problem liegt in dieser Zeile:


Das Problem welches bei der Suche auftritt ist, dass der Suchparameter in deinem Fall per POST an dein PHP Script gesendet wird. Sobald du deine Seite wechsels, geht dieser POST Parameter verloren.

Ändere folgende Zeile:

Code:
<form name="search_form" method="POST" action="test2.php">

in

Code:
<form name="search_form" method="GET" action="test2.php">

Desweiteren alle Zeilen mit "$_POST" in "$_GET"

Hab ich gemacht das Problem ist immer noch da :(
 
@borklaser

Schau dir mal die Änderung am Pager an, dort hast du sehr wahrscheinlich noch was vergessen.
 
Das mit dem Floor? Habe das auf der seite angeguckt habs dann so gemacht, aber das ist sicher falsch habs nicht so verstanden

Code:
//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;
echo floor(-0.5);

Somit geht er in die For Schleife, weil 0 kleiner als 0.5 ist.
Also muss 0 größer sein deswegen -0,5? Also hab das gemacht jetzt steht da -1 aber funktioniert immer noch nicht.
 
Wie kommst du denn auf -0.5?
Dir ist schon klar, dass wenn du "echo floor(-0.5);" schreibst, dass das keinen Einfluss auf die Programmlogik hat?
 
PHP lernen?
 
Ich habe dir die Lösung oben genau aufgeschrieben und sogar die Methoden Doku dazu verlinkt.
Mehr kann ich da auch nicht machen, so wirst du es sonst nie lernen.

Dir fehlen eindeutig die kompletten PHP Grundlagen. Du verstehst die einfachsten Konstrukte in deinem Programm nicht einmal.

Die folgende Seite sollte dir wenigstens die PHP Grundlagen beibringen:

http://php.lernenhoch2.de/lernen/

Und lese noch einmal den kompletten Thread um zu verstehen, wieso was so gemacht werden muss.
 
Zurück
Oben