Jump to content
Sign in to follow this  
puchne

PHP-Gästebuch ohne MySQL aber mit "x Einträge pro Seite"

Recommended Posts

Sooo, hab mich gerade mal wieder drangesetzt...

Soweit funktioniert es!

Hier mal der code der "verarbeiten.php":

 

";

$datei=fopen("eintraege.php","r");

if($datei) {
          $dateigroesse=filesize("eintraege.php");
          $inhalt=fread($datei,$dateigroesse);
          }

$ersetzen=str_replace("?>",$eintrag,$inhalt);
$datei=fopen("eintraege.php","w");

if($datei) {
          $schreiben=fwrite($datei,$ersetzen);
          }
?>



Änderungen:

Vorallem $ersetzen=str_replace("?>",$eintrag,$inhalt); -

da ansonsten die datei so aussieht:



usw...


Also wie gesagt, soweit funktioniert es, einzig ein kleiner Schönheitsfehler:

Wenn in der Datei eintraege.php noch keine Einträge drin sind (also if($result<1)) - schreibt er mir statt

$eintrag[0]['name']=xy;

$eintrag[0]['email']=xyz;

$eintrag[0]['nachricht']=xyza;

das hier:

$eintrag[1]['name']=xy;

$eintrag[1]['email']=xyz;

$eintrag[1]['nachricht']=xyza;


da $result = count ($eintrag); angeblich eins ergibt ?!

Share this post


Link to post
Share on other sites

achja, hab noch eine for-schleife eingebaut:

for ($i=1;$i";
                       $ausgabe.=$i;
                       $ausgabe.="";
                       $ausgabe.="Name: ";
                       $ausgabe.=$eintrag[$i]['name'];
                       $ausgabe.="";
                       $ausgabe.="E-Mail: ";
                       $ausgabe.=$eintrag[$i]['email'];
                       $ausgabe.="";
                       $ausgabe.="Nachricht: ";
                       $ausgabe.=$eintrag[$i]['nachricht'];
                       $ausgabe.="";
                       print($ausgabe);
                       }


Problem ist nur, dass dabei der neuste eintrag erstmal nicht angezeigt wird (da noch alte version von "eintraege.php" eingeladen) und die neusten einträge unten statt oben angezeigt werden :(

Share this post


Link to post
Share on other sites
Guest

else         
{
$nr = count ($eintrag);
$eintrag[$nr]['name']=$HTTP_POST_VARS['name'];
$eintrag[$nr]['email']=$HTTP_POST_VARS['email'];
$eintrag[$nr]['nachricht']=$HTTP_POST_VARS['email'];
} 

Hier haste was vergessen. Statt "$nr" musst du schreiben "$nr+1", da du ja ein neuen Datensatz erstellen möchtest.


if($result<1)) - schreibt er mir statt

$eintrag[0]['name']=xy;

$eintrag[0]['email']=xyz;

$eintrag[0]['nachricht']=xyza;

das hier:

$eintrag[1]['name']=xy;

$eintrag[1]['email']=xyz;

$eintrag[1]['nachricht']=xyza;



Teste das mal mit dem neuen, ansonsten musst du einen Fehler drin haben, denn eigentlich müsste er immer! bei jedem neuen Datensatz, wenn keiner sonst da ist, eine "0" eintragen.


Problem ist nur, dass dabei der neuste eintrag erstmal nicht angezeigt wird (da noch alte version von "eintraege.php" eingeladen) und die neusten einträge unten statt oben angezeigt werden

Lagere doch einfach deine Datei, wo du eine Übersicht über alle Beiträge gibst aus. Beispielsweise so:

- Eintraege.php (speichert alle Eintraege)

- Neuer_Datensatz.php (speichert neuen Datensatz in der Eintraege.php)

- Uebersicht.php (zeigt alle vorhandenen Eintraege an)


Somit lädst du die Eintraege.php nochmal neu und müsstest die neuesten Datensätze drin haben. Wenn du alles ins Eins haben möchtest, dann musst du halt die Eintraege.php nochmals includieren.


[edit]

Aso, lol. Jetzt sehe ich deinen Fehler. Du arbeitest einmal mit "$result" und einmal mit "$nr". Entscheide dich mal ;-)

[/edit]



kOOni

Share this post


Link to post
Share on other sites

ok, klasse, nur funktioniert alles: :-)

";

$datei=fopen("eintraege.php","r");

