zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden PHP-Email-Formular

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 02.09.2015, 11:23
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 27.08.2015
Beiträge: 11
frontloop befindet sich auf einem aufstrebenden Ast
Standard PHP-Email-Formular

Hi,

ich suche gerade eine Möglichkeit, ein Kontaktformular auf meine Homepage einzubauen.

Dabei gibt's zwei grundsätzliche Möglichkeiten:
Entweder über php (Hoster ist Strato) oder über formspree

Frage: Kennt das formspree jemand? Da scheint das ja über einen externen Anbieter (eben formspree) zu laufen, der die Email dann an mich weiterleitet.

PHP geht ja direkt. Wie schauts da mit der Sicherheit (spam, etc) aus?
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 02.09.2015, 12:32
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Zitat:
Zitat von frontloop Beitrag anzeigen
Frage: Kennt das formspree jemand?
Nein, ich nicht.

Zitat:
Zitat von frontloop Beitrag anzeigen
Da scheint das ja über einen externen Anbieter (eben formspree) zu laufen, der die Email dann an mich weiterleitet.
Scheint so, die haben dann natürlich bequemen Zugriff auf die Inhalte.

Zitat:
Zitat von frontloop Beitrag anzeigen
PHP geht ja direkt. Wie schauts da mit der Sicherheit (spam, etc) aus?
Bei einem Kontakformular gibt es ja nur feste Empfänger, solange du die Empfängeradressen nicht aus der Nutzereingabe beziehst, kann man jedenfalls keinen Spam an dritte versenden. Spam an dich? Dafür gibt es Spamfilter. Alternativ kannst du zusätzlich ein verstecktes Honypot-Feld in dein Formular einbauen und keine Mail versenden wenn das Feld befüllt wurde. Von Captchas und dergleichen halte ich absolut nichts, die sind nur für eins gut: Nutzer nachhaltig zu verärgern und zu vergraulen.

Solltest du dich für die PHP-Variante entscheiden empfehle ich zum Beispiel Swiftmailer anstatt alles selbst zu schreiben.
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 02.09.2015, 14:44
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 27.08.2015
Beiträge: 11
frontloop befindet sich auf einem aufstrebenden Ast
Standard

ok. Grad mal in den swiftmailer eingelesen.
Basis das hier ohne den Captcha-Teil

Stimmt das, was ich hier fabriziert habe?
Für die contact.php:
PHP-Code:
<?php

require_once(__DIR__ '/swiftmailer/lib/swift_required.php');

$valid true;
$errors = array();

$contact = array(
    
'name' => null,
    
'email' => null,
    
'message' => null
);

"mail" => array(  <-- Da kommen meine Daten rein!
    
"type" => "smtp",
    
"server" => "smtp.gmail.com",
    
"port" => 587,
    
"auth" => true,
    
"username" => "email@gmail.com",
    
"password" => "yourgmailpassword"
)

// Check if the form has been posted
if (isset($_POST['name'], $_POST['email'], $_POST['message'])) {
    
$contact filter_input_array(INPUT_POST, array(
        
'name'   => FILTER_SANITIZE_STRING,
        
'email'   => FILTER_SANITIZE_STRING,
        
'message'   => FILTER_SANITIZE_STRING,
    ), 
true);
    if (empty(
$contact['name'])) {
        
$valid false;
        
$errors['name'] = "Bitte geben Sie einen Namen ein.";
    }
    if (empty(
$contact['email'])) {
        
$valid false;
        
$errors['email'] = "Bitte geben Sie Ihre Email-Adresse an.";
    } elseif (!
filter_input(INPUT_POST'email'FILTER_VALIDATE_EMAIL)) {
        
$valid false;
        
$errors['email'] = "Bitte geben Sie Ihre Email-Adresse an.";
    }
    if (empty(
$contact['message'])) {
        
$valid false;
        
$errors['message'] = "Bitte geben Sie einen Nachrichtentext ein.";
    }

if (
$valid) {
        
// The email address the email will be sent to
        
$to $config['contact']['to'];
        
// Set the from address for the email
        
$from $config['contact']['from'];
        
// The email subject
        
$subject "Contact Form Submission";
        
// Build the body of the email
        
$mailbody "The contact form has been filled out.\n\n"
                  
"Name: " $contact['name'] . "\n"
                  
"Email: " $contact['email'] . "\n"
                  
"Message:\n" $contact['message'];
        
// Create the mail
        
$mail Swift_Message::newInstance();
        
$mail->setSubject($subject);
        
$mail->setFrom(array($from));
        
$mail->setTo(array($to));
        
$mail->setReplyTo(array($contact['email'] => $contact['name']));
        
$mail->setBody($mailbody);
        
// Create the mail transport
        
if ($config['mail']['type'] == 'smtp') {
            
// Use smtp account
            
$transport Swift_SmtpTransport::newInstance($config['mail']['server'], $config['mail']['port']);
            if (
$config['mail']['auth']) {
                
$transport->setUsername($config['mail']['username']);
                
$transport->setPassword($config['mail']['password']);
            }
        } else {
            
// Use mail function as fallback
            
$transport Swift_MailTransport::newInstance();
        }
        
// Create a mailer
        
$mailer Swift_Mailer::newInstance($transport);
        
// Send the mail
        
$result $mailer->send($mail);

        
// Danke
        
echo "email delivered";
        exit;
    }
}
?>
und für die dazugehörige html-Datei:

HTML-Code:
  <!-- Contact -->
    <form action="contact.php" method="post" accept-charset="utf-8" data-parsley-validate novalidate>
 	<?php if (!$valid): ?>
           <div class="error">
              <?php foreach($errors as $message):?>
                <div><?php echo htmlspecialchars($message); ?></div>
              <?php endforeach; ?>
           </div>
        <?php endif; ?>
     <div class="row 50%">
      <div class="6u 12u$(mobile)"><input id="name" type="text" class="text" name="name" placeholder="Name" value="<?php echo htmlspecialchars($contact

['name']);?>" required data-parsley-required-message="Bitte geben Sie einen Namen ein."/></div>
      <div class="6u$ 12u$(mobile)"><input id="email" type="text" class="text" name="email" placeholder="Email" value="<?php echo htmlspecialchars($contact

['email']);?>" required data-parsley-required-message="Bitte geben Sie Ihre Email-Adresse an." parsley-type-email-message="You must enter a valid email 

address."/></div>
      <div class="12u$">
       <textarea id="message" name="message" placeholder="Message" required data-parsley-required-message="Bitte geben Sie einen Nachrichtentext ein."><?php echo 

htmlspecialchars($contact['message']);?></textarea>
      </div>
      <div class="12u$">
       <ul class="actions">
        <li><input type="submit" value="Send Message" /></li>
       </ul>
      </div>
     </div>
    </form>
Mit Zitat antworten
  #4 (permalink)  
Alt 03.09.2015, 08:57
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 27.08.2015
Beiträge: 11
frontloop befindet sich auf einem aufstrebenden Ast
Standard

nochmal ein Nachtrag. Was ich vorhin übersehen habe und mir erst beim testen aufgefallen ist:

Nach der oben verlinkten Anleitung befindet sich alles, also der php-Teil und der html-Teil in der selben Datei (contact.php).

Wenn ich das wie bei mit beschrieben aufteile, nämlich den html-Teil in meiner Haupt-html-Datei und einer php-Datei, habe ich das Problem, dass manche php-Teile im html-Teil nicht verarbeitet werden.
z.B. die Zeile
HTML-Code:
 <textarea id="message" name="message" placeholder="Message" required data-parsley-required-message="Bitte geben Sie einen Nachrichtentext ein."><?php echo htmlspecialchars($contact['message']);?></textarea>
Führt dazu, dass in meinem Nachrichtefeld nicht nur steht "Message" sondern "<?php echo htmlspecialchars($contact['message']);?" und dieser Code-Teil ja offensichtlich nicht verarbeitet wird.

Frage: Wie trenne ich das ganze? Oder wo ist der Fehler?
Mit Zitat antworten
  #5 (permalink)  
Alt 03.09.2015, 10:09
Benutzerbild von Thielo
Web Ninja
XHTMLforum-Kenner
 
Registriert seit: 17.09.2009
Ort: Stuttgart oder so
Beiträge: 3.372
Thielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein Lichtblick
Standard

In einer HTML Datei darf halt kein PHP stehen.
__________________
Hier ein immer gültiges Statement: Überarbeite deine Code, lerne die Grundlagen, widersprich mir nicht, wehre dich nicht, ich habe Recht, wir sind Lolgion, wir sind viele.. potato...
All meine Angaben sind ohne Gewähr, es könnte also trotz meiner Unfehlbarkeit dazu kommen dass ich falsch liege

www.richard-thiel.de | Müssen Websiten überall gleich ausschauen?
Mit Zitat antworten
  #6 (permalink)  
Alt 03.09.2015, 10:14
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 27.08.2015
Beiträge: 11
frontloop befindet sich auf einem aufstrebenden Ast
Standard

aber in einer php-Datei kann/darf html stehen?

siehe link. Da kommt das ganze her.
Mit Zitat antworten
  #7 (permalink)  
Alt 03.09.2015, 10:34
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Zitat:
Zitat von frontloop Beitrag anzeigen
aber in einer php-Datei kann/darf html stehen?
Ja (natürlich außerhalb der PHP-Blöcke)


Du solltest zum Entwickeln das Errorreporting auf Maximum stellen, falls du das noch nicht getan hast. Dafür genügt ein:
PHP-Code:
error_reporting(E_ALL); 
in der ersten Zeile.
Mit Zitat antworten
  #8 (permalink)  
Alt 08.09.2015, 10:19
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 27.08.2015
Beiträge: 11
frontloop befindet sich auf einem aufstrebenden Ast
Standard

ich habs per php einfach nicht hinbekommen. Bin halt doch ein Anfänger

aber mit dem formspree geht's super
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mit php query ein Formular ändern PHP-Freak Serveradministration und serverseitige Scripte 15 19.04.2013 21:16
PHP mail() formular mit Ajax validieren und abschicken xml Javascript & Ajax 2 03.03.2011 21:13
Email formular beim Absenden nicht Umleiten? sepp88 Serveradministration und serverseitige Scripte 1 24.12.2009 14:55
HTML in PHP Formular importieren saschaopp Serveradministration und serverseitige Scripte 1 14.03.2009 12:23
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 19:09


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:26 Uhr.