myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   php guestbook blätter funktion problem (https://mygully.com/showthread.php?t=2048656)

bugfix 23.05.10 11:52

php guestbook blätter funktion problem
 
hy leute,
ich hab mir in kleinstarbeit aus verschiedenen anleitungen ein gästebuch nach meinen wünschen zusammen gestrickt das auf TXT basis funktioniert da es sich bei meiner homepage nicht auszahlt eine datenbank zu betreiben.... im prinzip funktioniert alles nach meinen wünschen .... bis auf eines...

ich möchte gerne das man einstellen kann das zum beispiel nur 3 einträge pro seite angezeigt werden und das man dan vorwärts und rückwärts blättern kann.

hab zwar anleitungen gefunden aber ich check das echt nicht mehr durch -_-
wäre nett wenn mir jemand das in meinen code integrieren könnte!

index.php (startseite des gb´s in der die einträge angezeigt werden)
PHP-Code:

<?php
include "allblock.php";  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
 <head>
<link rel='stylesheet' href='div.css' type='text/css'>
<link rel='stylesheet' href='style.css' type='text/css'> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<S*****>
function popUp(page,PWidth,PHeight,id) {
 eval("designerwiz"+id+"=window.open('"+page+"','designerwiz1','toolbar=0,scrollbars=0,location=0,status=0,menubars=0,resizable=0,width="+PWidth+",height="+PHeight+"')")
eval;("wiz"+id+".window.moveTo((screen.width/2)-(PWidth/2),(screen.height/2)-(PHeight/2))")
}
</S*****>
<title> 
  </title> 
</head>
 <body>
<span class="style6"><br>|
G&auml;stebuch |<br>
<br>
<A HREF="javas*****:popUp('http://www.XXXXX.com/guest/neu.php',500,540,1);">Hier eintragen!</A><br><br>
  <?php
   $beitrag 
file("gaestebuch.txt");
   
krsort($beitrag);

   foreach(
$beitrag as $ausgabe)
    {
     
$ausgabe stripslashes($ausgabe);
    
$split explode("|"$ausgabe);
    
    if(!empty(
$split[1]))
    {
    echo 
"
        <table align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"5\" bordercolorlight=\"black\" bordercolordark=\"black\" width=\"90%\">
        <tr>
            <td>
                Von <a href=\"mailto:"
.$split[0]."\">".$split[1]."</a> am ".$split[2]."<br><span class='style7'>Ip: ".$split[4]."</span>
            </td>
        </tr>
        <tr>
            <td> "
.$split[3]." </td>
        </tr>
        </table>
        <br />"
;
    }
}
?>
 </body>
</html>

neuerbeitrag.php (die datei die die einträge speichert)
PHP-Code:

<html>
<head>
<title>Guestbook</title>
<link rel='stylesheet' href='style.css' type='text/css'
</head>
<body>

<?php
$user 
$_POST["Name"];
$user htmlentities($user);

$inhalt $_POST["inhalt"];
$inhalt htmlentities($inhalt);
$inhalt str_replace("\n""<br>"$inhalt);

$thema $_POST["thema"];
$thema htmlentities($thema);

$ipadresse ="$REMOTE_ADDR";

if (
$inhalt == "" or $user == "" or $thema == "")
   {
   echo 
"<span class='style6'><center><img alt='' src='http://XXXXX.com/images/bannerwhite.jpg' width='468' height='60' /><br /><p>Sie m&uuml;ssen folgende Felder ausf&uuml;llen: Namen, E-Mail und Inhalt</p></span>";
   }

else
   {
   
$datumdate("d.m.Y H:i");

   
$eintrag="$thema|$user|$datum|$inhalt|$ipadresse";

   
$datei fopen("gaestebuchZU.txt""a");
   
fwrite($datei"\n".$eintrag);
   
fclose($datei);

   echo 
"<span class='style6'><center><img alt='' src='http://XXXXX.com/images/bannerwhite.jpg' width='468' height='60' /><br /><p>Ihr Eintrag wurde erfolgreich gespeichert,<br>er wird nach Freigabe des Admins angezeigt.</p></span>";

$empfaenger "[email protected]"//Mailadresse
$absender   "[email protected]";
$betreff    "Neuer GB-Eintrag von $user am $datum";
$mailtext   " User: $user \n\n E-mail: $thema \n\n Ip: $ipadresse \n\n Inhalt: $inhalt \n\n Freischalte Link: http://www.XXXXXX.com/index1.php?con=XXXXXXXXXX";
$antwortan  "[email protected]";

mail$empfaenger,
      
$betreff,
      
$mailtext,
      
"From: $absender\nReply-To: $antwortan");

   }
?>

<br>
<span class="style14">
<center><a href="javas*****: close(self)">Fenster schliessen</a>
</span>
</body>
</html>


neu.php (das formular das zum eintragen benötigt wird!)
PHP-Code:

<?php
include "allblock.php";  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Language" content="de-at" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
</head>
 <body>
<center><img alt="" src="http://xxxxx.com/images/bannerwhite.jpg" width="468" height="60" /><br />
  <b>
   Wollen Sie einen Beitrag hinzuf&uuml;gen?
  </b><br>
  <i>
   Alle Felder mit einem * m&uuml;ssen ausgef&uuml;llt werden !
  <br>
