Entwickler-Ecke

Off Topic - Probleme mit Gästebuch in PHP


elundril - Mi 10.05.06 14:26
Titel: Probleme mit Gästebuch in PHP
Da hier ein paar PHPkenner unterwegs sind (und auch ein paar PHPhasser :wink: ) dacht ich mir vielleicht könnt ihr mir sagen was an den PHP-Codes nicht stimmt!! Ich hab mir den Code eigentlich ohne vorahnung aus den Fingern gesaugt und zuhaus auf dem Virtuellen Server hat es funktioniert!!! aber im echten Web nun mal nicht!!! wär nett wenn ihr mir helfen könntet!!!

mfg el

Startseite vom Gästebuch:

Quelltext
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:
//guestind.php
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Gästebuch</title>
</head>

<body bgcolor="#999966" text="#FFFFCC" link="#003333" vlink="#006666" alink="#CCCC99">

<p><img border="0" src="images/barcodeguest.gif"></p>
<form action="guestsave.php" method="post">
 <p>Es können HTML-Tags<i>( <b></b> | <i></i>)</i>  verwendet werden. 
Um einen Absatz zu machen bitte ebenfalls den HTML-Tag <i>(<br>)</i> dafür 
verwenden</p>
<p>
<br>
E-mailadresse:<br>
<input name="email" type="text" size="20"><br>
Betreff:<br>
<input name="betreff" type="text" size="20"><br>
Kommentar:<br>
<textarea name="kommentar" rows="10" cols="50"></textarea><br>
<input type="submit" value="Absenden"> </p>


</body>

</html>


Die eingabeseite vom Gästebuch:

Quelltext
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:
//guestnew.php

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Gästebuch</title>
</head>

<body bgcolor="#999966" text="#FFFFCC" link="#003333" vlink="#006666" alink="#CCCC99">

<p><img border="0" src="images/barcodeguest.gif"></p>
<form action="guestsave.php" method="post">
 <p>Es können HTML-Tags<i>( <b></b> | <i></i>)</i>  verwendet werden. 
Um einen Absatz zu machen bitte ebenfalls den HTML-Tag <i>(<br>)</i> dafür 
verwenden</p>
<p>
<br>
E-mailadresse:<br>
<input name="email" type="text" size="20"><br>
Betreff:<br>
<input name="betreff" type="text" size="20"><br>
Kommentar:<br>
<textarea name="kommentar" rows="10" cols="50"></textarea><br>
<input type="submit" value="Absenden"> </p>


</body>

</html>


Die speicher und bestätigungsseite vom Gästebuch:

Quelltext
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:
//guestsave.php

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Gästebuch</title>
</head>

<body bgcolor="#999966" text="#FFFFCC" link="#003333" vlink="#006666" alink="#CCCC99">

<p><img border="0" src="images/barcodeguest.gif" width="600" height="60"></p>
<?php
  $betreff=$_POST["betreff"];
  $email=$_POST["email"];
  $br="<br>";
  $text=$_POST["kommentar"];
  $who="E-Mailadresse: ";
  $why="Betreff: ";
  
  if ($betreff=="" or $email=="" or $text=="")
     {
     echo "Sie haben nicht alle Felder ausgefüllt!<br><p><a href=\"guestnew.php\">Zurück</a></p>";
     }
  else
     {
  echo "Ihr Beitrag, $betreff, wurde Hinzugefügt<br>";
  $guestbook=fopen("guest.txt","a+");
  $gettext=fgets($guestbook);
  $guestposts =$who;
  $guestposts .=$email;
  $guestposts .=$br;
  $guestposts .=$why;
  $guestposts .=$betreff;
  $guestposts .=$br;
  $guestposts .=$text;
  $guestposts .=$br;
  $guestposts .=$br;
  fwrite($guestbook,$guestposts);
  fclose($guestbook);
  echo "<p><a href=\"guestind.php\">Hier können sie wieder zurück zum Gästebuchindex</a></p>";
     }
     ?>
</body>

</html>


Grendel - Mi 10.05.06 15:24

Definiere bitte "funktioniert nicht". Siehst Du irgendwelche Fehler/Warnungen?

Ohne den Code groß durchgesehen zu haben würde ich als erstes mal prüfen, ob Schreibrechte existieren. Also, ob "fopen("guest.txt","a+");" auch tatsächlich das File-Handle zurückliefert und nicht etwa, wie es z.B. bei fehlenden Schreibrechten der Fall wäre, False.

Bis neulich ...


wunsiedler - Mi 10.05.06 18:11

Ausser, dass in deinem Code keinerlei Funktion zum Anzeigen der Einträge vorhanden ist, funktioniert er bei mir.