if($datei) {
          $dateigroesse=filesize("eintraege.php");
          $inhalt=fread($datei,$dateigroesse);
          }

$ersetzen=str_replace("?>",$eintragn,$inhalt);
$datei=fopen("eintraege.php","w");

if($datei) {
          $schreiben=fwrite($datei,$ersetzen);
          }
?>



Sooo, nun zur Ausgabe ;] - hab ja schon ne Menge gelernt (danke schonmal dafür :-) ), aber wie schaffe ich es jetzt, bei der Ausgabe-Seite, dass nur X Einträge pro Seite angezeigt werden.

Share this post


Link to post
Share on other sites

setze mal nen count auf das array...

weist ja schon wie.... irgendwo bei den ersten posts steh doch schon ne lösung


du musst über einen link start und ende übergeben

wenn du nun die datensätze über die for ausgibst, wirds doch super gehen.....

 

hier deine ausgabe
}
?>



wenn man arrays ausgibt, sollte man vielleicht noch eine foreach in betracht ziehen....

dami lassen sich die daten auch super ausgeben

foreach

und noch was zur endung... es ist vollkommen rillepups welche endung deine datei hat.

kannst auch test.hampelmann requiren

Share this post


Link to post
Share on other sites
Guest
und noch was zur endung... es ist vollkommen rillepups welche endung deine datei hat.

kannst auch test.hampelmann requiren


Das glaube ich nicht ;-) Denn du willst hier ja die Variablen bzw. Array Eigenschaften von PHP nutzen, weshalb das Skript auch vom Dateityp PHP sein sollte. :-)


Sooo, nun zur Ausgabe ;] - hab ja schon ne Menge gelernt (danke schonmal dafür [smile] ), aber wie schaffe ich es jetzt, bei der Ausgabe-Seite, dass nur X Einträge pro Seite angezeigt werden.

Raiser hat ja hier schon viel gepostet. Da ich jetzt zu faul bin, seine Links nochmal zu checken, schreib ich nur nochmal kurz, auf was du achten musst. :):-D


Du übergibst auf die Seite, welche die Anzeige übernimmt, 2 Variablen. Eine mit der Seite, wo es los gehen soll, und eine, wo es aufhören soll. $start, $end ;-) Dann nimmste die for-Schleife, baust deine Grenzen ein, und dazu gibst du noch ein echo (oder auch 2, oder 3) mit deinen Ausgaben (Name, Datum, Nachricht) an.


hab ja schon ne Menge gelernt (danke schonmal dafür :-) )

Das war der Sinn, des Threads und deshalb hab ich dir nicht immer gleich alles verraten ;-) Ich find es auch schön, das du was gelernt hast. Ich hoffe du lernst jetzt C# und ADO.NET, und hilfst mir bei meinen Problemen weiter :-D



kOOni

Share this post


Link to post
Share on other sites
du musst über einen link start und ende übergeben

Genau davon hab ich keine Ahnung - in diesem blöden PHP-Buch steht davon absolut nix drin :/ - es sei denn es funktioniert ähnlich wie bei der GET-Methode.


Wie übergebe ich denn Variablen?

Sieht die URL dann etwa so aus: ausgabe.php?anfang=5&ende=10 ...?

Und hab ich damit schon die Variablen übergeben?

(also $anfang=5; $ende=10)

Share this post


Link to post
Share on other sites
Guest
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\server\apache\htdocs\newpage\kopf.php:9) in c:\server\apache\htdocs\newpage\kopf.php on line 19

He, Raiser :-D (Link: Blätterfunktion)



Wie übergebe ich denn Variablen?

Sieht die URL dann etwa so aus: ausgabe.php?anfang=5&ende=10 ...?

Und hab ich damit schon die Variablen übergeben?

(also $anfang=5; $ende=10)


Stimmt genau. Nur falls du dein Gästebuch auch mal öffentlich einsetzen möchtest, dann baue bitte eine Kontrolle aller eingehenden Variablen ein, sonst pump ich dir dein Gästebuch mit HTML-Code voll :-) Aber das ist erstmal nebensächlich.


[edit]

Wenn wir hier dann fertig Sinn, dann können wir deinen Code mal noch etwas, na sagen wir mal, optimieren. Aber nur wenn du willst :)

[/edit]


kOOni

Share this post


Link to post
Share on other sites

Sooo ...

ich glaub in etwa klappt dies hier:

