如何修复PHP中的“发送消息失败”错误 - 提交按钮HTML不起作用

问题描述 投票:1回答:2

我正在编写我自己的第一个网站。有一个部分,您可以输入您的姓名,邮件和消息给我。通过单击“发送消息”,该消息应发送到我的个人邮件。网站访问者应该通过弹出“消息已成功发送”或类似的方式收到提醒。遗憾的是,当点击“发送消息”时,会打开另一个网站,说明“发送消息失败”。任何帮助都非常感谢。

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:代码

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

    $to = '[email protected]';

    $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>
php html forms web submit
2个回答
1
投票

欢迎来到stackoverflow :)我在下面测试了你的公式(你可以点击运行)并且看起来有效,但是你需要untitled.php或者你可以将它重命名为email.php以使其更具体,即email.php是一个代码只发送电子邮件:)

在email.php(目前无名字.php)中,请看看这个帖子How to send an email using PHP?

或将此代码复制粘贴到email.php(当前为untitled.php)

<?php
$to      = '[email protected]'; //your email
$subject = 'from my website  - email form'; 
$message = $_POST['message'];
$headers = 'From: '.$_POST['email']. "\r\n" .
    'Reply-To: [email protected]' . "\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>

0
投票

如何执行这两种方法的示例 - 传统表单提交和ajax。

<?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 = '[email protected]';
            $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</pre>',print_r( $payload,true ) );
                } else {
                    echo '<pre></pre>';
                }
            ?>          
        </form>
    </body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.