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

Sortieren

Status
Für weitere Antworten geschlossen.

philipp

Neues Mitglied
Also ich schreib grad ein Gästebuch mit PHP u. MySQL

beim abfragen der datensätze steht der älteste oben, der nächste an 2. stelle und der jüngste ganz unten.

würde ich nun so sortieren, dass neue datensätze oben eingefügt werden, würde es doch andersrum sein, oder?

ich hab ein date-feld, aber da is glaub ich nur Y-M-D drinn, also keine zeit. wird also schwer... wie kann ich das sonst noch machen?

und is zwar keine datenbankspezifische frage aber ich will nicht so viele threads eröffnen:

alle beiträge werden auf der selben seite angezeigt, wie limitiere ich das auf ... 6 zum beispiel? und dann unten die anderen seitennummern als hyperlinks und dort wieder jeweils 6 stück

Bitte helft mit ;)
 
Werbung:
bei mir sieht das so aus:
[php:1:0490e25e58]<?php
//abfrage für die seiten
$query = "SELECT count(gb_id) AS entries FROM mod_gb";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$sites = ceil($row['entries']/5);
if($_GET['s']>=$sites) $_GET['s'] = $sites-1;
if($_GET['s']<0) $_GET['s'] = 0;
//abfrage für auflistung
$query = "SELECT * FROM mod_gb ORDER BY timestamp DESC LIMIT ".(intval($_GET['s'])*5).", 5";
$result = mysql_query($query);
?>[/php:1:0490e25e58]
ORDER BY ist hier zum ordnen und LIMIT zum sagen, was angezeigt werden soll
 
Werbung:
in den oberen paar zeilen lese ich einfach aus, wie viele einträge es hat, teile durch 5 und runde dann auf die nächste ganzzahl, und schon weiss ich, wie viele seiten ich habe...
zum ausgeben nehm ich dann einfach die seitenanzahl-1*5 und die anzahl 5 und ich krieg das erwartete ergebnis... beei limit musst du nämlich "start" und "lengh" angeben...
 
Werbung:
Fätzminator schrieb:
bei mir sieht das so aus:
[php:1:d7d9b0a2c1]<?php
//abfrage für die seiten
$query = "SELECT count(gb_id) AS entries FROM mod_gb";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$sites = ceil($row['entries']/5);
if($_GET['s']>=$sites) $_GET['s'] = $sites-1;
if($_GET['s']<0) $_GET['s'] = 0;
//abfrage für auflistung
$query = "SELECT * FROM mod_gb ORDER BY timestamp DESC LIMIT ".(intval($_GET['s'])*5).", 5";
$result = mysql_query($query);
?>[/php:1:d7d9b0a2c1]
ORDER BY ist hier zum ordnen und LIMIT zum sagen, was angezeigt werden soll

$sites = ceil($row['entries']/5);
wofür steht bei dir die 5?


if($_GET['s']>=$sites) $_GET['s'] = $sites-1;
if($_GET['s']<0) $_GET['s'] = 0;

wofür?
geht doch nicht, oder?
(ich nehm mal an, dass s der get für die seitenzahl is)

$query = "SELECT * FROM mod_gb ORDER BY timestamp DESC LIMIT ".(intval($_GET['s'])*5).", 5";

WOW...
okay... ab (intval...) vertseh ich da nix
 
also diesen code findest du unter http://www.jungwachtbuelach.ch/?site=gb
$sites = ceil($row['entries']/5);
wofür steht bei dir die 5?
sagen wir ich habe 14 einträge... pro seite will ich 5 angucken... nun teile ich also mit "$row['entries']/5" durch 5. dies gibt 2.8! mit ceil() kann ich dann noch die nächsthöhere ganzzahl herausfinden und schon habe ich die seitenzahlen ;) (mit "for" ausgegeben)! anmerkung: $row['entries'] --> "SELECT count(gb_id) AS entries FROM mod_gb" --> da habe ich eben die anzahl aller einträge ("count(gb_id)") in entries ausgeben lassen ("AS entries")...
if($_GET['s']>=$sites) $_GET['s'] = $sites-1;
if($_GET['s']<0) $_GET['s'] = 0;