";
                       $ausgabe.=$anfang;
                       $ausgabe.="";
                       $ausgabe.="Name: ";
                       $ausgabe.=$eintrag[$anfang]['name'];
                       $ausgabe.="";
                       $ausgabe.="E-Mail: ";
                       $ausgabe.=$eintrag[$anfang]['email'];
                       $ausgabe.="";
                       $ausgabe.="Nachricht: ";
                       $ausgabe.=$eintrag[$anfang]['nachricht'];
                       $ausgabe.="";
                       print($ausgabe);
                       }
   if($ende+5>=$nr) {
                   $anfang=$_GET[start]+5;
                   $ende=$nr-$ende;
                         if($ende>0) {
                                      $ende=$anfang+5;
                                      print("SeiteX");
                                      }
                   }
   else            {
                   $ende=$_GET[ende]+5;
                   $anfang=$_GET[start]+5;
                   print("SeiteX");
                   }
?>



Allerdings ist dort ein Fehler drin:

siehe .../ausgabe.php?start=1&ende=5 (unten ist jeweils der link - allerdings noch nicht durchnummeriert, daher das x)


Zwar wird, wenn keine Einträge mehr vorhanden sind, kein link mehr gesetzt, allerdings werden auf der letzten Seite immer noch 5 Einträge ausgelesen, auch wenn nur noch 3 Einträge vorhanden sind ...

Könnt ihr mir da weiterhelfen?

Share this post


Link to post
Share on other sites
Guest
achja, und die neusten stehen dadurch immer noch ganz hinten

Ich weiß, das liegt daran, dass du mit dem ersten Datensatz anfängst und zum letzten durchzählst. Du willst aber den Letzten haben, deshalb musst du verkehrtrum denken ... ;-)


allerdings werden auf der letzten Seite immer noch 5 Einträge ausgelesen, auch wenn nur noch 3 Einträge vorhanden sind ...

Hier musst du die Einstellung im Link auf die nächste Seite ändern. Da solltest du erst prüfen, wieviele Einträge noch da sind und dann solltest du $start und $ende entsprechend anpassen ;-)



kOOni

Share this post


Link to post
Share on other sites

hm, versuch gerade alles umzuschreiben und hab gerade folgendes Problem:

$anfang=$_GET[start];
$ende=$_GET[ende];

if ($anfang!=true) {



Wenn kein Get da ist (also ausgangsseite) führt er xy aus (soweit funktioniert es).

Allerdings funktioniert die Else schleife nicht ...


Bin mir gerade nicht sicher, was die else schleife überhaupt enthält ...

enthält sie "true" oder eine Zahl und wird deswegen nicht durchgeführt?

Share this post


Link to post
Share on other sites

sorry jetzt nicht alles gelesen..

nur wegen der dateiendung..

probiers aus.....

wirst sehen es funktioniert...

es wird doch alles, was in der datei steht eingefügt, in deinen code...

du musst nur den code in der datei in php-tags schreiben.....


session_start(); :-o ich weis, hab schon ewig nix mehr dran gemacht und dies ist ein ergebnis

von nem kurzen umbau... was aber nicht so relevant ist....


man könnte ja auch noch was andrese machen...

alles über eine for while ..... ausgeben

und jetzt nur die ausgaben posten wo die aussage zutriff

=$_GET[start] && $i";
}
?>



wie dus letztendlich löste ist dir überlassen....

du kannst doch bei der schleifenbedingun alle von 0-eof laufen lassen....

sieht zwar nicht gut aus, aber geht auch....

und deine links da findest die lösung mit dem modulo "%"-zeichen wenn,

irgendwas nicht durch $zps teilbar ist kannste dir ja denken was sein muss....


gruß raiserle

Share this post


Link to post
Share on other sites
Guest

Hallo,


also ich verstehe grad nicht wo das Problem liegen soll. Was meinst du mit else-Zweig puchne? Bitte schreibe das mal in Zukunft etwas genau, und vielleicht auch mal in einer vernünftigen Satzstellung :-)


Zu deiner Frage, ob man prüfen kann, ob die Variable eine Zahl ist:

 

int is_int (mixed var)

(Ich hoffe, die bereit diese Angabe von Funktionen keine Schwierigkeit beim Lesen.)


@raiser: Deine Varianten finde ich teilweise etwas umständlich, beispielsweise mit dem $zps. Aber wenn es funktioniert, ok.


@puchne: Kannst du mal beschreiben, wie es denn jetzt im Gesamten bei dir aussieht? Vielleicht auch mal mit Link? :-)



