Dimitri Karastelev: Einfaches Formular

Hallo Leute,

ich habe ein einfaches, kleines Formular was auf einem Server geht auf dem anderen jedoch nicht. Da wo das geht ist php 4.4.1 auf dem Strato(da wos nicht geht) ist 4.4.2. Jetzt sagt bitte nicht ich soll von Strato weg, der Server ist nun da, denn wird der Chef auch nicht wechseln können.

Nun so sieht das Formular aus:

<? if(isset($senden)) { ?>

<table style="margin-top:200;">
<tr>
    <td align="center" style="font-family:Arial; font-size: 12;">Danke f&uuml;r Ihre
      Interesse. Ich werde mich umgehend mit Ihnen in Verbindung setzen.</td>
</tr>
</table>

<?
    $rec="meinemail@gmx.net";
    $mailtext.=" Formular: Nachricht  \n\n";
    $mailtext.="Name: \n $name\n\n";
    $mailtext.="E-Mail: \n $email\n\n";
    $mailtext.="Nachricht: \n";
    $mailtext.="$nachricht \n\n";
    // mail ($rec,"Email an",$mailtext,"From: $email");
    mail("$rec" , " website " , $mailtext , "from: $email");
    ?>

<? } else { ?>
<form name="kontakt" method="post" action="" onSubmit="return testen()">
<table style="font-family: Arial; font-size: 12; margin-top:200;" >
<tr>
 <td>Name:</td>
 <td><input name="name" type="text" ></td>
</tr>
<tr>
 <td>e-Mail:</td>
 <td><input name="email" type="text" ></td>
</tr>
<tr>
 <td valign="top">Nachricht:</td>
 <td><textarea cols="27" rows="5" name="nachricht"></textarea></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" name="senden" value="Senden">
</td>
</tr>

</table>
</form>

<? } ?>

Man hat mir gesagt daß ich paar Befehle für Strato anders ansprechen muß aber wie?

  1. echo $begrüßung;

    ich habe ein einfaches, kleines Formular was auf einem Server geht auf dem anderen jedoch nicht. Da wo das geht ist php 4.4.1 auf dem Strato(da wos nicht geht) ist 4.4.2.

    Da viele keinen Server bei Strato haben, wäre eine genau Beschreibung dessen, was nicht geht, hilfreich. Die Antworten könnten sonst so ausfallen: "Bei mir gehts" und das nützt dir auch nichts.

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      ich habe ein einfaches, kleines Formular was auf einem Server geht auf dem anderen jedoch nicht.

      Möglicherweise liegt es an der Einstellung von register_globals: Using Register Globals. Ob dieses Feature bei Strato ausgeschaltet ist, sagt dir ein phpinfo().

      echo "$verabschiedung $name";

      1. echo $begrüßung;

        ich habe ein einfaches, kleines Formular was auf einem Server geht auf dem anderen jedoch nicht.

        Möglicherweise liegt es an der Einstellung von register_globals: Using Register Globals.

        Es lag an Register Globals. Läuft nun. Danke

        1. echo $begrüßung;

          Es lag an Register Globals. Läuft nun. Danke

          Übrigens lässt sich dieses Script als Spamschleuder missbrauchen.

          $rec="meinemail@gmx.net";
              $mailtext.=" Formular: Nachricht  \n\n";

          $mailtext wurde nicht initialisiert, aber hier wird es um einen Text erweitert. Das wäre nicht weiter tragisch, wenn durch register_globals=on nicht einfach auch noch ein Wert für mailtext mitgegeben werden könnte, der dann bereits in $mailtext drinsteht, bevor hier der Text angehängt wird. Der . vor dem = gehört dort nicht hin.
          Aus Spamschleuder-Sicht besteht aber keine Gefahr, da $mailtext im Body landet und dort ungefährlich ist.

          $mailtext.="Name: \n $name\n\n";
              $mailtext.="E-Mail: \n $email\n\n";
              $mailtext.="Nachricht: \n";
              $mailtext.="$nachricht \n\n";

          Der Teil ist unkritsch.

          mail("$rec" , " website " , $mailtext , "from: $email");

          Hier kann es dann passieren. Eine Kleinigkeit vorweg: Die "" um $rec sind überflüssig.
          Der Inhalt von $email wird vom Script ohne Prüfung in eine Header-Zeile übernommen. Wenn nun jemand statt einem einfachen adresse@example.com eine Mailadresse gefolgt von einem Zeilenumbruch und einer Cc:- oder Bcc:-Zeile mitsendet, bekommt nicht nur $rec eine Mail sondern auch die hier angegebenen Adressen. Du siehst den Missbrauch zwar in deinem Maileingang, doch wenn du den erst abends kontrollierst ist es zu spät, und du stehst sicher schon auf der Blacklist der Provider.

          In eine Email-Adresse gehören keine Zeilenumbruchzeichen, deswegen müssen sie dort raus, wenn sie jemand eingefügt hat. Die folgende Zeile oberhalb von mail(...) eingebaut entfernt alle Zeilenumbruchszeichen aus der Adresse. Wenn jemand Mist reinschreibt, sieht das dann zwar etwas komisch aus, ist nun aber ungefährlich.

          $email = str_replace(array("\r", "\n"), '', $email);

          Dass trotzdem jemand versucht, das Formular zu missbrauchen kannst du nicht verhindern. Du kannst höchstens noch weitere Hürden einbauen und hoffen, dass das Spam-Programm sie nicht nimmt.

          echo "$verabschiedung $name";

    2. echo $begrüßung;

      ich habe ein einfaches, kleines Formular was auf einem Server geht auf dem anderen jedoch nicht. Da wo das geht ist php 4.4.1 auf dem Strato(da wos nicht geht) ist 4.4.2.

      Da viele keinen Server bei Strato haben, wäre eine genau Beschreibung dessen, was nicht geht, hilfreich. Die Antworten könnten sonst so ausfallen: "Bei mir gehts" und das nützt dir auch nichts.

      Recht hast Du.
      Jedenfalls wenn man auf Senden geht, löscht er die Eingaben im Formular sendet aber nichts und es erscheint auch kein "Danke f&uuml;r Ihre
            Interesse. Ich werde mich umgehend mit Ihnen in Verbindung setzen" Was normalerweise erscheint wenn das Script richtig funktioniert. Ich hoffe das reicht erst mal als Beschreibung.

  2. Denke auch das es mit den globalen Variabeln zusammen hängt.

    Schau mal nach der ersten Zeile

    <? if(isset($senden)) { ?>

    Teste mal ob <? if(isset($_REQUEST['senden'])) { ?>

    funktioniert.

    Gruß
    Localhorst