Ankündigung

Einklappen
Keine Ankündigung bisher.

Kontaktformular auf Basis von Zend Framework

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Scriptangebot Kontaktformular auf Basis von Zend Framework

    Ich wollte mal ein einfaches und sicheres Kontaktformular vorstellen, dass auf Zend Framework 3 basiert.
    Vielleicht hilft es ja mal einem Einsteiger weiter oder motiviert den ein oder anderen, sich mit Zend Framework vertraut zu machen

    composer.json
    Code:
    {
        "require": {
            "laminas/laminas-form": "^3.0",
            "laminas/laminas-captcha": "^2.11",
            "laminas/laminas-session": "^2.12",
            "laminas/laminas-view": "^2.12",
            "laminas/laminas-i18n": "^2.11",
            "laminas/laminas-escaper": "^2.9",
            "phpmailer/phpmailer": "^6.5"
        }
    }

    PHP-Code:
    <?php
    use Laminas\Captcha;
    use 
    Laminas\Form\Element;
    use 
    Laminas\Form\Form;
    use 
    Laminas\InputFilter\InputFilter;
    use 
    Laminas\ServiceManager\Config;
    use 
    Laminas\View\Renderer\PhpRenderer;
    use 
    Laminas\Form\ConfigProvider;
    use 
    PHPMailer\PHPMailer\PHPMailer;
    use 
    PHPMailer\PHPMailer\SMTP;
    use 
    PHPMailer\PHPMailer\Exception;

    include 
    __DIR__ '/vendor/autoload.php';

    // Standard Felder erstellen
    $name = new Element\Text('name');
    $name->setLabel('Name');

    $email = new Element\Email('email');
    $email->setLabel('E-Mail Adresse')
      ->
    getValidator()
      ->
    setOptions( ['messages' => ['regexNotMatch' => 'Ungültige E-Mail Adresse'] ]);

    $subject = new Element\Text('subject');
    $subject->setLabel('Betreff');

    $message = new Element\Textarea('message');
    $message->setLabel('Nachricht');

    // CAPTCHA erstellen
    $dumbCaptcha = new Captcha\Dumb();
    $dumbCaptcha->setLabel('Bitte rückwarts eingeben:');
    $dumbCaptcha->setOption('messages', ['badCaptcha' => 'Captcha falsch']);
    $captcha = new Element\Captcha('captcha');
    $captcha->setCaptcha($dumbCaptcha)->setLabel('Captcha');

    // CSRF Token erstellen
    $csrf = new Element\Csrf('security');
    $csrf->setOptions( [ 'csrf_options' => ['messages' => ['notSame' => 'Ungültiger Sicherheitstoken!']] ] );

    // Submit Button erstellen
    $send = new Element('send');
    $send->setValue('Submit');
    $send->setAttributes([
        
    'type' => 'submit',
        
    'class' => 'btn btn-primary',
        
    'value' => 'Absenden'
    ]);

    // Form erstellen und alle Elemente hinzufügen
    $form = new Form('contact');
    $form->add($name)->add($email)->add($subject)->add($message)
      ->
    add($captcha)->add($csrf)->add($send);

    // InputFilter erstellen
    $inputFilter = new InputFilter();
    $form->setInputFilter($inputFilter);    

    $requiredValidator[] = [
      
    'name' => 'NotEmpty',
        
    'options' => [
          
    'messages' => ['isEmpty' => 'Angabe benötigt'],
        ]
    ];

    foreach(
    $form->getElements() as $element) {
      if (
    $element->getLabel() ) {  
        
    // Pflichtfeld Validator und HTML Filter hinzufügen
        
    $inputFilter->add([
              
    'name'     => $element->getName(),
              
    'validators' => $requiredValidator,
              
    'filters' => [['name' => 'StripTags']]    
        ]);

        
    // CSS Klassen hinzufügen
        
    $element->setAttribute'class''form-control form-control-sm');
      }
    }

    // View initialisieren, um Form rendern zu können
    $view = new PhpRenderer();
    $manager $view->getHelperPluginManager();
    $viewConfig  = new ConfigProvider();
    (new 
    Config($viewConfig->getViewHelperConfig()))->configureServiceManager($manager);

    // POST verarbeiten
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
      
    $form->setData($_POST);
      
    // Form validieren
      
    if ($form->isValid()) {
        
    $validatedData $form->getData();
        
    $mail = new PHPMailer(true);
        try {
          
    //Server settings
          
    $mail->SMTPDebug SMTP::DEBUG_SERVER;                      //Enable verbose debug output
          
    $mail->isSMTP();                                            //Send using SMTP
          
    $mail->Host       'smtp.example.com';                     //Set the SMTP server to send through
          
    $mail->SMTPAuth   true;                                   //Enable SMTP authentication
          
    $mail->Username   'user@example.com';                     //SMTP username
          
    $mail->Password   'secret';                               //SMTP password
          
    $mail->SMTPSecure PHPMailer::ENCRYPTION_SMTPS;            //Enable implicit TLS encryption
          
    $mail->Port       465;                                    //TCP port to connect to

          //Recipients
          
    $mail->setFrom('from@example.com''Mailer');
          
    $mail->addAddress('joe@example.net''Joe User');

          
    //Content
          
    $mail->isHTML(true);
          
    $mail->Subject $validatedData['subject'];
          
    $mail->Body    $validatedData['message'];

          
    $mail->send();
          
    $out 'Message has been sent';
      } catch (
    Exception $e) {
        
    $out "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
      }
      }
    }
    ?>

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        label {
          display: block;
        }
        input[type=submit] {
          margin-top: 20px;
        }
        .input-error {
          border: 1px solid red;
        }
    </style>

    </head>
    <body>
      <div class="col-md-2">
      <legend>Kontakt</legend>
      <?= $view->form()->render($form);?>
      <?= $out ?? ''?>
      </div>
    </body>
    </html>
    sorry, shift-taste kaputt

  • #2
    PHP-Code:
    include __DIR__ '/vendor/autoload.php'
    vendor im docroot ....

    Kommentar


    • #3
      Klar, ist bei mir auch normalerweise alles komplett außerhalb bis auf eine index.php im document root.
      Oder alternativ eine .htaccess reinpacken mit Deny from all
      sorry, shift-taste kaputt

      Kommentar

      Lädt...
      X