kOOni

Share this post


Link to post
Share on other sites

hm, ist es möglich in der for-Schleife Zählschritte von -5 zu definieren?


Also dieses hier will einfach nicht funktionieren:

 =$seitenende;$b-5)
        {
           print($b);
        }
?>


dabei gibt er unendlich 14 aus ($seitenende=15).

Share this post


Link to post
Share on other sites
Guest

He du Spammer, keine Doppelposts ;-)


unendlich 14

Was ist unendlich 14?


Probiere mal das hier (nicht getestet):

 

$seitenende;$b-5)
{
print($b);
}
?>


Ich habe hier nicht viel geändert, aber eigentlich müsste es funktionieren. Wiso machst du das eigentlich so umständlich?


Erstelle dir doch einfach eine for-Schleife, welche dir vom Größeren zum Kleineren zählt. Dann baust du einfach deine Grenzen mit ein, dass er diese auch als index in dem Array Eintraege benutzt. Bei dieser -5 Variante erkenne ich nicht richtig einen Sinn. :-)



kOOni

Share this post


Link to post
Share on other sites
Original von e86

He du Spammer, keine Doppelposts ;-)



oh, wollte eigentlich überarbeiten statt neu zu posten ...



Was ist unendlich 14?


unendlich 14 ist 14 14 14 14 14 14 14 14 14 14 .... ;-)



Wiso machst du das eigentlich so umständlich?

Erstelle dir doch einfach eine for-Schleife, welche dir vom Größeren zum Kleineren zählt.


hmm, stimmt, hab mal wieder zu früh nach Hilfe geschrien ;-)


Also, der aktuelle code funktioniert soweit, allerdings erscheint er mir ein wenig umständlich und lang ... wobei das mich eigentlich nicht weiter stört, solang er einwandfrei funktioniert ;-)


Hier mal der Quelltext:

 

=$ende;$anfang--) {     // Ausgabeschleife
                                                              $ausgabe="name: ";
                                                              $ausgabe.=$eintrag[$anfang]['name'];
                                                              $ausgabe.="";
                                                              $ausgabe.="email: ";
                                                              $ausgabe.=$eintrag[$anfang]['email'];
                                                              $ausgabe.="";
                                                              $ausgabe.="nachricht: ";
                                                              $ausgabe.=$eintrag[$anfang]['nachricht'];
                                                              $ausgabe.="";
                                                              $ausgabe.="";
                                                              print($ausgabe);
                                                              }
                    $seite=1;
                    $anfang=$nr-1;
                    $ende=$anfang-4;
                    $x=2;
                    print("1 ");
                    for($y=1;$y");
                                                                 print($seiten);
                                                                 print("");
                                                                 print("] ");
                                                                 }

                   }
else                {     // Wenn GET=Wert/String -> ab Seite 2 des GBs
                   $anfang=$_GET[anfang];
                   $ende=$_GET[ende];
                   for($anfang=$_GET[anfang];$anfang>=$ende;$anfang--) {  // Ausgabeschleife
                                                    $ausgabe="name: ";
                                                    $ausgabe.=$eintrag[$anfang]['name'];
                                                    $ausgabe.="";
                                                    $ausgabe.="email: ";
                                                    $ausgabe.=$eintrag[$anfang]['email'];
                                                    $ausgabe.="";
                                                    $ausgabe.="nachricht: ";
                                                    $ausgabe.=$eintrag[$anfang]['nachricht'];
                                                    $ausgabe.="";
                                                    $ausgabe.="";
                                                    print($ausgabe);
                                                    }

                                                    $anfang=$nr-1;
                                                    $ende=$anfang-4;
                                                    for ($b=1;$b");
                                                                               print($b);
                                                                               print("");
                                                                               print("] ");
                                                                               $anfang=$anfang-5;
                                                                               $ende=$anfang-4;
                                                                               }
                   }
?>



Und her der link: ...ausgabe.php

Share this post


Link to post
Share on other sites
Guest

Hallo,


lösche bitte mal das Doppelposting.


Wegen dem Quelltext, den schau ich mir morgen mal genauer an und poste dir dann mal meine *Vorschläge*.



Schönen Abend noch,

kOOni

Share this post


Link to post
Share on other sites

hm, mir ist gerade doch ein Fehler aufgefallen, die aktuelle Seite betreffend.

Wie kann man denn errechnen auf welcher Seite man sich befindet?