Info: Ihre Ip Adresse wird aus Sicherheitsgr&uuml;nden gespeichert!
<br>
Wer spammt wird gesperrt!!
</i>
  <form action="neuerbeitrag.php" method="POST">
   <i>
    *
   </i>
   <b>
    Name:
   </b><br>
   <input name="Name" size="40" maxlength="35"><br><br>
   <i>
    *
   </i>
   <b>
    E-Mail:
   </b><br>
   <input name="thema" size="40" maxlength="35"><br><br>
   <i>
    *
   </i>
   <b>
    Inhalt:
   </b><br>
   <textarea name="inhalt" cols="40" rows="12"></textarea><br>
   <input type="submit" value="absenden">
  </form><br>
  <hr>

vielen herzlichen dank schon im vorraus ich weis das ihr mir immer mit rat und tat beiseite steht! :)

greetz bugfix

kramido 23.05.10 12:47

Ich würde mal sagen, dass du dir prinzipiell Gedanken um dein System machen solltest.

Wie gehst du aktuell vor?
Schreiben: Anfügen eines neuen Eintrags am Ende der Datei
Lesen: Einlesen der gesamten Datei und sortieren.

Mach dir mal darüber Gedanken, was passiert, falls dein Gästebuch je über 100 oder gar 1000 Einträge erreicht. Einlesen + Sortieren ist äusserst inperformant.

Erstmal würde ich dafür sorgen, dass jeder Eintrag nur einen Zeilenumbruch hat. Das hast du bereits getan. Dann würde ich mir um die Neuorganisation der Daten Gedanken machen.

Alternative:
Schreiben: schreibe neue Einträge an den Beginn einer Datei und hänge den Rest der 'alten' Datei dran
Lesen: Lese nur die ersten drei Zeilen einer Datei und gebe diese danach aus (Tipp: fgets)


Achja:
Zitat:

wäre nett wenn mir jemand das in meinen code integrieren könnte!
Nein, das wird denke ich hier niemand tun.

bugfix 23.05.10 12:58

naj derzeit is es so das alle neue einträge in die datei gästebuchZU.txt kommen dann entscheide ich ob ich den beitrag freigeben möchte und wenn ja führe ich ein s***** aus das mir den inhalt von gäsetbuchZU.txt ausliest und dann an den anfang von gästebuch.txt anfügt... also da hab ich mir schon einige gadanken gemacht ;) ob schätzmativ werden es besten fals mal max 50-70 einträge werden...

wie gesagt es fehlt mir nur die blätter funktion..

greetz

kramido 23.05.10 15:14

Zitat:

Zitat von bugfix (Beitrag 20795009)
wie gesagt es fehlt mir nur die blätter funktion..
greetz

Du sortiest doch jedesmal die gesamte Datei beim Einlesen oder täusche ich mich?
PHP-Code:

$beitrag file("gaestebuch.txt"); 
   
krsort($beitrag); 

Parameter des Skripts:
per Get: $offset (Starte mit Beitrag der Nummer)
per Konstante: $numPerPages

Wie kann man tendentiell vorgehen?
1. Öffnen der Datei fopen()
2. $offset Zeilen lesen mit fgets() und wieder verwerfen
3. $numPerPages Zeilen lesen mit fgets() und Darstellung als gewünschter Eintrag
4. schließen der Datei mit fclose()

Natürlich zwischendrin noch sicherstellen, dass die Datei überhaupt genug Zeilen und somit Einträge hat.

Grüße,
kramido

bugfix 23.05.10 15:25

naja ich hab es bis jetzt so gelöst das beim eintragen in die gästebuchzu.txt geschrieben wird... wenn ich mich entscheide den beitrag freizugeben wird der gesammte inhalt eingelesen mit und dann in die datei gästebuch.txt geschrieben danach wird die gästebuch.txt gelöscht... beim nächsten neuen eintrag wird die gästebuchZU.txt wieder erstellt und so weiter und so weiter....

beim kopieren wird auch der gesammte inhalt vorne an die gästebuch.txt angehängt so brauch ich nicht sotieren und der neueste inhalt ist immer an erster stelle...

greetz

kramido 23.05.10 16:30

Zitat:

Zitat von bugfix (Beitrag 20795557)
beim kopieren wird auch der gesammte inhalt vorne an die gästebuch.txt angehängt so brauch ich nicht sotieren und der neueste inhalt ist immer an erster stelle...

Deine Idee ist mir schon klar. Nur wieso tust du es dann in deiner index.php bei jedem Aufruf? Mein Zitat bezog sich auf deinen Quelltext.

bugfix 23.05.10 17:18

naja ich hab doch ganz oben schon geschrieben das ich das gästebuch aus vielen anleitungen zusammen gebastelt habe weil mir in php teilweise noch ziemlich der plant fehlt...

greetz

bugfix 24.05.10 14:09

So ich closse das ganze mal hier hab eine lösung gefunden nach dem ich die ganze nacht durchgemacht habe!! Diesmal hat mir das forum genau nüsse geholfen!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.