ERLEDIGT
NEIN
NEIN
ANTWORTEN
24
24
ZUGRIFFE
1174
1174
EMPFEHLEN
-
Hallo!
Ich erstelle gerade ein Adressbuch für meine Website... Das Problem ist, dass man die alten Einträge nicht wie beim Gästebuch ans Ende anhängen kann, sondern ich will dass die Einträge nach dem Namen alphabetisch geordnet sind... Leider weiß ich nicht wie ich das machen soll.
Hier ist der Code von einem PHP-Gästebuch (das Fettgedruckte ist der Code, dass die alten Einträge einfach nur ans Ende hängt und somit geändert werden muss):
Hoffe auf Ideen....PHP-Code:<html>
<head>
<title>Gästebuch</title>
</head>
<body>
<div align="center">
<a href="eintrag.html" target="_self">Neuer Eintrag</a><br>
<br>
<?php
$name = $HTTP_POST_VARS['name'];
$email = $HTTP_POST_VARS['email'];
$text = $HTTP_POST_VARS['adresse'];
if($submit)
{
if(($email == "") || ($name == "") || ($adresse == ""))
echo "<b>Fehlgeschlagen! Bitte alle Felder ausfüllen!</b>";
else
{
// Variable X wird auf null gesetzt
$x = 0;
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
while (!feof($datei)) {
$x++;
$saved[$x] = fgets($datei, 1024);
}
// Datum und Uhrzeit ermitteln
$datum = date("d.m.Y");
$zeit = date("H:i");
$datei=fopen("abook.txt", "w");
$text=strip_tags($adresse);
[B]// Hier wird der neue Eintrag in die Datei geschrieben
fwrite($datei,"<table border=0 width=500 bgcolor=000000 cellspacing=1 cellpadding=3><tr><td bgcolor=ffffff><a href=\"mailto:$email\"><b>$name</b></a> schrieb am $datum um $zeit Uhr</td></tr><tr><td bgcolor=white>$adresse</font></td></tr></table>\n");
for ($i=1;$i <= $x; $i++) {
fwrite($datei, "$saved[$i]");
}[/B]
// Datei schliessen
fclose($datei);
}
}
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
fpassthru($datei);
?>
</div>
</body>
</html>
Mfg J!M!
-
30.09.05 14:19 #2
- Registriert seit
- Oct 2004
- Ort
- Leipzig
- Beiträge
- 589
Ich würde versuchen die Datei auszulesen , die Werte an gewissen Trennszeichen zu zerlegen , diese dann alle in ein Array speichern.
Den neusten Antrag hinten ran hängen an das Array mit array_push() um dann alles mit sort() zu sotieren. Und dieses Array dann wieder zu einen Text zusammenfügen und komplett reinspeichern.
Datei müsstest du dazu mit dem modus w öffnen um den alten Inhalt noch rauszuhaun dann bevor du es wieder neu reinschreibst.
So würde ich es probieren mal , und ist ungetestet nun aber ich vermute so könnte es klappenPHP-Code:$x = 0;
$adressen = array();
$saved = "";
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
while (!feof($datei)) {
$saved .= fgets($datei, 255);
}
$saved = explode("Trennzeichen" , $saved);
for($i = 0 ; $i < count($saved) ; $i++)
{
array_push($adressen , $saved[$i);
}
$eintrag = array_push($adressen, $neuer_eintrag)
// neuer eintrag ist quasi das was du im Mailform da angegeben hast
$eintrag = join ("Trennzeichen" , sort($adressen));

Edit wo ich eben drüber nachdenke , könntest du es bei der Abfrage sotieren , im Prinzip musst du bei beiden die Email / Namen oder was auch immer rausfiltern mittels regulären Ausdrücken und diese dann sotieren. Ansonsten versucht er immer die Tabelle zu sotieren was ja nun quatsch ist im eigentlichen.Also würde ich das eigentlich direkt bei der Ausgabe machen dann.Geändert von FipsTheThief (30.09.05 um 14:57 Uhr)
-
Hallo,
es geht noch einfacher. Du liest die Textdatei mit file() in ein Array. Dieses Array kannst du dan sortiert ausgeben.
mfg
forstermWie man Fragen richtig stellt
Wichtig: Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
__________________
.:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.
-
30.09.05 17:31 #4
- Registriert seit
- Oct 2004
- Ort
- Leipzig
- Beiträge
- 589
Mhm das Problem das ich bei file() sehen würde das er es Zeilenweise in ein Array speichert.
Also wenn es mit Umbrüchen in der Datei steht dann kommt es da zu Problemen.Des weiteren bin ich mir nicht sicher wie Sort() vorgeht.
Eigentlich sollte ja jeder Eintrag der Tabellen gleich sein bis zu den Einträgen Mail und Name.Da müsste er das eigentlich sotieren dann.Also wäre das mit den Regulären Ausdrücken übertrieben und man würde ja Versuchen nen Quicksort zu schreiben.
Wie gesagt es ist nicht getestet , aber theoretisch sollte das funktionieren. Wenn die Einträge , also die komplette Tabelle in einer Zeile ist sollte das mit file() kürzer klappen.
-
@fipsthethief
kann man sich voll auf dein skript verlassen oder sind da einige fehler dabei?
die fehler die ich gefunden habe schreibe ich als kommentar in dein skript rein... bitte bestätige mir dann ob es wirklich fehler sind...
Mfg J!M!PHP-Code:$x = 0;
$adressen = array();
$saved = "";
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
while (!feof($datei)) {
//muss hier nicht wie beim Guestbookskript eigentlich "x++" und "saved[x]"stehen?
$saved .= fgets($datei, 255);
}
$saved = explode("Trennzeichen" , $saved);
//muss hier die datei nicht erstmal im 'w' modus geöffnet werden?
for($i = 0 ; $i < count($saved) ; $i++)
{
array_push($adressen , $saved[$i);
}
$eintrag = array_push($adressen, $neuer_eintrag)
// neuer eintrag ist quasi das was du im Mailform da angegeben hast
$eintrag = join ("Trennzeichen" , sort($adressen));
P.S.: trotzdem danke für deine antwort
-
02.10.05 19:39 #6
- Registriert seit
- Oct 2004
- Ort
- Leipzig
- Beiträge
- 589
Also ich denk schon das es so klappt , im Prinzip sotiere ich ja das Array damit und da ja alle Einträge soweit gleich sind durch die Tabelle sollte er erst Unterschiede bei einen Namen oder Emain finden. Somit würde ich sagen ja haut hin.
Nein es muss kein $x++ stehen oder $saved[$x] da ich jede Zeile einlese und an einanderhänge.
Also sieht so ca aus dann , $zeileN ... $zeile3,$zeile2,$zeile1.
Das habe ich aus diesem Grunde so gemacht da es in meiner Textdatei nicht in einer Zeile gespeichert war sondern sich die Tabelle über 4 - 5 Zeilen hinzog. Somit hatte ich erstmal alles in einen String und habe es dann anhand eines Trennzeichens zerlegt.
Die Datei wurde erstmal im Modus r geöffnet am Anfang um den Inhalt in Ruhe auszulesen , wenn du sie an dieser Stelle mit Modus w öffnen würdest dann wäre der gesammte Inhalt weggewesen. Des weiteren hab ich dann weiter unten die Datei im Modus w geöffnet als er es reinschreiben sollte
Der Teil fehlt da in diesem Script also nen bissel was musst selber noch machen.
Und wie schon gesagt , wenn deine Einträge immer in einer Zeile sind dann kann man wie schon oben gesagt file() nehmen. Geht flotter ohne das rumgemurkse
-
achso, ich habe mich versehen....Der Teil fehlt da in diesem Script also nen bissel was musst selber noch machen.
du hast ja nur ein die variable/array $einträge geschrieben... ich dachte du schreibst schon die abook.txt....und so mit in die datei....
das heißt ich müsste dann noch schreiben
richtig?PHP-Code:$datei=fopen("abook.txt", "w");
fwrite($datei, "$einträge");
wie gesagt, bin nicht so gut in PHP, deswegen stell ich glaueb ich ein bissl zu viel fragen...
danke!
Mfg J!M!
-
02.10.05 23:13 #8
- Registriert seit
- Oct 2004
- Ort
- Leipzig
- Beiträge
- 589
richtig

in dem Fall zwar $eintrag , weil $eintrag ist das wo alle Array Elemente sotiert und dann zusammengeführt wurden.
Im Prinzip ist es das gleiche was du auch machst in deiner Funktion , nur setzt die Array Elemente direkt fest mittels $saved[$x] und jedes Element enthält 102x zeichen.
Ich pack es erstmal in einen String und kümmer mich dann später darum
Geändert von FipsTheThief (02.10.05 um 23:16 Uhr)
-
also irgendwo ist da doch ein fehler...
ist glaube ich auch meiner....
dies ist der quelltext den ich jetzt verwende:
und der HTML-Quellcode ist:PHP-Code:<?php
$vorname = $HTTP_POST_VARS['vorname'];
$nachname = $HTTP_POST_VARS['nachname'];
$adresse = $HTTP_POST_VARS['adresse'];
$phone = $HTTP_POST_VARS['phone'];
$mobile = $HTTP_POST_VARS['mobile'];
$email = $HTTP_POST_VARS['email'];
$msn = $HTTP_POST_VARS['msn'];
$icq = $HTTP_POST_VARS['icq'];
if($submit)
{
if(($vorname == "") && ($nachname == "") && ($adresse == "") && ($phone == "") && ($mobile == "") && ($email == "") && ($msn == "") && ($icq == ""))
echo "<b>Fehlgeschlagen! Bitte alle Felder ausfüllen!</b>";
else
{
// Variable X wird auf null gesetzt
$x = 0;
$new = array();
$adressen = array();
$saved = "";
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
while (!feof($datei)) {
$saved .= fgets($datei, 255);
}
$saved = explode("," , $saved);
for($i = 0 ; $i < count($saved) ; $i++)
{
array_push($adressen , $saved[$i]);
}
$eintrag = array_push($adressen, $vorname, $nachname, $adresse, $phone, $mobile, $email, $msn, $icq);
// neuer eintrag ist quasi das was du im Mailform da angegeben hast
$eintrag = join ("," , sort($adressen));
$datei=fopen("abook.txt", "w");
fwrite($datei, "$eintrag");
fclose($datei);
}
}
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
fpassthru($datei);
?>
wenn du nun auf http://hang.ha.funpic.de/new_add.htm gehst und die felder mal ausfüllst und es probierst... erscheint die meldungHTML-Code:<form name="eintrag" action="/book.htm" method="post"> <table border="0" cellpadding="0" cellspacing="6" width="191"> <tr> <td>Vorname:</td> <td><input type="text" name="vorname"></td> </tr> <tr> <td>Nachname</td> <td><input type="text" name="nachname"></td> </tr> <tr> <td>Adresse(=>Straße, Hausnummer, PLZ, Stadt)</td> <td><input type="text" name="adresse"></td> </tr> <tr> <td>Telefonnummer</td> <td><input type="text" name="phone"></td> </tr> <tr> <td>Handynummer</td> <td><input type="text" name="mobile"></td> </tr> <tr> <td>Email:</td> <td><input type="text" name="email"></td> </tr> <tr> <td>MSN</td> <td><input type="text" name="msn"></td> </tr> <tr> <td>ICQ</td> <td><input type="text" name="icq"></td> </tr> <tr> <td><input type="reset" value="Reset"></td> <td> <input type="submit" name="submit" value="Eintragen"> </td> </tr> </table> </form>
Warning: join(): Bad arguments. in /usr/export/www/vhosts/funnetwork/hosting/hang/book.htm on line 106
Mfg J!M!
-
ok... es ist doch nicht mein fehler...
und zwar wenn ich das "sort" wegmache, dann gíbt es da kein problem. es wird glaube ich das "sort" einfach nicht erlaubt.
aber somit ist die haupfunktion weg.
es macht sichauch bemerkbar:
es gibt KEINE zeilenumbrüche, alles ist in eine Zeile geschrieben... etc
-
hab jetzt das skript so umgeschrieben dass es funktioniert:
leider fällt mir jetzt auf dass ich die daten nicht formatieren kann..PHP-Code:<?php
$vorname = $HTTP_POST_VARS['vorname'];
$nachname = $HTTP_POST_VARS['nachname'];
$adresse = $HTTP_POST_VARS['adresse'];
$phone = $HTTP_POST_VARS['phone'];
$mobile = $HTTP_POST_VARS['mobile'];
$email = $HTTP_POST_VARS['email'];
$msn = $HTTP_POST_VARS['msn'];
$icq = $HTTP_POST_VARS['icq'];
if($submit)
{
if(($vorname == "") && ($nachname == "") && ($adresse == "") && ($phone == "") && ($mobile == "") && ($email == "") && ($msn == "") && ($icq == ""))
echo "<b>Fehlgeschlagen! Bitte alle Felder ausfüllen!</b>";
else
{
// Variable X wird auf null gesetzt
$x = 0;
$new = array();
$adressen = array();
$saved = "";
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
while (!feof($datei)) {
$saved = fgets($datei, 255);
}
$saved = explode(" " , $saved);
for($i = 0 ; $i < count($saved) ; $i++)
{
array_push($adressen , $saved[$i]);
}
$eintrag = array_push($adressen, $vorname, $nachname, $adresse, $phone, $mobile, $email, $msn, $icq) ;
// neuer eintrag ist quasi das was du im Mailform da angegeben hast
$eintrag = asort($adressen);
$eintrag = join (" " , $adressen);
$datei=fopen("abook.txt", "w");
fwrite($datei, "$eintrag");
fclose($datei);
}
}
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
fpassthru($datei);
?>
-alle einträge sind nach einander geschrieben, d.h. nichts mit zeilenumbruch...
-außerdem möchte ich ja auch noch die überschriften "vorname ", "nachname" etc. machen, und dann sollen die jeweiligen Daten unter der zugrhörigen überschrift stehen...
-es ist wie ich befürchtet habe : es wird nicht der eintrag sortiert, sondern die variablen einzeln....
Mfg J!M!Geändert von J1M1 (03.10.05 um 01:31 Uhr)
-
03.10.05 02:11 #12
- Registriert seit
- Oct 2004
- Ort
- Leipzig
- Beiträge
- 589
Du musst das natürlich vorher in eine Form bringen bevor Du es abspeicherst.
Wie zum Beispiel hier :
So nun hab ich es selber nochmal getestet und es geht bei mirPHP-Code:<?php
$kommentar = $_POST["comment"];
$eintraege = "";
$alle_eintraege= array();
$dt = "gb.txt";
$file = fopen($dt, "r");
while(!feof($file)){
$eintraege .= fgets($file,255);
}
fclose($file);
$eintraege = explode("|##|" , $eintraege);
for($i = 0 ; $i < count($eintraege) ; $i++){
array_push($alle_eintraege , $eintraege[$i]);
}
$aktueller_eintrag= '<table cellspacing=0 cellpadding=0 border=2 width=345>
<tr>
<td width="250">'.$_POST["UserName"].'<td>
<td align="right" width="100">'.date("d.m.Y").'</td>
</tr><tr>
<td colspan=3>'.
$kommentar
.'</td>
</tr>
</table><br>'.'|##|';
array_push($alle_eintraege , $aktueller_eintrag);
sort($alle_eintraege);
$neuer_eintrag = join("|##|", $alle_eintraege);
$file = fopen($dt, "w+");
fwrite($file , $neuer_eintrag);
fclose($file);
?>
Zumindest gibt er es mir Sotiert aus in dem Falle würde er es nun sotiert in die Datei reinschreiben gleich..
Die Einträge haben dann diese Form innerhalb der Datei
1. Eintrag|##|2.Eintrag|##|n. Eintrag|##|
$aktueller_eintrag ist hierbei das was eben eingegeben wurde und neu hinzukommt.
$eintraege sind alle Einträge die bisher in der Datei waren
$neuer_eintrag ist halt der aktuelle Eintrag + die alten Einträge.
Anpassen musst du es dann selber , also in der Form der Tabelle dafür bin ich nun zu träge
Geändert von FipsTheThief (03.10.05 um 02:45 Uhr)
-
hi!
hab es jetzt so umgeändert, dass die daten erstmal in $new formatiert werden und dan an $adressen rangehängt wird.
jetzt wird jedoch alles überschrieben....PHP-Code:<?php
$vorname = $HTTP_POST_VARS['vorname'];
$nachname = $HTTP_POST_VARS['nachname'];
$adresse = $HTTP_POST_VARS['adresse'];
$phone = $HTTP_POST_VARS['phone'];
$mobile = $HTTP_POST_VARS['mobile'];
$email = $HTTP_POST_VARS['email'];
$msn = $HTTP_POST_VARS['msn'];
$icq = $HTTP_POST_VARS['icq'];
if($submit)
{
if(($vorname == "") && ($nachname == "") && ($adresse == "") && ($phone == "") && ($mobile == "") && ($email == "") && ($msn == "") && ($icq == ""))
echo "<b>Fehlgeschlagen! Bitte alle Felder ausfüllen!</b>";
else
{
// Variable X wird auf null gesetzt
$x = 0;
$new = array();
$adressen = array();
$saved = "";
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
while (!feof($datei)) {
$saved = fgets($datei, 255);
}
$saved = explode(" " , $saved);
for($i = 0 ; $i < count($saved) ; $i++)
{
array_push($adressen , $saved[$i]);
}
$new = '<table>
<tr>
<td>'.$vorname.'<td>
<td>'.$nachname.'</td>
<td>'.$adresse.'</td>
<td>'.$phone.'</td>
<td>'.$mobile.'</td>
<td>'.$email.'</td>
<td>'.$msn.'</td>
<td>'.$icq.'</td>
</table><br>'.' ';
array_push($adressen, $new) ;
$eintrag = $adressen;
// neuer eintrag ist quasi das was du im Mailform da angegeben hast
$eintrag = asort($adressen);
$eintrag = join (" " , $adressen);
$datei=fopen("abook.txt", "w");
fwrite($datei, "$eintrag");
fclose($datei);
}
}
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
fpassthru($datei);
?>
Mfg J!M!
P.S.: man, ich hasse das...
noch mal danke für dein geduld.
-
03.10.05 14:26 #14
- Registriert seit
- Oct 2004
- Ort
- Leipzig
- Beiträge
- 589
Jops natürlich , die Datei wird geöffnet geleert und dann neu geschrieben. Ich würde die Datei nach dem auslesen noch schliessen dann da Du sie ja erneut öffnest weiter unten.
Du könntest es auch so alles in die Datei schreiben in dem du die Datei im Modus a öffnest und den letzten Eintrag hinten ranhängst und dann beim auslesen sotieren , spielt so gesehen gar keine direkte Rolle da es eh sotiert wird.
auslesen :
schreiben:PHP-Code:<?php
$adressen = array();
$saved = "";
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
while (!feof($datei)) {
$saved = fgets($datei, 255);
}
fclose($datei);
$saved = explode(" ", $saved);
for($i = 0 ; $i < count($saved) ; $i++)
{
array_push($adressen , $saved[$i]);
}
asort($adressen);
// wenn man sie sich gleich ausgeben möchte join weiter
// ansonsten halt das Array durchgehen wie gehabt
// und jeden Eintrag auslesen um damit weiterzuarbeiten
// Zum Beispiel so ne Leiste A-Z etc und dann
// dort drunter anzeigen oder auch so anzeigen lassen
$adressen = join (" ",$adressen);
echo $adressen.
?>
Sieht ein wenig übersichtlicher aus , wäer halt schreiben im Modus a , so wird der neuste Eintrag automatisch hinten rangehängt was ja beim Sotieren eigentlich egal ist wie es drinnen steht, hauptsache es steht drinnen.PHP-Code:<?php
//der ganze if Krempel hier ;)
$dateiname = "abook.txt";
$new = '<table>
<tr>
<td>'.$vorname.'<td>
<td>'.$nachname.'</td>
<td>'.$adresse.'</td>
<td>'.$phone.'</td>
<td>'.$mobile.'</td>
<td>'.$email.'</td>
<td>'.$msn.'</td>
<td>'.$icq.'</td>
</table><br>'.' ';
$datei=fopen("abook.txt", "a");
fwrite($datei, "$new");
fclose($datei);
?>
Noch etwas :
du brauchst doch nur asort($adressen) angeben das andere $eintrag ist unnützPHP-Code:$eintrag = $adressen;
$eintrag = asort($adressen);
Geändert von FipsTheThief (03.10.05 um 15:09 Uhr)
-
so wird der $new aber beim sortieren nicht mit einbezogen....?
ich habe jetzt nun
, so dass das skript jetzt so aussieht....PHP-Code:fclose($datei);
jedoch wird trotzdem alles überschrieben...PHP-Code:<?php
$vorname = $HTTP_POST_VARS['vorname'];
$nachname = $HTTP_POST_VARS['nachname'];
$adresse = $HTTP_POST_VARS['adresse'];
$phone = $HTTP_POST_VARS['phone'];
$mobile = $HTTP_POST_VARS['mobile'];
$email = $HTTP_POST_VARS['email'];
$msn = $HTTP_POST_VARS['msn'];
$icq = $HTTP_POST_VARS['icq'];
if($submit)
{
if(($vorname == "") && ($nachname == "") && ($adresse == "") && ($phone == "") && ($mobile == "") && ($email == "") && ($msn == "") && ($icq == ""))
echo "<b>Fehlgeschlagen! Bitte alle Felder ausfüllen!</b>";
else
{
// Variable X wird auf null gesetzt
$x = 0;
$new = array();
$adressen = array();
$saved = "";
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
while (!feof($datei)) {
$saved = fgets($datei, 255);
$saved = explode(" " , $saved);
}
fclose($datei);
for($i = 0 ; $i < count($saved) ; $i++)
{
array_push($adressen , $saved[$i]);
}
$new = '<table>
<tr>
<td>'.$vorname.'<td>
<td>'.$nachname.'</td>
<td>'.$adresse.'</td>
<td>'.$phone.'</td>
<td>'.$mobile.'</td>
<td>'.$email.'</td>
<td>'.$msn.'</td>
<td>'.$icq.'</td>
</table><br>'.' ';
array_push($adressen, $new) ;
$eintrag = $adressen;
// neuer eintrag ist quasi das was du im Mailform da angegeben hast
$eintrag = asort($adressen);
$eintrag = join (" " , $adressen);
$datei=fopen("abook.txt", "w+");
fwrite($datei, "$eintrag");
fclose($datei);
}
}
$dateiname = "abook.txt";
$datei = fopen($dateiname, "r");
fpassthru($datei);
?>
Mfg J!M!
P.S: *confused*Geändert von J1M1 (03.10.05 um 15:58 Uhr)
Ähnliche Themen
-
Outlook Adressbuch
Von texta1001 im Forum Office-AnwendungenAntworten: 1Letzter Beitrag: 20.07.06, 14:59 -
AdressBuch
Von Grüner Goblin im Forum Visual Basic 6.0Antworten: 7Letzter Beitrag: 31.12.05, 01:36 -
Adressbuch!
Von apfelkorn im Forum .NET ArchivAntworten: 3Letzter Beitrag: 24.04.05, 18:13 -
Adressbuch
Von JackyD im Forum Visual Basic 6.0Antworten: 6Letzter Beitrag: 31.12.04, 10:30 -
adressbuch
Von Gravidi im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 05.03.03, 22:05





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren