Mikee: Fehler in "Seite empfehlen"

Hallo Leute,

ich habe ein Problem mit meinem "Seite empfehlen"-Script

Auf der zu empfehlenden Seite habe ich folgenden Link der ein PopUp aufruft und dabei die aktuelle URL übergibt:

  
<a href="#" onClick="window.open('/_lib/empfehlen.php?ref='+location.href,'NewWindow','width=600, height=600')">Seite weiterempfehlen</a>  

So hier der Quelltext der empfehlen.php:

  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<title></title>  
</head>  
  
<body>  
  
<?php  
$url = $_GET['ref'];  
if (isset($_POST['submit'])) { //ist das Formular abgesendet worden?  
$error = false;  
$regex ="/^"."[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*"."@" ."([a-zA-Z0-9-]+\.)+"."([a-zA-Z]{2,4})"."$/";  
if (!preg_match($regex, $_POST['s_email'])) {  
echo "Geben Sie eine gültige Sender-Emailadresse ein!<br /><br />";  
$error = true;  
}  
if (!preg_match($regex,$_POST['e_email'])) {  
echo "Geben Sie eine gültige Empfänger-Emailadresse ein!<br /><br />";  
$error = true;  
}  
if ($_POST['s_email'] == $_POST['e_email']) {  
echo "Geben Sie zwei verschiedene Emailadressen an!<br /><br />";  
$error = true;  
}  
if ($_POST['s_name'] == "" or $_POST['e_name'] == "") {  
echo "Geben Sie sowohl ihren Namen als auch den Empfängernamen an!<br /><br />";  
$error = true;  
}  
if ($error == true) {  
echo "<a href=\"javascript:history.back()\"><strong>Zur&uuml;ck</strong></a>";  
}  
else { //Email versenden  
//im folgenden wird die Nachricht generiert.  
$nachricht = "Hallo ".$_POST['e_name'].", \n";  
$nachricht .= $_POST['s_name'] ." hat gerade die Seite www.doedel.de besucht und meint, dass eventuell auch ".$ref." für dich interessant sein könnte. \n";  
$nachricht .= "Er hinterließ dir folgende Nachricht: \n";  
$nachricht .= $_POST['nachricht'];  
$nachricht .= "\nEs würde uns freuen wenn du mal vorbei schaust!\n";  
$nachricht = strip_tags($nachricht); //nur zur Sicherheit!  
  
if (!mail($e_email,"Surftipp von ".$_POST['s_name'],$nachricht, "From: ".$s_email)) {  
echo "Mail konnte nicht versand werden!";  
}  
else {  
echo "Die Email wurde erfolgreich versendet!";  
echo "<a href=\"javascript:window.close()\">Fenster schließen</a>";  
}  
}  
}  
else {  
?>  
  
Sie können hier die gerade gelesene Seite an Freunde, Bekannte oder Kollegen weiterempfehlen.<br/><br/>  
Die Eingabe der Namen und Email-Adressen sind notwendig, diese werden von uns nicht weitergegeben bzw. weiterverwendet.<br/><br/><br/>  
  
<form method="post" action="empfehlen.php">  
 <table width="460" border="0" cellpadding="0" cellspacing="0">  
  <tr>  
   <td width="203" height="30" valign="MIDDLE" align="RIGHT">Ihr Name:</td>  
   <td width="257" valign="MIDDLE" align="RIGHT"><input type="text" name="s_name" class="formfeld" /></td>  
  </tr>  
  <tr>  
   <td height="30" valign="MIDDLE" align="RIGHT">Ihre Email Adresse:</td>  
   <td valign="MIDDLE" align="RIGHT"><input type="text" name="s_email" class="formfeld" /></td>  
  </tr>  
  <tr>  
   <td height="18" valign="top">&nbsp;</td>  
   <td valign="top">&nbsp;</td>  
  </tr>  
  <tr>  
   <td height="30" valign="MIDDLE" align="RIGHT">Name ihres Freundes:</td>  
   <td valign="MIDDLE" align="RIGHT"><input type="text" name="e_name" class="formfeld" /></td>  
  </tr>  
  <tr>  
   <td height="30" valign="MIDDLE" align="RIGHT">Email Adresse ihres Freundes:</td>  
   <td valign="MIDDLE" align="RIGHT"><input type="text" name="e_email" class="formfeld" /></td>  
  </tr>  
  <tr>  
   <td height="35" valign="top">&nbsp;</td>  
   <td valign="top">&nbsp;</td>  
  </tr>  
  <tr>  
   <td valign="top" height="154" align="RIGHT">Nachricht (optional):</td>  
   <td valign="top" align="RIGHT"><textarea name="nachricht" rows="8" class="formfeld" /></textarea></td>  
  </tr>  
  <tr>  
   <td height="53" valign="top">&nbsp;</td>  
   <td valign="MIDDLE">&nbsp;<input type="submit" name="submit" value="SENDEN" class="formbutton" /></td>  
  </tr>  
 </table>  
</form>  
  
  <?php  
}  
?>  
</body>  
</html>  

Die URL wird wunderbar übergeben, die habe ich nämlich mal mit einem echo ausgegeben, das hat funktionert. Auch die komplette Abfrage auf Korrektheit funktioniert. Wenn alles okay ist komplett allerdings die Meldung:
"Internal Server Error, The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator."

Leider weiß ich nicht wo mein Fehler ist. Irgendeiner einen Tip ?

Danke Mikee

  1. Leider weiß ich nicht wo mein Fehler ist. Irgendeiner einen Tip ?

    Dein Fehler ist, das du das Serverlog noch nicht geprüft hast,  das ist da mehr Auskunftfreudig als der Browser. Wenn du darauf keinen Zugriff hast, mach, was dir gesagt wird: "Please contact the server administrator."

    Such dir da die entsprechende Fehlermeldung, wenn du dann nicht weiterkommst, poste diese hier. Mit einer allgemeinen Meldung ist leider keine Hilfe möglich.

  2. hi,

    Leider weiß ich nicht wo mein Fehler ist. Irgendeiner einen Tip ?

    Möchtest Du wirklich eine solche Spamschleuder online bringen? Nicht dass die Besucher den Spam machen, aber ein fieser Bot könnte dies benutzen um frei nach Schnauze emails samt Freitext an beliebige Adressaten zu schicken und das im Sekundentakt ;)

    (möglichereise sind auch noch die Header manipulierbar und damit multipart Messages möglich, das habe ich jedoch nicht geprüft)

    Tip: Machs nicht.

    Hotti

    1. Schonmal Danke, hier fehlt noch die Captcha Funktion. Erstmal sollte es aber mal von der Basis her funktionieren.

      Möchtest Du wirklich eine solche Spamschleuder online bringen? Nicht dass die Besucher den Spam machen, aber ein fieser Bot könnte dies benutzen um frei nach Schnauze emails samt Freitext an beliebige Adressaten zu schicken und das im Sekundentakt ;)

      1. Schonmal Danke, hier fehlt noch die Captcha Funktion.

        Nein. Was hier fehlt, ist der richtige Umgang mit solchen Sachen, da gibt es z.B. auch Dienstleister, die sowas übernehmen können.

        Erstmal sollte es aber mal von der Basis her funktionieren.

        Verstehe, ist auch ok. Mein Vorschlag: Speichere die Empfehlungen ersteinmal ab und guck, was da zusammenkommt. Dann kannst Du immer noch einen Dienstleister in Anspruch nehmen oder die Empfehlungen selbst weiterleiten nachdem Du den Spam aussortiert hast.

        Hotti

  3. Hi!

    Leider weiß ich nicht wo mein Fehler ist. Irgendeiner einen Tip ?

    Mein üblicher Tipp, das error_reporting auf E_ALL zu setzen (und display_errors auf on), kann auch dich weiterbringen. In deinem Fall zeigte er die Lesezugriffe auf Variablen, die nicht existieren.

    $url = $_GET['ref'];

    Warum erzeugst du eine weitere Kopie des Wertes in $_GET['ref']? Du verwendest $url im weiteren (gezeigten) Verlauf nicht. Die Kopie ist also sinnlos. Außerdem sehe ich lediglich eine einzige Stelle, an der du vermutlich den Wert in $_GET['ref'] hättest verwenden wollen. Selbst dann ist das Erstellen der Kopie mehr Aufwand, als $_GET['ref'] dieses eine Mal vollständig zu notieren.

    $regex ="/^"."[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*"."@" ."([a-zA-Z0-9-]+.)+"."([a-zA-Z]{2,4})"."$/";

    Einige Internet-Beteiligten sind gerade dabei, beliebige Top-Level-Domains, wie beispielsweise .berlin, einzuführen, und du beschränkst die Anwender hier auf 4 Zeichen. .museum und .travel sind außerdem schon vorhanden.

    Und warum zerstückelst du den Regex in mehrere Teilstrings? War der Code ursprünglich mal über mehrere Zeilen verteilt?

    echo "Geben Sie eine gültige Sender-Emailadresse ein!<br /><br />";

    Selbst wenn sie syntaktisch richtig ist, was du allerdings mit so einem einfachen Regex-Ausdruck nicht prüfen kannst, ist immer noch nicht gesagt, dass auch ein Postfach zur Adresse existiert.

    if ($error == true) {

    "Wenn es wahr ist, dass $error wahr ist" lässt sich kürzer ausdrücken.

    if (!mail($e_email,"Surftipp von ".$_POST['s_name'],$nachricht, "From: ".$s_email)) {

    Mal angenommen, du schaffst es, statt $s_email etwas zu nehmen, das der Benutzer ausgefüllt hat, bist du dann ganz sicher, dass der Wert keine Zeilenumbüche enthält und somit mit nur einem Captcha-Knacken mehrfach Spam versendet werden kann?

    "Internal Server Error, The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator."

    Das deutet darauf hin, dass der Apache von PHP kein ordentliches Dokument übergeben bekommen hat. Genaueres findest du, wie schon gesagt, im Error-Log des Apachen. Wenn da nichts genaues steht, woran das PHP gestorben ist, kannst du versuchen, das error_log in PHP zu konfigurieren, was dir genauere Auskunft zur Ursache liefern sollte.

    Lo!