Как исправить ошибку «Отправить сообщение не удалось» в PHP - кнопка «Отправить» HTML не работает - PullRequest
0 голосов
/ 13 февраля 2019

Я пишу свой первый собственный сайт.есть раздел, где вы можете ввести свое имя, почту и сообщение для меня.нажав «отправить сообщение», сообщение должно быть отправлено на мою личную почту.посетитель веб-сайта должен получить предупреждение через всплывающее окно «сообщение успешно отправлено» или что-то подобное.к сожалению, при нажатии «отправить сообщение» открывается дополнительный веб-сайт с сообщением «не удалось отправить сообщение».любая помощь приветствуется.

html:

<form action="untitled.php" method="post" target="self">
      <p><input class="w3-input w3-border" type="text" id="name" name="name" placeholder="Name" required name="Name"></p>
      <p><input class="w3-input w3-border" type="email" id="email" name="email" placeholder="Email" required name="Email"></p>
      <p><textarea id="message" type="text" name="message" required placeholder="Message" rows="6" cols="30" ></textarea>
      </p>

        <button class="w3-button w3-black" type="submit" name="submit" value="submit">
          <i class="fa fa-paper-plane"></i> Sende Nachricht
        </button>
      </p>
    </form>

php: code

<?php
$posted = false;
if( $_POST ) {
    $posted = true;

    $to = 'xx@gmail.com';

    $name = $_POST['name'];
    $mail_from = $_POST['email'];
    $subject = 'Message sent from website';
    $message = $_POST['message'];

    $header = "From: $name <$mail_from>";

    $result = $_POST['name'] == "danny"; // Dummy result
}
?>

   <html>
   <head></head>
  <body>

 <?php
if( $posted ) {
    if( $result )
        echo "<script type='text/javascript'>alert('submitted    successfully!')</script>";
    else
        echo "<script type='text/javascript'>alert('failed!')         </script>";
}
?>
  <form action="" method="post">
  Name:<input type="text" id="name" name="name"/>
   <input type="submit" value="submit" name="submit"/>
 </form>
 </body>
  </html>

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Пример того, как сделать оба метода - традиционная отправка формы и ajax.

<code><?php

    ob_clean();
    $payload=array();

    if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $_POST['submit'] ) ){

        /* for ajax & standard form submissions */
        $args=array(
            'name'      =>  FILTER_SANITIZE_STRING,
            'email'     =>  FILTER_SANITIZE_EMAIL,
            'message'   =>  FILTER_SANITIZE_STRING
        );
        $_POST=filter_input_array( INPUT_POST, $args );

        /* Have any additional fields been injected into the POST request? */
        foreach( $_POST as $field => $value ){
            if( !in_array( $field, array_keys( $args ) ) )exit( sprintf( 'unknown parameter "%s"', $field ) );
        }

        /* Are all the required fields in the POST array? */
        foreach( array_keys( $args ) as $field ){
            if( !in_array( $field, array_keys( $_POST ) ) )exit( sprintf('Empty or missing parameter "%s"',$field ) );
        }

        /* assign fields to variables */
        extract( $_POST );

        /* 
            check the validity of the email address - 
            doesn't actually determine if this is a genuine email though
        */
        $email = filter_var( $email, FILTER_VALIDATE_EMAIL );




        if( $email ){
            $to = 'xx@gmail.com';
            $from = $email;
            $subject = 'Message sent from website';
            $headers = sprintf( 'From: %s<%s>', $name, $email );

            $status=@mail( $to, $subject, $message, $headers );
            $payload['email']=$email;
            $payload['status']=$status;
            $payload['message']=$message;
            $payload['method']='FORM';
        }



        if( !empty( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && $_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest' ){
            header('Content-Type: application/json');
            $payload['method']='AJAX';
            exit( json_encode( $payload ) );
        }
    }
?>
<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title>PHP & Javascript - send email</title>
        <script>
            const ajax=function(url,params,callback){
                let xhr=new XMLHttpRequest();
                xhr.onload=function(){
                    if( this.status==200 && this.readyState==4 )callback.call( this, this.response )
                };
                xhr.onerror=function(e){
                    alert(e)
                };
                xhr.open( 'POST', url, true );
                xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                xhr.setRequestHeader('X-Requested-With','XMLHttpRequest');
                xhr.send( buildparams( params ) );
            };
            const buildparams=function(p){
                if( p && typeof( p )==='object' ){
                    p=Object.keys( p ).map(function( k ){
                        return typeof( p[ k ] )=='object' ? buildparams( p[ k ] ) : [ encodeURIComponent( k ), encodeURIComponent( p[ k ] ) ].join('=')
                    }).join('&');
                }
                return p;
            };



            document.addEventListener('DOMContentLoaded',function(){
                let bttn=document.querySelector('input[type="button"][name="ajax-submit"]');
                bttn.addEventListener( 'click', function(e){

                    let params={
                        submit:'submit',
                        name:document.querySelector('input[name="name"]').value,
                        email:document.querySelector('input[name="email"]').value,
                        message:document.querySelector('textarea[name="message"]').value
                    };
                    let callback=function(r){
                        let json=JSON.parse( r );
                        alert( r.status ? 'Yay - message sent!' : 'Boo - message sending failed' );
                        document.querySelector('form > pre').innerText=r;
                    };
                    ajax.call( this, location.href, params, callback )
                },false );
            },false );
        </script>
        <style>
            form{width:60%;padding:1rem;box-sizing:border-box;margin:2rem auto 0 auto;float:none;border:1px solid black}
            input,button{padding:1rem;margin:0.25rem auto}
            textarea{padding:1rem;width:100%;resize:none;margin:0.5rem auto}
            [type='text'], [type='email'], textarea{width:calc(100% - 2rem);}
            [type='button'], button{width:100%;}
            pre{width:100%;float:none;margin:auto;color:green;}
        </style>
    </head>
    <body>
        <form method='post'>
            <input class='w3-input w3-border' type='text' id='name' name='name' placeholder='Name' required name='Name'>
            <input class='w3-input w3-border' type='email' id='email' name='email' placeholder='Email' required name='Email'>
            <textarea id='message' type='text' name='message' required placeholder='Message' rows='6' cols='30' ></textarea>

            <button class='w3-button w3-black' type='submit' name='submit' value='submit'>
                <i class='fa fa-paper-plane'>Sende Nachricht</i>
            </button>

            <input type='button' name='ajax-submit' value='Send Email using ajax' />
            <?php
                if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $payload ) ){
                    printf('<pre>%s
', print_r ($ payload, true));} else {echo '
';}?>    
0 голосов
/ 13 февраля 2019

Добро пожаловать в stackoverflow :) i Протестировал вашу формулу ниже (вы можете нажать run) и, кажется, она работает, но вам нужен файл untitled.php или вы можете переименовать его в email.php, чтобы сделать его более конкретным, чем электронная почта.php - это код только для отправки электронной почты:)

внутри email.php (в настоящее время нет названия .php), пожалуйста, посмотрите эту ветку Как отправить электронное письмо с помощью PHP?

или скопируйте и вставьте этот код в email.php (в настоящее время без названия.php)

<?php
$to      = 'myemail@mail.com'; //your email
$subject = 'from my website  - email form'; 
$message = $_POST['message'];
$headers = 'From: '.$_POST['email']. "\r\n" .
    'Reply-To: myemail@mail.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?>  

//thank you message
<div>Thanks for your message, I'll answer your email as soon as i can. best regards <a href="/">back &raquo;</a></div>

<form action="untitled.php" method="post" target="self">
      <p><input class="w3-input w3-border" type="text" id="name" name="name" placeholder="Name" required name="Name"></p>
      <p><input class="w3-input w3-border" type="email" id="email" name="email" placeholder="Email" required name="Email"></p>
      <p><textarea id="message" type="text" name="message" required placeholder="Message" rows="6" cols="30" ></textarea>
      </p>

        <button class="w3-button w3-black" type="submit" name="submit" value="submit">
          <i class="fa fa-paper-plane"></i> Sende Nachricht
        </button>
      </p>
    </form>
...