$ _POST czasami pusty podczas wysyłania poczty

głosy
1

Mam formularz kontaktowy, e-maile, że sam kontakt info złożoną, ale czasami mam pustą $_POSTtablicę, co powoduje mi otrzymania pustego e-maila. Użyłem walidator JavaScript plików w celu zapewnienia, że pola wprowadzone nie są puste, a jedynym sposobem mam otrzymania pustego e-maila jest $_POSTpusty. Włączyłem mój kod, który zawiera formularz, plik JavaScript i plik PHP.

Moja postać:

        <div class=row contact-wrap> 
            <div id=error-message style=display: none; ><p>ERROR</p></div>
            <form id=main-contact-form class=contact-form name=contact-form method=post action=sendemail.php data-toggle=validator role=form>
                <div class=col-sm-5 col-sm-offset-1>
                    <div class=form-group>
                        <label for=inputname class=control-label>NAME</label>
                        <input type=text name=name id=inputname class=form-control data-error=Name required! required>
                    </div>
                    <div class=form-group>
                        <label for=inputemail class=control-label>EMAIL</label>
                        <input type=email name=email id=inputemail class=form-control data-error=Email required! required>
                    </div>                     
                </div>
                <div class=col-sm-5>
                    <div class=form-group>
                        <label for=inputsubject class=control-label>SUBJECT</label>
                        <input type=text name=subject id=inputsubject class=form-control data-error=Subject required! required>
                    </div>
                    <div class=form-group>
                        <label for=inputmessage class=control-label>MESSAGE</label>
                        <textarea name=message id=inputmessage class=form-control rows=8 data-error=Message required! required></textarea>
                    </div>                        
                    <div class=form-group>
                        <button type=submit name=submit class=btn btn-primary btn-lg required=required>SUBMIT</button>
                    </div>
                </div>
            </form> 
        </div>

    <script src=js/main.js></script>
    <script src=js/validator.min.js></script>

Plik main.js JavaScript, żeby potwierdzić moje pola:

    jQuery(function($) {'use strict',
    var form = $('#main-contact-form')
    var message = $('#error-message')
    form.validator().on('submit', function (e) {
      if (e.isDefaultPrevented()) {
        message.fadeIn();
      } else {

        e.preventDefault();  
        $.ajax({
            type: POST,
            url: $(this).attr('action'),
            data: form.serialize(),
            beforeSend: function(){
                form.prepend(
                    message
                        .html('<p>Sending...</p>')
                        .fadeIn()
                );
            }
        }).done(function(data){
           message.html('<p>' + data.message + '</p>').delay(2000).fadeOut();
           form.delay(2000).fadeOut();
           console.log(DONE);
        });
      }
    })
});

sendmail.php plik używam wysłać sobie dane formularza:

<?php

// configure
$from = $_POST['email'];
$sendTo = '[email protected]';
$fields = array('name' => 'Name', 'email' => 'Email', 'subject' => 'Subject', 'message' => 'Message');

try
{
    $emailText = \n=============================\n;

    foreach ($_POST as $key => $value) {

        if (isset($fields[$key])) {
            $emailText .= $fields[$key]: $value\n;
        }
    }

    mail($sendTo, $subject, $emailText, From:  . $from);

    $responseArray = array('type' => 'success', 'message' => $okMessage);
}
catch (\Exception $e)
{
    $responseArray = array('type' => 'danger', 'message' => $errorMessage);
}

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $encoded = json_encode($responseArray);

    header('Content-Type: application/json');

    echo $encoded;
}
else {
    echo $responseArray['message'];
}
Utwórz 10/01/2017 o 19:30
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
1

Nie ma kontroli w sendmail.phpktóre stwierdza, czy warunki te są spełnione, należy wysłać e-maila lub jeżeli nie są spełnione te warunki, nie wysyłaj wiadomości e-mail . Obecnie e-mail jest zawsze wysyłany.

Ktoś lub coś (pająk, robot, Googlebot, etc ...) ma dostęp sendmail.phpbezpośrednio bez wysłaniu formularza. Sprawdź, czy nie złożyć w sendmail.php:

if(!isset($_POST['submit'])) {
    die("Scumbag, use the form!");
}

Albo sprawdzić każdą złożoną pola, ponieważ jest to łatwe dla kogoś, aby dodawać submitlub inne pola bezpośrednio do skryptu, jak również.

Na coś bardziej wytrzymałe, zobacz fałszerstw Zapytaj Cross-Site , które pomogą z tym również.

Odpowiedział 10/01/2017 o 19:50
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more