Fragen zu Tut Gästebuch von .:wo0zy:.

M@rk

Mitglied
Hallo Leute,

ich hätte zu diesem Gästebuch eine Frage.
Ich habe dieses Script übernommen und habe das Problem, daß der Link
neuer Eintrag nicht funktioniert. Jedesmal wenn ich auf den Link klicke wird zwar die Seite neu aufgebaut aber nicht das Formular aufgerufen. Die Verbindung zur Datenbank ist ok., denn manuell bearbeitete Einträge in der DB werden ausgelesen. Ich denk mal ich hab einfach einen Denkfehler, zumal ich zugeben muß PHP erst zu lernen und zu verstehen. Mit den Links komm ich ehrlich gesagt nicht so klar... Vielleicht kann mir ja jemand dabei helfen, wäre echt nett...

Also Cracks, lasst mich nicht dumm sterben.. :o)


Gruß M@rk
 
Hallo Blaschki,


vielen Dank für Deine schnelle Hilfe. Hier der Code.
Code:
<?php 
$id = "root"; //hier denn usernamen angeben 
$pw = ""; //hier das passwort eintragen 
$host ="localhost"; //hier die datenbankadresse angeben, meistens localhost 
$database = "database"; //hier den db namen 
$table = "gbook"; //hier den namen der erstellten tabelle angeben 

$conn_id = mysql_connect($host,$id,$pw); //verbindung zur db wird aufgebaut 
mysql_select_db($database,$conn_id); 

$action = $HTTP_POST_VARS[action]; 
if($action=="save") 
{ //wenn $action=save dann wird erst eine mail an den Admin geschickt 

  $content = "Der user".$name."hat gerade einen eintrag in ihr gaestebuch vorgenommen!"; 
  $an = "e@mail.de"; //hier deine e-mailadresse eingeben 
  $betreff = "gaestebucheintrag"; //hier kann der betreff der e-mail eingegeben werden 

  @mail($an,$betreff,$content,"From: ".$email); 

  $datum = time(); 
  $inhalt = $inhalt; 
  $name = ($name) ? $name : "unbekannt"; 
  mysql_query("INSERT INTO $table (name,email,hp,inhalt,datum) VALUES ('$name','$email','$hp','$inhalt','$datum')"); //daten werden in die db geschrieben 
} 

echo "<td width=75% height=100% align=center valign=top>"; 

if($action==neu) 
{ 
  //wenn $action=neu wird ein formular ausgegeben 
  echo "<a href='index.php?page=Guestbook'>zum Guestbook<p></a>"; // hier kommt die adresse des gbs hin, hier bei einer index.php in die das gb inculdet wird 
} 
else 
{ 
  echo "<p><a href='".$HTTP_SERVER_VARS[PHP_SELF]."?action=neu&page=Guestbook'>Neuer Eintrag<p></a>"; //hier ist der link zu einem neuen eintrag 
} 

if($action=="neu") 
{ 
   //die ausgabe des formulars 
?> 

<table> 
<form action="<?php echo '".$HTTP_SERVER_VARS[PHP_SELF]."?action=neu&page=Guestbook'; ?>" method=post> 
  <tr> 
   <input type="hidden" name="action" value="save"> 
   <td>Name:</td> 
   <td><input type=text name=name></td> 
  </tr> 
  <tr> 
   <td>Email:</td> 
   <td><input type=TEXT name=email></td> 
  </tr> 
  <tr> 
   <td>Homepage: <a href="http://" target="_blank">http://</a></td> 
   <td><input type=text name=hp></td> 
  </tr> 
  <tr> 
   <td>Eintrag:</td> 
   <td><textarea name="inhalt" rows="6" cols="25"></textarea></td> 
  </tr> 
  <tr> 
   <td> </td> 
   <td><input type=submit value="eintragen"></td></form> 
  </tr> 
</table> 

<?php 
  } 
  else 
  { 
   //wenn action nicht gesetzt ist, wie beim betreten der seite werden die einträge ausgegeben 

  $query = "SELECT * FROM $table ORDER BY datum DESC LIMIT 0,50"; //hier kann die anzahl der ausgegebenen einträge festgelegt werden 
  //begonnen wird hier bei eins und mit 50 endet es 
$result = mysql_query($query); 

if(mysql_num_rows($result)) 
{ 
  while($row=mysql_fetch_array($result))     
  { 
   $name = $row['name']; 
   $email = $row['email']; 
   $hp = $row['hp']; 
   $inhalt = $row['inhalt']; 
   $datum = date("d.m.Y/H:i:s",$row['datum']); //das datum wird formatiert 

   echo "<table width='90%' valign='top' align='center'><tr><td width='75%' align='left'><b><a href=mailto:".$email.">".$name."</a></b></td><td align='right'>".$datum."</td></tr></table>"; //die ausgabe der daten 
   $inhalt = nl2br($inhalt); 
   echo "<table width='90%' align='center'><tr><td colspan='2'>".$inhalt; 
   echo "</td></tr></table>"; 
   if($hp=="") 
   { 
    echo "<tr><td>keine Homepage</td></tr></table><p>"; 
   } 
   else 
   { 
    echo "<table width='90%' align='center'><tr><td width='95%'><a href='http://".$hp."' target='new'>".$hp."</a></td><td align=center><a href='#top'>top</a></td></tr></table><p>"; 
   } 
   flush(); 
  } 
} 
else 
{ 
  echo "<b>Es sind noch keine Eiträge vorhanden!</b>"; //text der angezeigt wird, falls keine einträge vorhanden 
} 
} 

if($action==neu) 
{ 
  echo "<a href='".$HTTP_SERVER_VARS[PHP_SELF]."?page=Guestbook'><p>zum Guestbook</a>"; 
} 
else 
{ 
  echo "<p><a href='".$HTTP_SERVER_VARS[PHP_SELF]."?action=neu&page=Guestbook'>Neuer Eintrag</a>"; 
} 
?>
 
Moin !

Ich hab zwar jetzt nicht alles angeguckt, aber du rufst das Formular über einen Link auf (über eine URL) und action=neu wird somit nicht per POST (im Header) sondern per GET (in der URL) übertragen.

Oben holst du dir die action mit $action = $HTTP_POST_VARS['action'];. Da die action in dem Fall aber nicht per POST sondern per GET übertragen wird musst du sie dir mit $action = $HTTP_GET_VARS['action']; holen. Dadurch wären aber die actions save und so weiter ausgehebelt also ersetze am besten den oberen Teil $action = $HTTP_POST_VARS['action']; durch:

PHP:
if (empty($HTTP_POST_VARS['action'])) {
    $action = $HTTP_GET_VARS['action'];
} else {
    $action = $HTTP_POST_VARS['action'];
}

Ansonsten würde ich empfehlen (je nach PHP Version) lieber die superglobalen Arrays $_GET und $_POST statt $HTTP_GET_VARS und $HTTP_POST_VARS zu verwenden.

Gruß thing
 
Hi Thing,

vielen Dank für Deine Hilfe, ich werde es mal nachher versuchen,
falls es nicht melde ich mich nochmal...

Gruß M@rk
 
Hallo Thing,

vielen Dank nochmals für Deine schnelle und freundliche Hilfe.
... jetzt funktionierts...


Gruß M@rk
 
... noch ne Frage wie eigentlich die mail funktion in diesem script?
Irgendwie kapier ich das nicht... wann kommt die action save?


Gruß M@rk
 
Wenn das Formular zur Eingabe eines Beitrages abgesendet wird enthält es unter anderem die Zeile

<input type="hidden" name="action" value="save">

und somit ein Inputfeld namens action mit dem Wert save. PHP bekommt im Script dieses Feld unter der Variable $_POST['action'] oder $HTTP_SERVER_VARS['action'] (< veraltet) oder wenn register_globals in der php.ini off ist direkt als $action (< sicherheitskritisch).

Gruß thing
 
Hi Thing,

... danke für die Ausführung, Dich kann man echt was fragen...
Ich muß mal schauen, denn wie gesagt geht jetzt das Gästebuch, aber die Mailerei noch nicht. Macht es Dir eigentlich was aus, wenn ich Dich noch ein paar mal was frage, denn es ist gut wenn es Leute wie Dich gibt, die Anfänger nicht gleich unterbuttern wie in manchen Foren es manche Supercracks machen...


Gruß M@rk :-)
 
Hi Mark,

wenn du willst kannste mir kerne weiterhin Fragen stellen :-)

Ich hab auch eine: Was für 'ne Mailerei meinst du genau ? Das z.B. du per eMail informiert wirst wenn jemand einen Eintrag in das Gästebuch schreibt ?

Gruß thing
 
Zurück