wofür?
geht doch nicht, oder?
(ich nehm mal an, dass s der get für die seitenzahl is)
nun habe ich die seitenanzahl... ist die seite kleiner, grösser, oder nicht definiert, wird 1 zugewiesen... da dies aber nicht geht, wird immer noch die seitenanzahl-- gemacht! (von der formel her, die du in der nächsten frage gestellt hast)... wenn wir also 3 seiten haben, haben wir die seitenzahlen 0 - 2 (intern), aber als link 1 - 3 (eben, wird ja -- gerechnet)
$query = "SELECT * FROM mod_gb ORDER BY timestamp DESC LIMIT ".(intval($_GET['s'])*5).", 5";

WOW...
okay... ab (intval...) vertseh ich da nix
wie schon gesagt, kann ich mit limit nur bestimmte einträge anzeigen lassen --> mit limit 0, 5 die ersten 5, mit limit 5, 5 die einträge 5 - 9 (der index beginnt bei 0), mit 99, 150 gebe ich ab dem hundertsten eintrag (der erste parameter) 150 einträge aus... LIMIT (intval($_GET['s'])*5), 5 macht also folgendes: der 2. parameter besagt, dass 5 einträge angezeigt werden sollen. mit intval() mach ich einen text zu einer zahl, dh es kann keine fehlermeldung kommen (wenn ich zb "adfg" in $s übergebe, wird es 0)! wenn ich die erste seite anzeigen will, will ich ja alle einträge ab 0, dann wird 0*5 ("(seitenzahl-1)*5") gerechnet. für seite 2 wird 1*5 gerechnet, dh er beginnt ab index 5, also dem 6. eintrag...

ich hoffe, dass ich es wenigstens halbwegs verständlich erklärt habe, sonst versuch ichs nochmals - also frag einfach ;ugl

mfg, fätzminator

PS: den code hab ich selber geschrieben, dh die überlegung mit den seitenzahlen hatte ich auch nicht in 5min...
 
Werbung:
und unten dann das drann?

while ($seitennummern = mysql_fetch_array($ergebnis)) {
$seitennummern2 = $seitennummern + 1;
echo "Seite: ";
echo "<a href=\"?seite=$seitennummern\">$seitennummern2</a> | ";
}

naja hab nen fehler in dieser zeile
while ($table = mysql_fetch_array($sql2))
---
$sql2 = "SELECT * FROM eintraege ORDER BY date DESC LIMIT ".(intval($_GET['seite'])*5).", 5";
achja, sorry, dass ich das so exact abschreibe, aber das is für mich schon sehr schwer.
 
sorry, bin das aus einem anderes forum gewöhnt, dass es automatisch zusammengefügt wird. ausserdem sieht man sonst ja auch nicht, dass ein neuer beitrag da is ;)

naja, sorry nochmal.

edit:
also jetz is mir noch ein problem aufgefallen
ich hab in der datenbanktabelle ein date-feld nach dem die posts sortiert werden. nur hab ich depp dafür TEXT genommen und lasse das datum so einfügen:
$datum = date('d . m . Y'.' - '."G:i:s");
absteigend sortiert hat das ja gestimmt... bis jetz.
wenn ich um 9:00 einen beitrag geschrieben hab und um 9:02 einen.

dann war der um 9:02 vorher, klar.

aber wenn jetz einer um 10:00 kommt steht der ganz unten ^^

und das geht auch nicht:
1:
[php:1:583411cb17]<?php
//Anzahl der eintraege von eintraege(DB) holen
$sql = 'SELECT count(ID) AS eintraegeanzahl FROM eintraege';
$ergebnis = mysql_query($sql);
$row = mysql_fetch_array($ergebnis);
$anzahlseiten = ceil($row['eintraegeanzahl']/5);
if (isset($_GET['seite'])) {
$seite = $_GET['seite']; } else { $seite = 0; }
?>[/php:1:583411cb17]
2:
[php:1:583411cb17]<?php
$sql2 = mysql_query('SELECT * FROM eintraege ORDER BY date DESC LIMIT '.(intval($_GET['seite'])*5).', 5');
?>[/php:1:583411cb17]
3:
[php:1:583411cb17]<?php
while ($seitennummern = mysql_fetch_array($ergebnis)) {
$seitennummern2 = $seitennummern + 1;
echo "Seite: ";
echo "<a href=\"?seite=$seitennummern\">$seitennummern2</a> | ";
}
?>[/php:1:583411cb17]

da is doch sicher so ein saublöder fehler drinn(er zeigt mir das einfach nicht an)
 
Werbung:
am besten post ich einfach mal den gesamten code zum ausgeben des gb's...
[php:1:194708d2fe]<?php
$query = "SELECT count(gb_id) AS entries FROM mod_gb";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$sites = ceil($row['entries']/5);
if($_GET['s']>=$sites) $_GET['s'] = $sites-1;
if($_GET['s']<0) $_GET['s'] = 0;
$query = "SELECT * FROM mod_gb ORDER BY timestamp DESC LIMIT ".(intval($_GET['s'])*5).", 5";
$result = mysql_query($query);
//******************************
echo "

seiten ";
for($i=0; $i<$sites; $i++) {
if($i!=$_GET['s']) echo "<a href=\"?site=gb&amp;s=".$i."\">";
echo $i+1;
if($i!=$_GET['s']) echo "</a>";
if($i+1<$sites) echo " | ";
}
echo "\n</p>";
//******************************
while($row = mysql_fetch_array($result)) {
//******************************
//AUSGABE DER EINTRÄGE
//******************************
}
//******************************
?>[/php:1:194708d2fe]
überall wo //****** ist, hab ich htmlcode gelöscht... dh das ganze tabellendesign (siehe link)
 
danke echt super von dir, jetz muss ich das nurnoch richtig verstehen ;). ich schau mal mit deiner vorlage was ich falsch haben könnte. komplett kopieren will ichs eigentlich nicht

whohooo das is ein crash-script:
while ($seitennummern = $row) {
$seitennummern2 = "++$seitennummern";
echo "Seite: ";
echo "<a href=\"?seite=$seitennummern\">$seitennummern2</a> | ";
}
hehe
 
$seitennummern2 ist ja nur $seitennummern+1...!?
warum machst du dann nicht <a href=\"?seite=".$seitennummern."\">".$seitennummern+1."</a>
 
Werbung:
[php:1:cce56f63bc]<?php
$sql = 'SELECT count(ID) AS eintraegeanzahl FROM eintraege';
$ergebnis = mysql_query($sql);
?>[/php:1:cce56f63bc]

[php:1:cce56f63bc]<?php
while ($seitennummern = @mysql_fetch_array($ergebnis)) {
echo "Seite: ";
echo "<a href=\"?seite=$seitennummern\">$seitennummern+1</a> | ";
}
?>[/php:1:cce56f63bc]

ich dachte eher an

[php:1:cce56f63bc]<?php
while ($seitennummern = @mysql_fetch_array($ergebnis)) {
echo "Seite: ";
echo "<a href=\"?seite=$seitennummern['eintraegeanzahl']\">$seitennummern['eintraegeanzahl']+1</a> | ";
}
?>[/php:1:cce56f63bc]

aber das mag er nicht.

