Archivlink: javarea.de Forum > PHP, MySQL & CGI > Datensätze mit php sortieren
Vollständigen Link anzeigen: javarea.de Forum > PHP, MySQL & CGI > Datensätze mit php sortieren
Pages: [1]
| geschrieben von pyscho am 09.02.2009 - 12:03 |
hallo,
ich habe folgenden Code geschrieben, dies funktioniert fast so wie ich haben möchte, jedoch habe ich einen haken..
Wenn ich die Datensätze mit php in mehrere Seiten ausgebe und durch via klick auf die Detailansicht klicke wird eine ID per GET variablen an die URL angehängt um später dadurch die Detailansicht zu generieren bzw. an zu zeigen.
Auch die Sortierung der Datensätze funktionieren ASC und DESC mäßig je nach dem welchen Spaltennamen angeklickt wird, da durch die GET variablen die sortier art ( ASC oder DESC ) übergeben wird.
Das Problem besteht jedoch die beiden GET Variablen von der Detailansicht und der Spaltennamen mit einander zu verknüpfen falls die Ausgabe der Datensätze in der ersten oder die danach folgenden Seiten sind.
Beispiel:
habe 10 einträge insgesamt. In der ersten Seite werden durch Limit die ersten 7 Einträge angezeigt jedoch kann ich die GET Variablen nicht mit einander Verknüpfen wie oben angedeutet, dies kann man auch sehen dass die Ausgabe in der zweiten Seite nach der Sortierung ( ASC oder DESC ) plötzlich wieder 7 Zeilen wird obwohl eigentlich 3 Zeilen also rest der gesamten Einträge angezeigt werden soll.
Wie kann ich die Sortierung und die Detailansicht mit einander verknüpfen so dass die Sortierung der Datensätze bei der Ausgabe nur die jeweiligen Datensätze auf der aktuellen seite sortiert ?
der Code :
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
|
<?php
include('inc/connect.inc.php');
$sql = "SELECT * FROM job";
$result = mysql_query($sql);
$eintragsanzahl = mysql_num_rows($result);
$seitenanzahl = ceil($eintragsanzahl / 7);
$maxEintraege = 7;
$sql2 = "SELECT * FROM job ";
if(isset($_GET['sort']))
$sql2 .= " ORDER BY ".$_GET['sort'];
if(isset ($_GET['sortorder']))
$sql2 .= " ".$_GET['sortorder'];
if($_GET['page'] == 1 || !isset($_GET['page'])) {
$sql2 .= " LIMIT 0,".$maxEintraege.";";
} else if($_GET['page'] > 1) {
$start = ($_GET['page']*$maxEintraege)-$maxEintraege;
$sql2 .= " LIMIT $start,$maxEintraege;";
}
$result2 = mysql_query($sql2);
echo "<div align='center'>Es sind insgesamt $eintragsanzahl Einträge in der Datenbank</div>";
echo "<div align='center'>Seite: ";
for($i = 1; $i<=$seitenanzahl; $i++) {
echo "<a href='jobangebote_ausgabe.php?page=".$i."'>".$i."</a> ";
}
echo "</div>";
echo "<br />";
echo '<table width="680px" border="1px" align="center" cellpadding="0px" cellspacing="0px">
<tr>
<td width="22px">';
echo "<a href='jobangebote_ausgabe.php?sort=ID&sortorder=".($_GET['sortorder']=="DESC" ? "ASC":"DESC")."'>ID</a>";
echo '</td>
<td width="69px">';
echo "<a href='jobangebote_ausgabe.php?sort=jobname&sortorder=".($_GET['sortorder']=="DESC" ? "ASC":"DESC")."'>Jobname</a>";
echo '</td>
<td width="65px">';
echo "<a href='jobangebote_ausgabe.php?sort=branche&sortorder=".($_GET['sortorder']=="DESC" ? "ASC":"DESC")."'>Branche</a>";
echo '</td>
<td width="60px">';
echo "<a href='jobangebote_ausgabe.php?sort=arbeitszeiten&sortorder=".($_GET['sortorder']=="DESC" ? "ASC":"DESC")."'>Arbeitszeiten</a>";
echo '</td>
<td width="200px">';
echo "<a href='jobangebote_ausgabe.php?sort=arbeitstage&sortorder=".($_GET['sortorder']=="DESC" ? "ASC":"DESC")."'>Arbeitstage</a>";
echo '</td>
<td width="50px">';
echo "<a href='jobangebote_ausgabe.php?sort=gehalt&sortorder=".($_GET['sortorder']=="DESC" ? "ASC":"DESC")."'>Gehalt</a>";
echo '</td>
<td width="80px">';
echo "<a href='jobangebote_ausgabe.php?sort=betreuer&sortorder=".($_GET['sortorder']=="DESC" ? "ASC":"DESC")."'>Betreuer</a>";
echo '</td>
<td width="90px"><div align="center">Detailansicht</div></td>
</tr>';
while($row = mysql_fetch_array($result2)) {
echo '<tr>
<td width="22px">'.$row[ID].'</td>
<td width="69px">'.$row[jobname].'</td>
<td width="65px">'.$row[branche].'</td>
<td width="60px">'.$row[arbeitszeiten].'</td>
<td width="200px">'.$row[arbeitstage].'</td>
<td width="50px">'.$row[gehalt].'</td>
<td width="80px">'.$row[betreuer].'</td>
<td width="90px"><div align="center">';
if($_GET['page'] > 1 && (isset($_GET['id']) || !isset($_GET['id']))) {
echo '<a href="jobangebote_ausgabe.php?page='.($i-1).'&id='.$row[ID].'">Detailansicht</a>';
} else {
echo '<a href="jobangebote_ausgabe.php?page='.($i-2).'&id='.$row[ID].'">Detailansicht</a>';
}
echo '</div></td>
</tr>';
}
echo '</table>';
echo "<br />";
echo "<div align='center'>Seite: ";
for($i = 1; $i<=$seitenanzahl; $i++) {
echo "<a href='jobangebote_ausgabe.php?page=".$i."'>".$i."</a> ";
}
echo "</div>";
echo "<br />";
echo "<div align='center'>Es sind insgesamt $eintragsanzahl Einträge in der Datenbank</div>";
?>
|
Vielen Dank
cakalman |
| geschrieben von Klaush am 09.02.2009 - 12:54 |
Du kannst so viele $_GET[] Variablen verknüpfen wie du willst, wichtig ist nur wie du die Variablen auf Werte oder Verfügbarkeit prüfst und das machst du bereits mit isset().
Wenn du 18 Beiträge hast und 7 davon sollen pro Seite angezeigt werden, dann müssen es 3 Seiten sein. Erste Seite 7, zweite Seite 7 und die dritte Seite hat dann den Rest von 4 Einträge. Wichtig ist beim Blättern, das du die Berechnung der Einträge via Datenbank richtig übergibst und neu errechnen lassen musst.
Dein gesamter Code sieht etwas verwirrend aus, so zb auch dieses hier:
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
|
<?
if($_GET['page'] > 1 && (isset($_GET['id']) || !isset($_GET['id']))) {
echo '<a href="jobangebote_ausgabe.php?page='.($i-1).'&id='.$row[ID].'">Detailansicht</a>';
} else {
echo '<a href="jobangebote_ausgabe.php?page='.($i-2).'&id='.$row[ID].'">Detailansicht</a>';
}
?>
|
Das schließt sich doch gegenseitig aus: && (isset($_GET['id']) || !isset($_GET['id']), also ist die Abfrage einfach nur if($_GET['page'] > 1) fertig aus.
Hinzu kommt das deine Blätterfunktion keine Restedivision beinhaltet, doch das ist zwingend erforderlich um die tatsächliche Seitenanzahl zu ermitteln. Daraus ergibt sich dann nämlich folgendes:
| PHP-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
|
<?
if ($_GET['page'] == 0)
$_GET['page'] = 1;
$maxEintraege = 7
if($_GET['page'] == 1)
{
$start = ($_GET['page']-1)*$maxEintraege;
$pages = (int)($gesamtEintraege/$maxEintraege);
if (($gesamtEintraege % $maxEintraege)>0) ++$pages;
for ($i=1; $i<=$pages; ++$i)
$anzseiten = $i+1;
}
$sql2 .= " LIMIT $start,$maxEintraege;";
?>
|
Wichtig ist dabei, dass du bereits die Gesamtanzahl deiner Beiträge stehts kennst und das auszulesen sollte kein Problem sein.
|
|