(aus $eintragsnummer, $anfangsbeitrag und $endbeitrag)

Share this post


Link to post
Share on other sites
Guest

Ganz einfach, du übergibst dir immer, auf welcher Seite du bist :-)



kOOni

Share this post


Link to post
Share on other sites

hab die Seitenermittlung doch noch mit einer Rechenoperation hinbekommen:

 

($seitenzahl=Anzahl aller Einträge / 5, aufgerundet)


So wie es aktuell läuft scheint es solide :-) -

bin bisher jeweils auf noch keinen Fehler gestoßen *freu*.

Hier die aktuelle Version:

.../ausgabe.php

Share this post


Link to post
Share on other sites
Guest

Sieht schon gut aus :H:


Das würde ich am Quelltext ändern:

 


Für deinen letzten Post.


Und das, für deinen vor-vorhergehenden Post:

 

=$ende;$anfang--) 
{     
$ausgabe="name: ";
$ausgabe.=$eintrag[$anfang]['name'];
$ausgabe.="";
$ausgabe.="email: ";
$ausgabe.=$eintrag[$anfang]['email'];
$ausgabe.="";
$ausgabe.="nachricht: ";
$ausgabe.=$eintrag[$anfang]['nachricht'];
$ausgabe.="";
$ausgabe.="";
print($ausgabe);

}

$seite=1;

$anfang=$nr-1;

$ende=$anfang-4;

print("1 ");


// Seitenschleife
for($y=1, $x=3; $y". $seiten .""];

}

}

else                
{     // Wenn GET=Wert/String -> ab Seite 2 des GBs

$anfang=$_GET[anfang];

$ende=$_GET[ende];

for($anfang=$_GET[anfang]; $anfang>=$ende; $anfang--) {  // Ausgabeschleife

$ausgabe="name: ";

$ausgabe.=$eintrag[$anfang]['name'];

$ausgabe.="";

$ausgabe.="email: ";

$ausgabe.=$eintrag[$anfang]['email'];

$ausgabe.="";

$ausgabe.="nachricht: ";

$ausgabe.=$eintrag[$anfang]['nachricht'];

$ausgabe.="";

$ausgabe.="";

print($ausgabe);

}

$anfang=$nr-1;

$ende=$anfang-4;

for ($b=1;$b");

print($b);

print("");

print("] ");                                                                               

$anfang=$anfang-5;


$ende=$anfang-4;

}

}
?> 



Noch ein paar Dinge:

- Nimm nicht soviele Variablen, du kannst vieles auch sinnvoll zusammenfassen

- Vermeide solche if-Anweisungen: if ($ende<=0) [...] ("Böse If's")

- vergiss keine Methoden einzubauen, mit denen du die Variablen überprüfst, die du übergeben bekommst!


Sieht schon gut aus. Vielleicht könntest du dies nun noch um eine schönes Aussehen und einen kompakteren Code erweitern? Dann ist es fertig, das Gästebuch :)



kOOni

ps.: Und bitte formatiere deinen Quellcode ein bisschen, es ist nämlich ein Kraus den zu bearbeiten ;-)

Share this post


Link to post
Share on other sites
- Vermeide solche if-Anweisungen: if ($ende<=0) [...] ("Böse If's")

hmm, was meinst du mit "böse if's"?

(Brauch die immer für die letzte Seite, damit nicht negative (nicht existierende) Arrays in die Einträge-Schleife kommen).


- vergiss keine Methoden einzubauen, mit denen du die Variablen überprüfst, die du übergeben bekommst!

Naja, ich hab ein wenig ausprobiert, was passiert wenn ich manuell in die URL, anfangs- und end-angaben, ändere/manipuliere und eigentlich traten keine größeren Fehler auf - also scheint das script dagegen relativ ressistent zu sein (einzige Bedingung: anfangsangabe muss größer sein als endangabe).

Also warum sind solche Überprüfungen wichtig (generell)?


Vielleicht könntest du dies nun noch um eine schönes Aussehen und einen kompakteren Code erweitern?

Werd mich mal dranmachen, die ganzen Kleinigkeiten einzubauen (Überprüfung ob name eingegeben, ob e-mail richtig gesetzt usw.) und dann das design dranzuhängen :-) - hoffe das wird leichter von der Hand gehen ;-)

- Editiert von puchne am 26.10.2005, 22:09 -

Share this post


Link to post
Share on other sites
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...