naja hier mein ganzer code:(sind noch viele bugs und fehler drinn, zb das ! gleich am anfang.)
[php:1:cce56f63bc]<?php
<?php
//WENN eintrag uebermittelt wurde
if (!isset($_POST['posting'])) {
//DANN mit MySQL verbinden
@mysql_connect('localhost', 'root') or die("Datenbankprogramm reagiert nicht");
//DANN Datenbank laden
@mysql_select_db('juniorcup') or die("Datenbank nicht erreichbar");
//Variablen Festlegen
$name = $_POST['name'];
$EMA = $_POST['EMA'];
$posting = $_POST['posting'];
$datum = date('d . m . Y'.' - '."G:i:s");
//if ($posting = "*<*>*") exit('

HTML Tags sind nicht erlaubt!

//Entfernen sie alle &quot;<&quot; und &quot;>&quot; aus ihrem Beitrag.


//<a onClick="history.back()" onMouseOver="this.style.cursor='."'hand'".'">Zur&uuml;ck</a>
//</p>');
//eintrag in der Datenbank vornehmen
@mysql_query("INSERT INTO eintraege SET
name = '$name',
EMA = '$EMA',
posting = '$posting',
date = '$datum'") or die("Daten konnten nicht eingef&uuml;gt werden"); } else {
echo '
<h1>G&auml;stebuch</h1>


Willkommen im G&auml;stebuch!</p>
<fieldset>
<legend>Eintrag vornehmen?</legend>
<form action="index.php?go=GB" method="POST">
<p align="left">Name:<input type="text" name="name" maxlength="25"/>
E-M@il:<input type="text" name="EMA" maxlength="35"/>
<input type="submit" value="Eintragen" /></p>
<p align="left">Dein Eintrag:(Das G&auml;stebuch ist noch nicht voll funktionsf&auml;hig.)

<textarea cols="40" rows="7" name="posting" style="margin-left:38px" wrap="physical"></textarea></p>
</form>
</fieldset>


Tragen sie bitte ihren Namen, ihre E-M@il und eine Nachricht ein</p>

'; }
//eintraege aus Datenbank holen - Verbinden mit Datenbank
@mysql_connect('localhost', 'root') or die("Datenbankprogramm reagiert nicht");
@mysql_select_db('juniorcup') or die("Datenbank nicht erreichbar");
//Anzahl der eintraege von eintraege(DB) holen
$sql = 'SELECT count(ID) AS eintraegeanzahl FROM eintraege';
$ergebnis = mysql_query($sql);
$row = mysql_fetch_array($ergebnis);
$anzahlseiten = ceil($row['eintraegeanzahl']/5);
if (isset($_GET['seite'])) {
$seite = $_GET['seite']; } else { $seite = 0; }
//HTML der Gaestebucheintraege erzeugen
$sql2 = mysql_query('SELECT * FROM eintraege ORDER BY date DESC LIMIT '.(intval($seite)*5).', 5');
while ($table = @mysql_fetch_array($sql2)) {
$ausgabe = nl2br(wordwrap(htmlentities($table['posting']),55,"
",1));
echo '
<table class="GB" cellspacing="0px" cellpadding="0px" width="550px">
<tr>
<td class="GBH" width="550px" height="68px">
<div class="gbhdiv">
'.$table['name'].' schreibt(Datum: '.$table['date'].')
</div>
</td>
</tr>
<tr>
<td class="GBP" width="550px">
<div class="gbpdiv">'.$ausgabe.'</div>
</td>
</tr>
<tr>
<td class="GBB" width="550px" height="37px">

</td>
</tr>
</table>


';}
while ($seitennummern = @mysql_fetch_array($ergebnis)) {
echo "Seite: ";
echo "<a href=\"?seite=$seitennummern\">$seitennummern+1</a> | ";
}
//ENDE GAESTEBUCH
?>
?>[/php:1:cce56f63bc]

es werden nun nur 5 angezeigt aber keine ahnung wies mit dem rest aussieht... die links erscheinen nicht unten
 
wie wäre es mit
[php:1:fb24ff2158]<?php
$seitennummern = ceil($row['eintraegeanzahl']/5);
if($_GET['seite']>=$seitennummern) $_GET['seite'] = $seitennummern-1;
if($_GET['seite']<0) $_GET['seite'] = 0;

echo "

seiten ";
for($i=0; $i<$seitennummern; $i++) {
echo "<a href=\"?site=gb&amp;seite=".$i."\">".$i+1."</a>";
if($i+1<$seitennummern) echo " | ";
}
echo "\n</p>";
?>[/php:1:fb24ff2158]
 
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in C:\....\guestbook.inc.php on line 75

75:
echo "<a href=\"go=GB&amp;seite=".$i."\">".$i+1."</a>";

der stimmz doch... ich versuch mal heredoc, moment


edit: ja das basst jetz aber jetz bekomm ich

Parse error: syntax error, unexpected $end in C:\........\guestbook.inc.php on line 81

es stimmen aber alle klammern :twisted:
 
Werbung:
1. es ist echo "<a href=\"?go=GB&amp;seite=".$i."\">".$i+1."</a>";
2. wenn der fehler immer noch existiert... was steht auf der zeile davor?
 
der fehler muss da drinn sein, weil wenn ich den teil weg-commente dann is es okay.

[php:1:6aa0a38340]<?php
echo "

Seite: ";
for($i=0; $i<$seitennummern; $i++) {
echo <<<ABAB
<a href=\"?go=GB&amp;seite=$i">.$i+1</a>
ABAB;
if($i+1<$seitennummern) { echo " | "; }
}
echo "\n</p>";
?>[/php:1:6aa0a38340]
edit: der punkt vor $i+1 war zwar zuviel, aber daran lags auch ned

unexpected end..

edit2: das überflüssige escapen war auch ned schuld
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben