Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Reihenfolge in GB-Einträgen zeitlich sortieren

Diskussion: Reihenfolge in GB-Einträgen zeitlich sortieren im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo, liebe HaBos. Ich hab im Netz mal ein wenig rumgestöbert (bin totale php-Niete), und mir aus verschiedenen Scripts ...

Antwort
Alt 18.02.06, 11:51   #1 (permalink)
 
Registriert seit: 08.07.03
tine Leistung: Facit NTK
Likes: 0
Standard Reihenfolge in GB-Einträgen zeitlich sortieren

Anzeige

Hallo, liebe HaBos.

Ich hab im Netz mal ein wenig rumgestöbert (bin totale php-Niete), und mir aus verschiedenen Scripts sozusagen ein Gästebuch zusammengebaut (wirklich nichts besonderes, ohne Admin-Oberfläche, einfach nur ein Schript, welches den Inhalt der Textboxen an eine php Seite übermittelt). Es funktioniert auch alles wunderbar, aber ich weiß nicht, wie ich die Eintrags-Reihenfolge so ändern kann, dass immer der neueste Eintrag oben steht...Kann mir da jemand helfen?!

Hier der verwendete Code:

Eintragen.php

Code:
<table>
<form action=gastebuch.php method=post>
<textarea cols=50 rows=1 name="namedestyps">Name</textarea>
<p>
<textarea cols=50 rows=10 name="text">Nachricht</textarea>
<p>
<textarea cols=50 rows=1 name="homepage">Homepage</textarea>
<p>
<textarea cols=50 rows=1 name="email">eMail</textarea>
<p>
<input type=submit value="Eintragen">
</form>
</table>
Gastebuch.php
Code:
<table>
<a href="eintragen.php">Eintragen</a>
<?
$date = date("j.n.y");

if($text != "") {

$fp=fopen("text.php","a");
fwrite ($fp, "<table>$namedestyps $date <a href='$homepage' target='_blank'>$homepage</a> <a href='mailto:$email'>mail</a><br> $text <hr width='50%'></table>");
fclose($fp);
}

$array=file("text.php");
$lines=sizeof($array);

$text=file("text.php");
$lines=sizeof($text);

for($i=0;$i<$lines;$i++) {
echo $text[$i];
}

?>
</table>
Die Datei "Text.php" ist leer, (bzw. wird mit den Einträgen gefüllt)

Kann mir jemand sagen, wie ich die Einträge so anzeigen lasse, dass der Neueste immer oben ist?! (Wenn möglich, mit Erklärung für Dummies) :rolleyes:

Wäre wirklich klasse.

Danke für's Lesen. Tine
tine ist offline   Mit Zitat antworten
Alt 18.02.06, 11:56   #2 (permalink)
 
Registriert seit: 15.08.03
flame Leistung: Facit NTK
flame eine Nachricht über ICQ schicken
Likes: 0
Standard

mal so nebenbei, hast du kein MysQL, damit wäre das um einiges einfacher..

Aber es geht auch mit Array. Wenn du deine Einträge also in ein Array speicherst (wie du das schienbar machst, wie ich im kurzen überfliegen gesehen hab), so kannst du dein array auch sortieren lassen.

Daui gibt es mehrere funktionen, und möglichkeiten..

Am besten schaust du dir diese seite mit den dazugehörigen querverwesen mal an.
http://de.php.net/manual/de/function.asort.php
flame ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 18.02.06, 12:17   #3 (permalink)
Themenstarter
 
Registriert seit: 08.07.03
tine Leistung: Facit NTK
Likes: 0
Standard

O...kay...*kopfkratz*...danke schonmal für die flinke Hilfe, aber ich bin scheinbar noch nicht ganz ausgeschlafen. Meinst du das Array von file?
Das bleibt doch immer nur eins. Wo soll ich das sortieren?

Oder meinst du date? (< Is das eigentlich ein Array?!) Sorry, wie gesagt ich hab echt null Plan.

Danke für den Link, ich habe mal etwas über die verschiedenen Sortier-Funktionen gelesen, und fand das hier irgendwie einleuchtend:
Code:
$order=='asc'
Oder bin ich da komplett auf dem Holzweg?!

Kannst du mir noch einen Denkanstoß geben, bitte?! ?(
tine ist offline   Mit Zitat antworten
Alt 18.02.06, 12:49   #4 (permalink)
 
Registriert seit: 20.01.03
Zwirni Leistung: Z3
Likes: 0
Standard

Da würd ich die Datei text.php oben auffüllen, sprich: Neueinträge immer an den Anfang der Datei statt ans Ende setzen. Geht glaube ich mit dem Schalter "r" bei fopen. Dadurch sind bereits in der Datei die Einträge absteigend sortiert.
Zwirni ist offline   Mit Zitat antworten
Alt 18.02.06, 13:06   #5 (permalink)
Themenstarter
 
Registriert seit: 08.07.03
tine Leistung: Facit NTK
Likes: 0
Standard

Zwirni, ich habe deine Methode gerade mal ausprobiert (mit r+), aber dann wird immer nur ein einziger eintrag angezeigt, bzw. die anderen (nachfolgenden) entries werden alle gelöscht.
tine ist offline   Mit Zitat antworten
Alt 18.02.06, 13:21   #6 (permalink)
 
Registriert seit: 20.01.03
Zwirni Leistung: Z3
Likes: 0
Standard

Dann versuch mal die Einträge immer an den Anfang der Datei zu setzen. Reihenfolge:

1. Datei komplett einlesen und Daten in einem String speichern
2. an den Anfang dieses Strings den neuen Eintrag setzen
3. den kompletten String in der Datei speichern (überschreiben)

So bekommste auch den neuesten Eintrag ganz oben hin.

Wie sieht eigentlich der Text aus den du speicherst? Gibt es da auch einen Unix-Zeitstempel? Evtl. kannste ja die Inhalte in einem Array speichern und dieses dann nach diesem Zeitstempel sortieren lassen. Da gabs irgendeinen Befehl für, fällt mir nur gerade nicht ein. array_sort oder sowas.
Zwirni ist offline   Mit Zitat antworten
Alt 18.02.06, 13:31   #7 (permalink)
 
Registriert seit: 20.07.05
CPU8080 Leistung: Facit NTK
CPU8080 eine Nachricht über ICQ schicken
Likes: 0
Standard

also ich habs jetzt so geschaft allerdings bekommt er probleme wenn er eine mehrzeilkige nachricht verfasst (@tine hab ein paar sachen in der eintrage.php verändert gefiel mir besser kannst es aber auch wieder löschen und wenn du ne sqldb hast, ich hab noch glaub ich ein gb auf dbbasis rumliegen):

eintragen.php
Code:
<table>
<script language="javascript">
function leeren (Wert,Wert2)
{
if (document.bar.elements[Wert2].value == Wert) 
 {
 document.bar.elements[Wert2].value='';
 }
}
</script>
<form name="bar" action=gastebuch.php method=post>
<input type="text" name="namedestyps" value="Name" onclick="leeren('Name','namedestyps')">
<p>
<textarea cols=50 rows=10 name="text" onclick="leeren('Nachricht','text')">Nachricht</textarea>
<p>
<input type="text" name="homepage" value="Homepage" onclick="leeren('Homepage','homepage')">
<p>
<input type="text" name="email" value="Email" onclick="leeren ('Email','email')">
<p>
<input type=submit value="Eintragen">
</form>
</table>
Code:
<table>
<a href="eintragen.php">Eintragen</a><br><br>
<?
$date = date("j.n.y");

if($text != "") {
$fp=fopen("text.php","a");
fwrite ($fp, "<table>$namedestyps $date <a href='$homepage' target='_blank'>$homepage</a> <a href='mailto:$email'>mail</a><br> $text <hr width='50%'></table>
"); //dieser Zeilenumbruch muss hier stehen
echo "Erfolgreich eingetragen";
fclose($fp);
}

$text=file("text.php");
$lines=count($text);
$text = array_reverse ($text); //dreht Array rum.
for($i=0;$i<$lines;$i++) 
{
 echo $text[$i]."<br><br>";
}

?>
</table>


@zwirni modus"r" ist lediglich ein normale read modus s.h. selfphp.de
CPU8080 ist offline   Mit Zitat antworten
Alt 18.02.06, 13:43   #8 (permalink)
Themenstarter
 
Registriert seit: 08.07.03
tine Leistung: Facit NTK
Likes: 0
Standard

@ Zwirni: Ich hab mal eine Zeit mit eingebaut.
Code:
$time = date("h:m");
allerdings habe ich immernoch keinen Blassen, wie man das sortiert, ist da nicht mal was von "ASC" gewesen? Ist mir so ganz grau in Erinnerung.

@CPU8080: Ich hab grad deinen Vorschlag gesehen, und werde es auch sofort mal testen...Und wenn das nicht klappt, geb ich es auf, mir raucht schon die Birne!

Ja, ich hätte die Möglichkeit, das Ganze mit einer DB zu machen, aber ich hab mich davor gescheut, weil ich noch weniger Ahnung von MySQL als von PHP hab...Shame on me, ich weiß.

Edit: CPU8080: ich habe deinen Vorschlag jetzt mal getestet, und wie du schon sagtest, wenn der Eintrag länger ist, werden da leider mehrere draus. Aber danke trotzdem. Ob man das wohl irgendwie hinbekommt, dass ein Eintrag auch wirklich einer bleibt?!
tine ist offline   Mit Zitat antworten
Alt 18.02.06, 13:52   #9 (permalink)
 
Registriert seit: 20.07.05
CPU8080 Leistung: Facit NTK
CPU8080 eine Nachricht über ICQ schicken
Likes: 0
Standard

Zitat:
Original von tine
Edit: CPU8080: ich habe deinen Vorschlag jetzt mal getestet, und wie du schon sagtest, wenn der Eintrag länger ist, werden da leider mehrere draus. Aber danke trotzdem. Ob man das wohl irgendwie hinbekommt, dass ein Eintrag auch wirklich einer bleibt?!
hinkriegen bestimmt irgentwie muss ma gucken, aber vll solltest du dir jetzt erstmal überlegen ob dus mit ner sqldb machst oder einer textdatei
CPU8080 ist offline   Mit Zitat antworten
Alt 18.02.06, 14:02   #10 (permalink)
 
Registriert seit: 20.01.03
Zwirni Leistung: Z3
Likes: 0
Standard

Zitat:
Original von tine
@ Zwirni: Ich hab mal eine Zeit mit eingebaut.
Code:
$time = date("h:m");
allerdings habe ich immernoch keinen Blassen, wie man das sortiert, ist da nicht mal was von "ASC" gewesen? Ist mir so ganz grau in Erinnerung.
Google kennt einige Lösungen: http://www.google.de/search?q=php+array+sortieren
Oder direkt: http://www.php.net/manual/de/ref.array.php
Oder das: http://www.webmaster-resource.de/tri...-sortieren.php
Zwirni ist offline   Mit Zitat antworten
Alt 18.02.06, 14:08   #11 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

Hallo,

es ist ganz leicht, Ihr dürft keine reinen HTML-Tags in der Datei speichern!
Ich habe mir vor einiger Zeit auch ein GB auf File basis gecodet, und stand vor denn selben Problemen. Man hat z.B. das Problem beim IE dass man in einer Textarea einen Zeilenumbruch machen kann. Beim Firefox geht das nicht, der IE fügt dann auch gleich ein Steuerzeichen mit ein /n, und das führt zu einem Zeilenumbruch in der Datei.

Tja, es gibt da noch mehr Probleme die auf einen zukommen.
Ach ja, speichere Dein Datum nicht formatiert, sondern als Unix-Timestamp mit der Funktion mktime(). Das ASC gibts bei DB's!!

Und jetzt zeig ich euch noch die Funktion die bei mir das schreiben regelt.

PHP-Code:
function writeEntry($gName,$gEMail,$gIM,$gHP,$gText,$error,$gdate,$ip)
{
  if(
$error==TRUE)
  {
          if(
$zdatei=fopen("gb.dat","r+"))
          {
    
              
flock($zdatei,2);
              
$guestbook=fread($zdatei,filesize("gb.dat"));
              
$array=explode("|x|",$guestbook);
              
$eintrag=$array[0];
              
$eNr=$eintrag+1;
              
$gText=nl2br(htmlspecialchars($gText));
              
$gText=bbcode($gText);
              
$gName=strip_tags($gName);
              
rewind($zdatei);
              
fwrite($zdatei,$eNr.'|x|'.$gName.'|x|'.$gEMail.'|x|'.$gIM.'|x|'.$gHP.'|x|'.$gText.'|x|'.$gdate.'|x|'.$ip."\n");
              
fwrite($zdatei$guestbook);
              
flock($zdatei,3);
              
fclose($zdatei);
              echo 
"<center><b>Eintragung erfolgreich!</b></center><br/>";
          }
          else
          {
              echo 
"Fehler! Datei l&auml;&szlig;t sich nicht &ouml;ffnen!";
          }
  }
  else
  {
    echo 
"<center><small><b>Schwerer Ausnahmezustand in checkentry.inc.php 0x00004D 0x0000FF! ;-)</b></small></center>";
  }

Ich hatte leider keine Zeit das ganze noch zu Kommentieren. Aber das meiste ist ja eh selbsterklärend.
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Alt 18.02.06, 14:25   #12 (permalink)
 
Registriert seit: 20.07.05
CPU8080 Leistung: Facit NTK
CPU8080 eine Nachricht über ICQ schicken
Likes: 0
Standard

Zitat:
Original von BasicAvid
Beim Firefox geht das nicht, der IE fügt dann auch gleich ein Steuerzeichen mit ein /n, und das führt zu einem Zeilenumbruch in der Datei.
Das war das Stichwort warum nicht einfacher:

$eintragtext = str_replace("\n", '<br>', $text); //Einfach \n rausziehen 8D

Code:
<table>
<a href="eintragen.php">Eintragen</a><br><br>
<?
$date = date("j.n.y");

if($text != "") {
$fp=fopen("text.php","a");
$eintragtext = str_replace("\n", '<br>', $text);
fwrite ($fp, "<table>$namedestyps $date <a href='$homepage' target='_blank'>$homepage</a> <a href='mailto:$email'>mail</a><br> $eintragtext <hr width='50%'></table>
"); //dieser Zeilenumbruch muss hier stehen
echo "Erfolgreich eingetragen";
fclose($fp);
}

$text=file("text.php");
$lines=count($text);
$text = array_reverse ($text); //dreht Array rum.
for($i=0;$i<$lines;$i++) 
{
 echo $text[$i]."<br><br>";
}

?>
</table>
CPU8080 ist offline   Mit Zitat antworten
Alt 18.02.06, 14:27   #13 (permalink)
 
Registriert seit: 15.08.03
flame Leistung: Facit NTK
flame eine Nachricht über ICQ schicken
Likes: 0
Standard

Das machts aber um einiges leichter mit ner datenbank..
das mit der datei is doch recht kompliziert..

kurze einführung in mysql

Code:
 

    define('MYSQL_HOST',     'localhost'); 
    define('MYSQL_USER',     'user');
    define('MYSQL_PASS',     'pass');
    define('MYSQL_DATABASE', 'dbase');
hier werden erstmal ein par constanten definiert, die kannst du auch ine ine andere PHP datei auslagern, die du dann includest, aber du kannst sie auch oben in die datei schreiben.. wurscht!

dort wird
1. die adresse zum sql server angegeben (sagt dir dein provider)
2. der username für den sqlzugang
3. das passwort
4. dort steht der name der datenbank. (den legst du beim erstellen der datenbank fest)

Code:
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
mysql_select_db(MYSQL_DATABASE);
diese zwei sätze bauen eine verbuindung zum mySQLserver auf, mit hilfe der oben angebenenen constanten


Jetzt musst du den befehl für die sql-action zusammenstellen:
Code:
$sql = "INSERT INTO tabellenname ( `ID` , `name` , `nachricht` , `homepage`, `email` , `datum`) 
	VALUES ('', '$name', '$message', '$hp', '$email', now())";
Also den Ausdruck schreiben wir in eine variable, um es etwas übersichtlicher zu gestallten.

INSERT INTO sagt aus, dass ein weiterer datensatz hinzugefügt werden kann, dort gibt es dann noch SELECT, INSERT, UPDATE, ..., um die grundsätzliche action zu definieren.

daanch folgtd er tabellenname. inerhalb einer datenbank muss man tabellen definieren. um die daten zu speichern. hier heist sie einfach tabellenname.

dann volgt die genaue anweisung was mit den einzelnen datenfeldern angesetllt werden soll. wir defineiren die Tabellenspalten, in die wir etwas schreiben wollen.
und nach values kommen die entsprechenden werte in der oben angegebenen folge.

eine besonderheit bieten now() das ist keine wariable, sondern eine funktion, die den aktuellen zeitstempel ausgibt.

Um das ganze jetzt an die datenbank zu übergeben, müssen wir die funktion mysql_query($Sql); ausführen.

Code:
mysql_query($Sql);
schon hast du einen gästebucheintrag in die datenbank verfrachtet.

wenn du es auslesen willst gehst du genauso vor, nur dass die anweisung in der variablen $sql etwas anders lautet:
Code:
SELECT * FROM tabellenname ORDER BY datum DESC";
SELCT sagt aus, dass ein datensatz abgefragt wird.

danach kommen die einzelnen datenfelder die abgefragt werden sollen. * heißt das alle abgefragt werden.
Order BY gibt die anweisungd ie datensätze vorher zu sortieren
darauf folgt dann das datenfeld, anhand der die ausgabe sortiert werden soll.
und dahinter dier sortier algorithmus ASC (aufsteigend) oder DESC (absteigend).

danach mus sman die abfrage wieder übergeben

Code:
$res = mysql_query($Sql);
Diesmal steht eine variable davor. weil wir ja mit den zurückgegebenen daten weiterarbeiten wollen (ausgeben)

diese variable ist ein Array, und enthält somit die gesamte tabellenstrucktur, aber damit kann man nicht arbeiten, deswegen muss man das ganze noch umwandeln.

$row = mysql_fetch_assoc($result); gibt eine reihe als array aus, da wir aber mehrere reihen haben, brauchen wir eine schleife

Code:
while ($row = mysql_fetch_assoc($result)) { }
zwischen den spitzklammern stehen uns nun immer die datenfelder der atuellen reihe zur verfügung.

so könne wir dann eine ausgabe wie diese starten:
Code:
echo "<table><td>name:</td><td>".$row[name]."</td> (...) ";
So das reicht fürs erste, hier is alles ausführlich erklärt
http://www.php4-forum.de/datenbank.htm

Kannst dich auch gerne per IM direkt an mich wenden bei fragen.
flame ist offline   Mit Zitat antworten
Alt 18.02.06, 14:36   #14 (permalink)
Themenstarter
 
Registriert seit: 08.07.03
tine Leistung: Facit NTK
Likes: 0
Standard

@CPU8080: So wie du das da gecodet hast übernehme ich es einfach mal, scheint problemlos zu funktionieren.

@BasicAvid: Öj, das sieht ja völlig anders aus. Ich werd mir das nachher mal genauer ansehen, und versuchen das zu kapieren.

@flame: WOW! Kurze Einführung? Also danke schonmal, so mega-schwer sieht das ja gar nicht aus, aber leider scheitert das dann oft an der Umsetzung...(Weiber und ihre Logik...aber Selbsterkenntnis ist ja der Beste Weg zur Besserung *grins*)

Danke nochmal an alle, die geholfen haben. Ich wünsche einen angenehmen Samstag.
tine ist offline   Mit Zitat antworten
Alt 18.02.06, 14:39   #15 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

@CPU8080

Mit sowas würde ich aufpassen, wie gesagt ich würde niemals reine HTML mit in der Datei speichern. Und dafür gibts einige Gründe.

Die Datei wird unnötig aufgebläht durch sowas.
Man kann denn Style / Aufbau des Eintrags nur mit viel Aufwand ändern.
Und man könnte noch ganz viele andere schönen Sachen machen ;-)!

Zitat:
Das machts aber um einiges leichter mit ner datenbank..
Das stimmt, mit einer Datenbank ist es wirklich leichter, vorallem wenn man OOP einsetzt.

Zitat:
das mit der datei is nix halbes und nix ganzes..
Begründe warum!!! Den so kann man das nicht sagen. Wenn ich meine Einträge organisiert/struktoriert in eine Datei schreibe, dann habe ich vom Grundprinzip eine DB.
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Reihenfolge in GB-Einträgen zeitlich sortieren
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zahlen in zufälliger Reihenfolge CDW Programmieraufgaben 49 02.02.12 20:06
Programm zeitlich steuern D31~$0u1 Code Kitchen 3 01.10.07 17:03
Programm zum löschen von gesperrten Reg einträgen Xman Virenschutz · Tools & Aggressive Software 5 27.11.05 22:22
Zeitlich gesteuerter Internetzugang? Twister Windows 0 24.06.04 13:51
IP-Adresse aus Foren-Einträgen?!?! tine (In)security allgemein 5 30.12.03 22:11


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