Balmung der blaue Gott - Mi 10.05.06 19:57

Hi,

Füg mal error_reporting(E_ALL); am Anfang des Scripts ein und guck nach, was er für Fehler rausspuckt.
Könnte sein, dass du eine ältere PHP-Version auf dem Rechner hast, womit die Globalarrays nicht funktionieren, was sich aber umgehen lässt.
Und was heißt überhaupt echtes Web? Meinst du damit, dass du Webspace auf einem Internetserver mit PHP hast?
Vielleicht gibt es auch Probleme mit Rechtebeschränkungen, also beschränke erstmal deinen Code und baue darauf auf, bis es nicht mehr funktioniert, dann weißt du auf jeden Fall, wo der Fehler liegt.

cu


blackbirdXXX - Do 11.05.06 05:00

Der der Code absolut wahnsinnig ist, was Sicherheit angeht ist wohl noch keinem der Vorposter aufgefallen?
kein htmlspecialchars (der benenner der funktion gehört getreten)?


DaKirsche - Do 11.05.06 09:34

Wieso verwendest du nicht eine Datenbank, in der du die Einträge speicherst????
Ist doch einfacher...


Quelltext
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:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
<?php
//$Variable=$HTTP_POST_VARS['Sendername'];              
$gbname = $HTTP_POST_VARS['gbname'];
              $gbhome = $HTTP_POST_VARS['gbhome'];
              $gbmail = $HTTP_POST_VARS['gbmail'];
              $gbhead = $HTTP_POST_VARS['gbhead'];
              $gbtext = $HTTP_POST_VARS['gbtext'];
        class datenbank{
          var $dbname = 'datenspeicher'; //Datenbankname
          var $dbuser = 'User'; //Datenbankbenutzer
          var $dbpasswd = 'passwd'; //Datenbankpasswort
          var $dbtable = 'guestbook'; //Datenbanktabelle
          var $dbhost = 'localhost'; //Datenbankhost
          
            function OpenDatabase() {
              $erfolg = mysql_connect($this -> dbhost, $this -> dbuser, $this -> dbpasswd);
              if ($erfolg == FALSE) 
                {
                echo 'Verbindung zur Datenbank ist fehlgeschlagen.';
                exit();
                }
              }
            function CloseDatabase() {
              $erfolg = mysql_close(mysql_connect($this -> dbhost, $this -> dbuser, $this -> dbpasswd));
              if ($erfolg == FALSE) 
                {
                echo 'Schliessen der Datenbankverbindung fehlgeschlagen.';
                exit();
                }
              }
            function SaveEntryComplete($gbname,$gbhome,$gbmail,$gbhead,$gbtext){
              
              if ($gbname != NULL) {
                if ($gbhead != NULL){
                  if ($gbtext != NULL){
                    $sql = 'INSERT INTO guestbook (name, email, datum, url, headline, entry) VALUES ("'.$gbname.'","'.$gbmail.'",curdate(),"'.$gbhome.'","'.$gbhead.'","'.$gbtext.'")';
                    $result = mysql_db_query('datenspeicher',$sql);
                    echo $result;
                      }
                    }
                  }
            }
            function LoadEntryComplete(){
              $sql = 'SELECT * FROM guestbook';
              $result = mysql_db_query('datenspeicher',$sql);
              $count = mysql_num_rows($result);
              if ($count == 0) {echo 'Im Gästebuch befindet sich derzeit kein Eintrag<br><br><br>';}
            for($x = (mysql_num_rows($result) - 1); $x > -1; $x--){
            $str_0 = mysql_result($result, $x, 'guestbook.id');
            if (str_0 == TRUE) {
            
              $str_1 = mysql_result($result, $x, 'guestbook.headline');
              $str_2 = mysql_result($result, $x, 'guestbook.entry');
              $str_3 = mysql_result($result, $x, 'guestbook.url');
              $str_4 = mysql_result($result, $x, 'guestbook.email');
              $str_5 = mysql_result($result, $x, 'guestbook.name');
              $str_6 = mysql_result($result, $x, 'guestbook.id');
              $str_7 = mysql_result($result, $x, 'guestbook.datum');
              
              echo '<BR>Eintrag Nr. '.$x' //Ausgabe der Eintragsnummer
<div>
<div align="left">
'.$str_1.' //ausgabe des Betreffs
</div>
<br>
<div align="left">
Verfasser :'.$str_5.' //Ausgabe des Verfassernamens
</div>
<div>
Datum :'.$str_7.' //Ausgabe des Erstellungsdatums
</div>';

if ($str_4 != NULL) //Wenn E-Mail angegeben
{
echo '<div>
E-Mail : <a href="mailto:'.$str_4.'>'.$str_4.'</a> //Ausgabe der Verfasser E-Mail als Link
</div>';
}

if ($str_3 != NULL) 
{
echo '<div align="left">
URL : <a href="'.$str_3.'"target="_blanc">'.$str_3.'</a> //Ausgabe eines Verfasserlinks
</div>';
}

echo '<br>
<div>'.$str_2.'<br><br></div> //Ausgabe der Nachricht
</div>';                }
      }
            }
              
        }
      $connect_to_base = new datenbank;
      $connect_to_base -> OpenDatabase();  
      $connect_to_base -> SaveEntryComplete($gbname,$gbhome,$gbmail,$gbhead,$gbtext);
      $connect_to_base -> LoadEntryComplete();
      $connect_to_base -> CloseDatabase();  
      ?>


Zuvor musst du eine Datenbank anlegen, die du mit folgendem SQL Code erstellen lässt :

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
DROP DATABASE IF EXISTS datenspeicher;
CREATE DATABASE datenspeicher;
USE datenspeicher;

CREATE TABLE guestbook (
id int not null auto_increment primary key,
name varchar(50),
email varchar(50), 
datum date, 
url varchar(50),
headline varchar(50),
entry text not NULL)
;


Dein Eingabeformular muss die entsprechenden Variablen (gbentry, etc.) als method="post" übermitteln.

Dazu muss dein Webspace eine MySQL Datenbank enthalten und sollte PHP 4 unterstützen.


elundril - Do 11.05.06 11:18

hmm ähh ... ok!!
ich hab mir den ganzen code aus den fingern gesaugt und hab von PHP genausoviel ahnung wie Microsoft von Fehlerbehebung! :wink:
und ich glaub mein webspace hat kein SQL aber PHP!
ich verwende Piranho weil das einfach am besten und gratis ist!
und ein Online lehrbuch hat mir gesagt das man auch so ein gästebuch machen kann!!!
P.S: die homepage auf der das gästebuch funktionieren sollte ist www.bettaware.at.lv [http://www.bettaware.at.lv] (das zweite nicht angezeigte bild von unten!! ich hab keine ahnung wieso es nicht angezeigt wird!

aber danke für deine Hilfe!! wär schön wenn es irgendwie mit dem Textfile auch klappen würde!! auf meinem virtuellen Server zuhause funktioniert es! (Hab kein internet zuhause!! leider!)

mfg el


wunsiedler - Do 11.05.06 11:25

Probier mal das GB hier aus

http://www.mylittlehomepage.net/mein_kleines_gaestebuch

basiert auch auf textdateien.


DaKirsche - Do 11.05.06 11:26

http://www.wspace.org

Eine Datenbank kann man fix mit einem Script bei z.B. PHPMyAdmin erstellen lassen...


Bist du dir sicher, dass dein Webspace PHP unterstützt?!? Ich mir nicht...Serverseitig wird dein PHPCode nicht ausgeblendet, was eigentlich passieren sollte....


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Gästebuch</title>
</head>

<body bgcolor="#999966" text="#FFFFCC" link="#003333" vlink="#006666" alink="#CCCC99">

<p><img border="0" src="images/barcodeguest.gif" width="600" height="60"></p>
<form action="guestnew.php">
<?php
$datei=fopen("Guest.txt","r+");
$posts=fgets($datei);
echo "<br>$posts";
fclose($datei);
?>

<br><br>
<input value="Neuer Beitrag" type="submit">
</form>

</body>

</html>


Das lese ich aus deiner Seite aus...

Ausserdem schliesst du dein Form nicht ab...ist das beabsichtigt????


elundril - Do 11.05.06 11:29

danke!!!!

aber kann man mir halt trotzdem noch bitte meinen fehler bei dem gästebuch sagen? Ich will nämlich wissen was ich falsch hab!!


elundril - Do 11.05.06 11:32

@DaKirsche: Danke!! Schau net schlecht aus die seite!!!! und warum schließ ich mein Form nicht ab??
und das gute an piranho ist das es keine Werbung gibt, die mir auf den Sack geht!!


DaKirsche - Do 11.05.06 11:36

Sorry...hab das TAG übersehen...


DaKirsche - Do 11.05.06 12:10

Was bietet piranho?
Webspace für deine Homepage
unbegrenzt Speicherplatz
unbegrenzt Traffic
Werbung optional
URL: http://user.piranho.de
FileManager & FTP-Zugang)
kostenlos!


sehe da nix von PHP....


Zitat:

Funktioniert CGI, PHP, ASP oder mySQL auf Piranho ?

Nein, alle diese Features unterstützen wir nicht, da wir großen Wert auf die Qualität unseres Hosting-Angebots legen. Viele Webspace-Anbieter sind aufgrund dieser Features entweder Pleite gegangen oder bieten nur unzureichend Kapazitäten, um den Service reibungslos anbieten zu können. Zu dieser Kategorie wollen wir nicht zählen. Zudem stellen diese Angebote ein enormes Sicherheitsrisiko für jeden User dar, das die meisten missachten. Auch die Servergeschwindigkeit könnte durch einen einzelnen User sehr stark beeinträchtigt werden, z.B. durch einen PHP-Chat, für den rund 4 MB RAM pro aktiven Chatter nötig sind. Aus diesen Gründen sind wir grundsätzlich gegen eine Einführung dieser Features. Dafür sollte jeder User Verständnis haben. Dennoch schließen wir es aber nicht aus, einen Service dieser Art in Zukunft auf einem gesonderten Server mit den entsprechenden Sicherheitsmaßnahmen zu testen, um damit Erfahrungen zu sammeln und ein noch attraktiveres Angebot bieten zu können.


GTA-Place - Do 11.05.06 13:43

Zitat:
[...] Viele Webspace-Anbieter sind aufgrund dieser Features entweder Pleite gegangen oder bieten nur unzureichend Kapazitäten, um den Service reibungslos anbieten zu können. [...]

ROFL! Ich erinner da mal an CybtonDOTcom und Funpic. 100 MB / 2,5 GB unzureichend? 10x MySQL / 5x MySQL unzureichend? Naja, jedem das seine ^^.

Empfehlung: Vorrübergehend bei http://www.funpic.de anmelden und in paar Monaten dann bei Cybton.com (Werbung abschaltbar).


Und jagt bitte GET, POST und REQUEST vorher durch strip_tags und stipslashes. Sonst gibt's nix zu lachen ^^.




EDIT: Jetzt geht das wieder los: Wer hat das beste Webspace-Angebot. Dazu gibt es genug Threads hier im Forum. Also bitte lasst es!


DaKirsche - Do 11.05.06 14:54

WSPace.org : 100MB Speicher, Traffic unbegrenzt, 1xMySQL, PHP, CGI, FTP


elundril - Do 11.05.06 18:18

an GTA-PLACE: warum dann wechseln??


Christian S. - Do 11.05.06 18:34

Hallo!

Die Diskussion zu Webspace-Angeboten gehört nicht in diesen Thread. Gibt's auch eine Menge andere zu, da könnt Ihr gerne weiter entsprechende Angebote diskutieren. Hier geht's nur um das Gästebuch-Skript. :-)

