mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 26.04.2024 18:18 Benutzername: Passwort: Auto-Login

Thema: Kontaktformular vom 07.04.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Kontaktformular
Seite: 1, 2  Weiter
Autor Nachricht
Account gelöscht
Threadersteller


Ort: -
Alter: -
Verfasst Sa 07.04.2007 01:10
Titel

Kontaktformular

Antworten mit Zitat Zum Seitenanfang

So dann mal zum nächsten Problemfall!
Habe ein Kontaktformular

Code:

<?php
$gesendet = $_POST['gesendet'];
$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$betreff = $_POST['betreff'];
$nachricht = $_POST['nachricht'];
$email = $_POST['email'];
if ($gesendet == "Absenden") {

$an ="emailadresse";

$text ="Hallo,\n Sie haben eine neue Nachricht von $vorname $nachname erhalten:\n\n
====\n $nachricht\n====\n\nSie können $vorname $nachname unter dieser $email erreichen.";
mail($an,$betreff,$text,"From: ".$email);
echo "<b>Ihre Nachricht wurde gesendet!</b>";
}
else { ?>

<script type="text/javascript">
function eingaben_ueberpruefen(){
var mail = document.Formular.email.value;
if (document.Formular.vorname.value.length < 3){
alert("Sie haben noch keinen Vornamen eingegeben!")
document.Formular.vorname.focus();
return false;
}
else if (document.Formular.nachname.value.length < 3){
alert("Bitte geben Sie Ihren Nachnamen ein");
document.Formular.nachname.focus();
return false;
}
else if (mail.length < 10 || mail.indexOf ('@',0) == -1 || mail.indexOf ('.',0) == -1){
alert("Bitte geben Sie eine gültige E-Mail-Adresse ein.")
document.Formular.email.select();
return false;
}
else if (document.Formular.betreff.value.length < 10){
alert("Bitte geben Sie einen Betreff ein!")
document.Formular.betreff.focus();
return false;
}
else if (document.Formular.nachricht.value.length < 20){
alert("Bitte geben Sie eine Nachricht ein!")
document.Formular.nachricht.focus();
return false;
}
else
return true;
}
</script>

<form name="Formular" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"
onSubmit="return eingaben_ueberpruefen();">
<table cellPadding=4 cellSpacing=2 border=1>
<tr>
<td><span class="Stil1"><b>Vorname:</b></span></td>
<td><input type="text" name="vorname" size="35" maxlength="40"></td>
</tr>
<tr>
<td><span class="Stil1"><b>Nachname:</b></span></td>
<td><input type="text" name="nachname" size="35" maxlength="40"></td>
</tr>
<tr>
<td><span class="Stil1"><b>E-Mail:</b></span></td>
<td><input type="text" name="email" size="35" maxlength="40"></td>
</tr>
<tr>
<td><span class="Stil1"><b>Betreff:</b></span></td>
<td><input type="text" name="betreff" size="45" maxlength="60"></td>
</tr>
<tr>
<td colspan=2>
<span class="Stil1"><b>Nachricht:</b></span><br>
<textarea name="nachricht" cols="45" rows="10"></textarea>
</td>
</tr>
<tr>
<th colspan=2><br>
<input type="submit" name="gesendet" value="Absenden"> <span class="Stil1">*</span>
<input type="reset">
</th>
</tr>
</table>
</form>
<?php


Wo ist das Problem weshalb der mir die Nachricht nicht sendet?

Vielen Dank schonmal im vorraus!

MFG Daniel


Zuletzt bearbeitet von am Sa 07.04.2007 23:54, insgesamt 1-mal bearbeitet
 
cRime

Dabei seit: 07.05.2006
Ort: Berlin
Alter: 39
Geschlecht: Männlich
Verfasst Sa 07.04.2007 01:49
Titel

Antworten mit Zitat Zum Seitenanfang

ohne mir den code jetzt angeguckt zu haben:
testest du dein mail script local mit beispielsweise xamp oder auf einem webserver?

hat der server die möglichkeit mails zu versenden?
bei einigen free-webhostern funktionerts nicht.

edit:
warum schließt du deinen php tag mit <?php und nicht mit ?> * Keine Ahnung... *

edit2:
* Ich bin ja schon still... * sehe gerade dass da noch einiges an code fehlt, nehme mal an du hast die unteren paar zeilen nicht mitkopiert...
ansonsten würde ich wie folgt ergänzen


}
?>


Zuletzt bearbeitet von cRime am Sa 07.04.2007 01:53, insgesamt 3-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
Account gelöscht
Threadersteller


Ort: -
Alter: -
Verfasst Sa 07.04.2007 02:10
Titel

thx

Antworten mit Zitat Zum Seitenanfang

Jop den Rest hatte ich vergessen ist aber vorhanden.
Also dachte das das nichts mit dem server zu tun hat wenn ich da meine emailadresse angebe.
Und ich teste das indem ichs hochlade und ausprobiere als wäre ich gast aber mit ner anderen adresse vom freund!


MFG Daniel


Zuletzt bearbeitet von am Sa 07.04.2007 02:11, insgesamt 1-mal bearbeitet
 
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Sa 07.04.2007 02:46
Titel

Antworten mit Zitat Zum Seitenanfang

Also ersteinmal: Wenn du bei deinem Posting die Code-Tags benutzt hättest, dann wäre das alles sehr viel übersichtlicher.

Code:
 </form>
<?php

Wieso öffnest du hier einen PHP-Bereich am Ende deines Scriptes? Sollte der hier nicht eher abgeschlossen werden?
Sieht recht unübersichtlich aus, wenn du so arbeitest. Ja, ich weiß, daß man PHP und HTML so mischen kann... Aber schön finde ich es dennoch nicht...
Du mußt Funktionalität und Design ja nicht komplett voneinander trennen (auch wenn das am schönsten wäre), aber ich rate dazu ab, Programm und Markup so zu vermischen.
Bei kleinen Projekten geht das noch einigermaßen. Bei großen Projekten würde ich komplett und strikt trennen. So kann ein Programmierer dann am Code arbeiten, während jemand, der überhaupt keine Ahnung vom Coden hat, den Krams designen könnte. Dazu kann man mit einer Template-Enginge arbeiten. Aber - wie auch immer: zurück zum Problem...

hmm... Nee, wenn ich das so sehe, muß ich auch noch was zum Code schreiben...
Der sieht gruselig aus. Der HTML-Code ist stark verbesserungswürdig. Es beginnt schon damit, daß die DTD-Angabe fehlt.
Dann sollte man z.B. Attributwerte in Anführungszeichen setzen, u.a..
Auch der PHP-Code sieht nicht schön aus...
Die Prüfungen sind ganz übel. Du prüfst nur clientseitig mit Javascript. Das ist zwar eine nette Sache, bringt aber im Endeffekt nicht viel.
Klar ist der Einsatz von JS hier ganz praktisch, weil es einen Mehrwert für den User bringen kann. Aber was wenn ein User kommt, der JS deaktiviert hat?
Du mußt die Prüfungen in jedem Fall auch noch serverseitig durchführen. Die Prüfung auf Gültigkeit der Eingaben mit JS kann die mit PHP nicht ersetzen.

Was macht dein Javascript im Body deines Dokumentes? Das gehört in den Head (zumindest in diesem Fall).

Dann deine Mailprüfung mit JS. Die sieht nicht besonders zuverlässig aus. Die prüft auch nicht besonders viel. Hier könnte man eine Mange an syntaktisch falschen Mailadressen eingeben und deine Prüfung würde sie durchlassen.
Wieso eigentlich die Prüfung auf 10 Zeichen Länge? Es gibt doch auch kürzere Adressen.
Und es gibt kürzere Betreffzeilen als 10 Zeichen! Warum dem User etwas aufdrängen, was er vielleicht gar nicht schreiben will?
Es reicht, wenn du prüfst, ob hier überhaupt was eingegeben wurde. Wenn der Betreff z.B. "Rechnung" heissen soll, dann würde dein Script sagen: "Bitte geben Sie einen Betreff ein!". Der User hat aber ein Subject eingegeben und bekommt dann so eine verwirrende Meldung.
Ähnliches mit der Nachricht. Prüfe nicht auf 20 Zeichen. Prüfe nur, ob da Text drin ist oder nicht.
Außerdem finde ich die Alert-Boxen nicht schön. Das empfinde ich eher als nervig. Das würde ich anders angehen.
Wie wäre es beispielsweise, wenn du dann in einer auffälligen Farbe (am Besten Rot) den Text neben dem falsch ausgefüllten Formularfeld einblendest?

Ich habe eine Funktion zum Prüfen von Mailadressen geschrieben, die mit einem regulären Ausdruck arbeitet. Du kannst sie gerne verwenden.
Code:
function checkAdresse( email )
{
   var expression = /^[_a-zA-Z0-9-](\.{0,1}[_a-zA-Z0-9-])*@([a-zA-Z0-9-]{2,}\.){0,}[a-zA-Z0-9-]{3,}(\.[a-zA-Z]{2,4}){1,2}$/;

   if ( expression.test( email ) )
      return true;
   else
      return false;
}

Den gleichen RegEx kann man außerdem auch in PHP einsetzen.

Ich habe deinen Code mal etwas verbessert. Der sollte jetzt auch funktionieren.
Allerdings hatte ich keine Lust, da ein perfektes Script draus zu machen. Du solltest also selbst noch was verbessern, z.B. die serverseitige Prüfung der eingegebenen Werte durchführen.
Der Betreff darf z.B. keine Zeilenumbrüche enthalten, sonst wird die Mail nicht korrekt versendet. Solltest du also prüfen.
Dann solltest du noch ein paar zusätzliche Headerzeilen einfügen. Als zusätzlichen Header nutzt du nur "From: ". Aber ich würde noch ein paar dazu nehmen. Das wären die wohl wichtigsten und das sollte dann auch reichen:
Code:
$headers = "From: $_POST['email']\r\n";
$headers.= "Reply-To: $_POST['email']\r\n";
$headers.= "MIME-Version: 1.0\r\n";
$headers.= "Content-type: text/html; charset=UTF-8\r\n";
$headers.= "X-Mailer: PHP/" . phpversion();

Die Header müssen laut dem SMTP-RFC mit \r\n abgetrennt werden und nicht mit \n. Das funktioniert im Normalfall zwar trotzdem bei den meisten MTAs, ist aber falsch...
Naja, in jedem Fall verbessert das dann schon mal deine Mail. Du willst ja auch nicht, daß sie gleich im ersten Spamfilter hängenbleibt. Außerdem willst du sicherlich, daß sie in jedem Mailclient korrekt angezeigt wird und daß Umlaute/Sonderzeichen korrekt angezeigt werden (Darum die Zeichensatz-Angabe). Außerdem sollte im Content-Type angegeben werden, ob es sich um eine Text- oder um eine HTML-Mail handelt.

Warum machst du sowas mit all deinen Vars?
Code:
$vorname = $_POST['vorname'];

Du kannst doch problemlos mit den Superglobals $_POST arbeiten. Ist nur Speicherverschwendung, wenn du die noch mal in neue Vars rein stopfst.

So. Das war's jetzt erstmal...
Da wäre zwar noch einiges, was ich schreiben könnte, aber ich denke, daß reicht jetzt erstmal. Du kannst ja noch weitere Verbesserungen vornehmen...
In jedem Fall solltest du die Eingaben serverseitig prüfen. Ich hab da nur einen groben Check für zwei Felder eingefügt.
Wichtig wäre, daß man dein Formular nicht zum Spammen nutzen kann. Du solltest also zusehen, daß man nicht eventuell noch CC- oder BCC-Felder (oder sonst unschöne Dinge) mit übergeben kann, wo es nicht hingehört. Mit Hilfe von str_replace() könntest du sowas rausfiltern.
Kannst vielleicht auch einfach nur prüfen, ob der Name nur alphanumerische Zeichen enthält (und keine Zeichen wie \; oder sonstwas).
Was noch? hmm... Mehr fällt mir jetzt erstmal nicht ein...
Hier der Code und jetzt hau rein und bastel die Prüfungen zu Ende *zwinker*
Code:

<?php

$error = "";
$mailmsg = "";

/**
* Überprüfung von Emailadressen auf syntaktische Korrektheit
* Die Funktion erwartet die Emailadresse als String und gibt
* true oder false zurück
*/
function check_adress( $email )
{
   $expression = "^[_a-zA-Z0-9-](\.{0,1}[_a-zA-Z0-9-])*@([a-zA-Z0-9-]{2,}\.){0,}[a-zA-Z0-9-]{3,}(\.[a-zA-Z]{2,4}){1,2}$";

   if ( ereg($expression, $email) )
   {
      return true;
   }
   else
   {
      return false;
   }
}



// Wenn Formular abgeschickt
if ( isset( $_POST['gesendet'] ) )
{
   // Wurde ein Vorname eingegeben?
   if ( empty( $_POST['vorname'] ) )
   {
      $error = "Fehler: Es wurde kein Vorname eingegeben.";
   }
   if ( check_adress( $_POST['email'] ) == false )
   {
      $error = "Fehler: Es wurde keine gültige Emailadresse eingegeben.";
   }
   
   // Header der Email zusammensetzen
   $headers = "From: $_POST['email']\r\n";
   $headers.= "Reply-To: $_POST['email']\r\n";
   $headers.= "MIME-Version: 1.0\r\n";
   $headers.= "Content-type: text/html; charset=UTF-8\r\n";
   $headers.= "X-Mailer: PHP/" . phpversion();
   
   $an = "danielswebsite@gmx.de";
   $text = "Hallo,\nSie haben eine neue Nachricht von " . $_POST['vorname'] . " " . $_POST['nachname'] . "erhalten:\n\n====\n". $_POST['nachricht'] ."\n====\n\nSie können " . $_POST['vorname'] . " " . $_POST['nachname'] . " unter dieser " . $_POST['email'] . " erreichen.";
   if ( @mail( $an, $_POST['betreff'], $text, $headers )
   {
      $mailmsg = "Ihre Nachricht wurde gesendet!";
   }
   else
   {
      $mailmsg = "Fehler! Ihre Nachricht konnte leider nicht gesendet werden!";
   }
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="de">

<head>
   <meta http-equiv="content-language" content="de">
   <meta http-equiv="content-type" content="text/html; charset=UTF-8">

   <title>Mail-Formular</title>
   
   <script type="text/javascript">
   
   /**
   * Überprüfung von Emailadressen auf syntaktische Korrektheit
   * Die Funktion erwartet die Emailadresse als String und gibt
   * true oder false zurück
   */
   function checkAdresse( email )
   {
      var expression = /^[_a-zA-Z0-9-](\.{0,1}[_a-zA-Z0-9-])*@([a-zA-Z0-9-]{2,}\.){0,}[a-zA-Z0-9-]{3,}(\.[a-zA-Z]{2,4}){1,2}$/;

      if ( expression.test( email ) )
         return true;
      else
         return false;
   }


   function eingaben_ueberpruefen()
   {
      // "123" wäre bei deiner Prüfung ein gültiger Vorname. Prüfe besser auf Buchstaben als auf Stringlänge.
      if ( document.Formular.vorname.value.length < 3 )
      {
         window.alert( "Sie haben noch keinen Vornamen eingegeben!" )
         document.Formular.vorname.focus();
         return false;
      }
      // Denkbar wären auch Nachnamen mit nur zwei Buchstaben. Besser prüfen, ob nur Buchstaben eingegeben wurden anstatt zu testen, ob mehr als drei Zeichen.
      // "123" wäre bei deiner Prüfung ein gültiger Nachname.
      else if ( document.Formular.nachname.value.length < 3 )
      {
         window.alert( "Bitte geben Sie Ihren Nachnamen ein" );
         document.Formular.nachname.focus();
         return false;
      }
      // Deine Mailprüfung durch meine ersetzt. Diese Prüfung kannst du jetzt so lassen. Die anderen würde ich eventuell noch überarbeiten
      else if ( checkAdresse( document.Formular.email.value ) == false )
      {
         window.alert( "Bitte geben Sie eine gültige E-Mail-Adresse ein." );
         document.Formular.email.select();
         return false;
      }
      // Subjects können kürzer als 10 Zeichen sein. Der User bekommt hier evtl. die Meldung, er solle einen Betreff eingeben, obwohl er einen eingegeben hat.
      else if ( document.Formular.betreff.value.length < 10 )
      {
         alert( "Bitte geben Sie einen Betreff ein!" );
         window.document.Formular.betreff.focus();
         return false;
      }
      else if ( document.Formular.nachricht.value.length < 20 )
      {
         window.alert( "Bitte geben Sie eine Nachricht ein!" );
         document.Formular.nachricht.focus();
         return false;
      }

      return true;
   }
   </script>
</head>


<body>
   <?php
   if ( !empty( $error ) )
   {
      echo "<p align=\"center\"><b>" . $error . "</b></p>";
   }
   if ( !empty( $mailmsg ) )
   {
      echo "<p align=\"center\"><b>" . $mailmsg . "</b></p>";
   }
   ?>
   <form name="Formular" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" onSubmit="return eingaben_ueberpruefen();">
      <table cellpadding="4" cellspacing="2" border="1">
         <tr>
            <td><span class="Stil1"><b>Vorname:</b></span></td>
            <td><input type="text" name="vorname" size="35" maxlength="40"></td>
         </tr>
         <tr>
            <td><span class="Stil1"><b>Nachname:</b></span></td>
            <td><input type="text" name="nachname" size="35" maxlength="40"></td>
         </tr>
         <tr>
            <td><span class="Stil1"><b>E-Mail:</b></span></td>
            <td><input type="text" name="email" size="35" maxlength="40"></td>
         </tr>
         <tr>
            <td><span class="Stil1"><b>Betreff:</b></span></td>
            <td><input type="text" name="betreff" size="45" maxlength="60"></td>
         </tr>
         <tr>
            <td colspan="2">
               <span class="Stil1"><b>Nachricht:</b></span><br>
               <textarea name="nachricht" cols="45" rows="10"></textarea>
            </td>
         </tr>
         <tr>
            <th colspan="2"><br>
               <input type="submit" name="gesendet" value="Absenden"> <span class="Stil1">*</span>
               <input type="reset">
            </th>
         </tr>
      </table>
   </form>
</body>
</html>


Sieht vielleicht jetzt alles ein wenig unübersichtlich aus, was ich geschrieben hab...
Aber ich hab einfach mal drauf los getippt und auch nicht mehr Korrektur gelesen und auch nichts mehr umstrukturiert.


Zuletzt bearbeitet von rob am Sa 07.04.2007 03:02, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
Account gelöscht
Threadersteller


Ort: -
Alter: -
Verfasst Sa 07.04.2007 02:52
Titel

Ohh mann sorry

Antworten mit Zitat Zum Seitenanfang

Hast dir j wahnsinnig mühe gamcht und bin aber vor ein paar minuten selber fertig geworden mit dem porggen.
Es funzt auch und ales aber trotzdem nochmal tausend dank und endschuldigung.


MFG Daniel

P.S habe noch nid viel ahnung von php und deshalb meine homepage noch nid so vereinfacht aber bin schon stolz das ichs geschafft habe das ich nur eine layout datei habe.
Feilsche auch noch am design etc.


Zuletzt bearbeitet von am Sa 07.04.2007 23:54, insgesamt 2-mal bearbeitet
 
Account gelöscht
Threadersteller


Ort: -
Alter: -
Verfasst Sa 07.04.2007 03:02
Titel

Nochmal sorry

Antworten mit Zitat Zum Seitenanfang

Du hast dir soviel mühe gemacht und so viel geschrieben ...

tut mir leid * Ich bin unwürdig * * Ich geb auf... * Menno!
 
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Sa 07.04.2007 03:08
Titel

Antworten mit Zitat Zum Seitenanfang

Also ich gebe dir den Rat, das besser mal zu lesen.
Wenn du nämlich deinen Code so benutzt, dann kann man dein Formular wunderbar zum Spammen einsetzen.
Und wenn irgendwann mal Hunderttausend Spam-Mails mit deinem Formular verschickt wurden, dann ist das sicherlich nicht so schön...

Sicher dein Formular ab! Du mußt serverseitige Prüfungen einbauen! Alle Usereingaben von außen (also alles, was in dein Formular eingetippt und per POST verschickt wird) müssen in jedem Fall immer geprüft und ggf. bereinigt werden.
Eine Prüfung mit Javascript hilft da absolut Null.
Du mußt beispielsweise zusehen, daß man nicht noch CC- und BCC-Felder mit übergeben kann.
  View user's profile Private Nachricht senden
Account gelöscht
Threadersteller


Ort: -
Alter: -
Verfasst Sa 07.04.2007 03:21
Titel

Danke

Antworten mit Zitat Zum Seitenanfang

Werde deinen Rat auch befolgen nur erst wenn ich alle anderen seiten fertig habe und mit design etc zufrieden bin gebe ich mich faran mal noch mehr dazu zu lernen.

Ich bin auch dabei eine homepage für einen Getränkemakrt zu erstellen und wüsste gerne was man an rechtlichem auf so ne seite machen muss.
Bei privaten ist dat ja nid viel.

MFg Daniel

P.S 2 Fragen noch

1, Ist es möglich bei der Galerie wo du mir schon geholfen hast für kleine und große bilder die in verschiedenen ordnern sind so variablen zu proggen das ich die nicht gleich nennen muss und somit iegntlich auch in den selben ordner machn könnte.

2.Gibt es i-wo im netzt ein ganz ausführliches tutoril oder script für ein php gästebuch.



Tausend dank shconmal dieses forum ist der hammmer Grins
 
 
Ähnliche Themen PHP Kontaktformular
Kontaktformular
Kontaktformular
Kontaktformular
PHP-Kontaktformular
Kontaktformular
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.