Grüße
Christian


elundril - Do 11.05.06 18:35

upps sorry!!! ich brauch halt dringenst nen neuen Webspace mit PHP und ohne werbung der gratis ist!!!


blackbirdXXX - Do 11.05.06 18:58

user profile iconelundril hat folgendes geschrieben:
upps sorry!!! ich brauch halt dringenst nen neuen Webspace mit PHP und ohne werbung der gratis ist!!!


Warum keine statischen Seiten?


F34r0fTh3D4rk - Do 11.05.06 19:36

user profile iconelundril hat folgendes geschrieben:
@DaKirsche: Danke!! Schau net schlecht aus die seite!!!!


Ich empfehle einen Besuch beim Augenarzt :idea:


elundril - Fr 12.05.06 09:27

Weil statische seiten nicht mit einem Gästebuch zusammenpassen wollen!!!->php!!


blackbirdXXX - Fr 12.05.06 16:25

user profile iconelundril hat folgendes geschrieben:
Weil statische seiten nicht mit einem Gästebuch zusammenpassen wollen!!!

1.) ein Anführungszeichen reicht.
2.) braucht jede Webseite ein Gästebuch? Gute Webseiten brauchen sowas nicht unbedingt. Auf den Inhalt kommt es an.

user profile iconelundril hat folgendes geschrieben:
->php!!

Es gibt auch anderes als php um dynamische Seiten zu machen.


Andreas L. - Fr 12.05.06 16:52

user profile iconblackbirdXXX hat folgendes geschrieben:
user profile iconelundril hat folgendes geschrieben:
upps sorry!!! ich brauch halt dringenst nen neuen Webspace mit PHP und ohne werbung der gratis ist!!!


Warum keine statischen Seiten?


Weil sein Gästebuch nur mit PHP läuft? Oder wie willst du auf einen Server ohne PHP, Perl, etc. eine neue statische Seite erzeugen?