首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当单击submit时,引导和PHP联系人窗体显示空白页

当单击submit时,引导和PHP联系人窗体显示空白页
EN

Stack Overflow用户
提问于 2017-03-15 23:57:54
回答 2查看 1.9K关注 0票数 0

伙计们我需要帮助。

当我尝试测试我的引导窗体时,它会显示一个白色的屏幕。这里是我的code.NB是网络开发的新手,#不好意思

这是我的index.html

代码语言:javascript
复制
<html>
<div class="container">
<div class="row">
      <div class="col-md-6 col-md-offset-3" id="offer">

            <h2 id="form"> LET'S WORK ? </h2>

            </div>

            <div class="col-md-6 col-md-offset-3">

            <form role="form" method="post" action="contact.php">


            <div class="form-group">
              <input type="text" class="form-control" placeholder="Enter Your Name">
                <?php echo "<p class='text-danger'>$errName</p>";?>
              </div>

              <div class="form-group">

               <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter Your Email">
               <?php echo "<p class='text-danger'>$errEmail</p>";?>
              </div>

              <div class="form-group">
              <textarea class="form-control" id="textarea1" rows="3" placeholder="Enter Your Message here"> </textarea>
              <?php echo "<p class='text-danger'>$errMessage</p>";?>

              </div>

              <div class="form-group">
              <button type="submit" class="default-submit btn btn-large propClone bg-fast-pink btn-circle font-weight-300 text-white tz-text">SEND MESSAGE</button>
              </div>

              <div class="form-group">
                    <div class="col-sm-10 col-sm-offset-2">
                      <?php echo $result; ?>  
                   </div>
  </div>
            </form>
            </div>

</div>
</div>

PHP代码CONTACT.PHP

代码语言:javascript
复制
<?php
    if (isset($_POST["submit"])) {
        $name = $_POST['name'];
        $email = $_POST['email'];
        $message = $_POST['message'];
        /*$human = intval($_POST['human']); */
        $from = 'Geofrey Zellah'; 
        $to = 'hotbonge@gmail.com'; 
        $subject = 'Message from Geofrey Zellah ';

        $body = "From: $name\n E-Mail: $email\n Message:\n $message";

        // Check if name has been entered
        if (!$_POST['name']) {
            $errName = 'Please enter your name';
        }

        // Check if email has been entered and is valid
        if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $errEmail = 'Please enter a valid email address';
        }

        //Check if message has been entered
        if (!$_POST['message']) {
            $errMessage = 'Please enter your message';
        }

        /*
        //Check if simple anti-bot test is correct
        if ($human !== 5) {
            $errHuman = 'Your anti-spam is incorrect';
        } */

// If there are no errors, send the email
if (!$errName && !$errEmail && !$errMessage /*&& !$errHuman*/) {
    if (mail ($to, $subject, $body, $from)) {
        $result='<div class="alert alert-success">Thank You! I will be in touch</div>';
    } else {
        $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>';
    }
}
    }
?>

在我的页面上点击提交后得到的截图,NB生活不是本地的

有人吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-16 00:07:09

  1. 提交变量从未在您的表单中设置。注意,按钮现在是submit类型的输入,它的name属性为submit。
  2. 另外,您的其他表单变量也没有设置。
  3. 你什么都没回过。所以我给你的最后一个条件做了个回音。
  4. 如果要在提交表单后显示表单,则需要将index.html重命名为index.php,并在顶部包括contact.php。见下文。
  5. 如果您只是简单地检查一个$_POST变量是否为真,PHP将抛出E_NOTICE错误。因此,最好将变量包装到isset() (如这个变量集)函数中。见下文。

我重构以防止E_NOTICE错误,并对更改进行了注释。

contact.php

代码语言:javascript
复制
<?php
if (isset($_POST["submit"])) {

    $error = [];

    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    /*$human = intval($_POST['human']); */
    $from = 'Geofrey Zellah';
    $to = 'hotbonge@gmail.com';
    $subject = 'Message from Geofrey Zellah ';

    $body = "From: $name\n E-Mail: $email\n Message:\n $message";

    // Check if name has been entered
    if (!isset($_POST['name']) || strlen($_POST['name']) === 0) {
        $error['name'] = 'Please enter your name';
    }

    // Check if email has been entered and is valid
    if (!isset($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $error['email'] = 'Please enter a valid email address';
    }

    //Check if message has been entered
    if (!isset($_POST['message']) || strlen($_POST['name']) === 0) {
        $error['message'] = 'Please enter your message';
    }

    /*
    //Check if simple anti-bot test is correct
    if ($human !== 5) {
        $errHuman = 'Your anti-spam is incorrect';
    } */

// If there are no errors, send the email
    if (empty($error)) {
        if (mail ($to, $subject, $body, $from)) {
            $result='<div class="alert alert-success">Thank You! I will be in touch</div>';
        } else {
            $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>';
        }
    }

}
?>

index.php <--注意文件扩展名的更改

代码语言:javascript
复制
<?php include 'contact.php';?>
<div class="container">
    <div class="row">
        <div class="col-md-6 col-md-offset-3" id="offer">

            <h2 id="form"> LET'S WORK ? </h2>

        </div>

        <div class="col-md-6 col-md-offset-3">

            <form role="form" method="post">

                <div class="form-group">
                    <input name="name" type="text" class="form-control" placeholder="Enter Your Name">
                    <?php if(isset($error['name'])) echo '<p class="text-danger">'.$error['name'].'</p>'; ?>
                </div>

                <div class="form-group">

                    <input name="email" type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter Your Email">
                    <?php if(isset($error['email'])) echo '<p class="text-danger">'.$error['email'].'</p>'; ?>
                </div>

                <div class="form-group">
                    <textarea name="message" class="form-control" id="textarea1" rows="3" placeholder="Enter Your Message here"> </textarea>
                    <?php if(isset($error['message'])) echo '<p class="text-danger">'.$error['message'].'</p>'; ?>

                </div>

                <div class="form-group">
                    <input name="submit" type="submit" class="default-submit btn btn-large propClone bg-fast-pink btn-circle font-weight-300 text-white tz-text">SEND MESSAGE</input>
                </div>

                <div class="form-group">
                    <div class="col-sm-10 col-sm-offset-2">
                        <?php if(isset($result)) echo $result; ?>
                    </div>
                </div>
            </form>
        </div>

    </div>
</div>

更新

如果在提交表单时不希望重新加载页面,则需要一些jQuery ajax操作并修改您的。

首先删除前面添加的index.php的第一行:

代码语言:javascript
复制
 <?php include 'contact.php';?><!-- Remove this one -->

您不希望包含该文件,而是将数据发送到该文件。

接下来,编辑HTML文件,并在HTML下面包含jQuery库(通常在HTML下面执行JS操作)。然后相应地修改PHP文件。

所以你的新HTML:

代码语言:javascript
复制
<div class="container">
    <div class="row">
        <div class="col-md-6 col-md-offset-3" id="offer">

            <h2 id="form"> LET'S WORK ? </h2>

        </div>

        <div class="col-md-6 col-md-offset-3">

            <form role="form" name="contact" method="post">

                <div class="form-group">
                    <input name="name" type="text" class="form-control" placeholder="Enter Your Name" value="test">
                </div>

                <div class="form-group">

                    <input name="email" type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter Your Email" value="giroteam@localhost.com">
                </div>

                <div class="form-group">
                    <textarea name="message" class="form-control" id="textarea1" rows="3" placeholder="Enter Your Message here">test </textarea>
                </div>

                <div class="form-group">
                    <input name="submit" type="submit" class="default-submit btn btn-large propClone bg-fast-pink btn-circle font-weight-300 text-white tz-text" value="SEND MESSAGE">
                </div>

                <div class="form-group" id="result">
                </div>
            </form>
        </div>

    </div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(){ // launch when DOM is fully loaded

        $('form[name="contact"]').submit(function(event){ // fire when you hit submit

            event.preventDefault(); // prevent default form submission since you want to send data via ajax

            $('#result').html('');
            $('.alert').remove();

            var values = $(this).serialize();

            // Post form data to your contact.php script and work with response
            $.ajax({
                url: "contact.php",
                type: "POST",
                data: values ,
                success: function (response) {

                    if(response.success) {
                        $('#result').html('<div class="alert alert-success">'+response.success+'</div>');
                    }
                    if(response.error_form) {
                        $.each( response.error_form, function( key, value ) {
                            $('input[name="'+key+'"]').parent().append('<p class="help-block text-danger">'+value+'</p>');
                        });
                    }
                    if(response.error_mail) {
                        $('#result').html('<div class="alert alert-danger">'+response.error_mail+'</div>');
                    }

                },
                error: function(jqXHR, textStatus, errorThrown) {
                    console.log(textStatus, errorThrown);
                }


            });

        });
    });
</script>

最后,修改了PHP:

代码语言:javascript
复制
<?php

ini_set('display_errors',0);
$result = [];

// Check if name has been entered
if (!isset($_POST['name']) || strlen($_POST['name']) === 0) {
    $result['error_form']['name'] = 'Please enter your name';
}

// Check if email has been entered and is valid
if (!isset($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    $result['error_form']['email'] = 'Please enter a valid email address';
}

//Check if message has been entered
if (!isset($_POST['message']) || strlen($_POST['message']) === 0) {
    $result['error_form']['message'] = 'Please enter your message';
}

/*
//Check if simple anti-bot test is correct
if ($human !== 5) {
    $errHuman = 'Your anti-spam is incorrect';
} */

// If there are no errors, send the email
if (empty($result['error_form'])) {


    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    /*$human = intval($_POST['human']); */
    $from = 'Geofrey Zellah';
    $to = 'hotbonge@gmail.com';
    $subject = 'Message from Geofrey Zellah ';

    $body = "From: $name\n E-Mail: $email\n Message:\n $message";

    if (mail ($to, $subject, $body, $from)) {
        $result['success']='Thank You! I will be in touch';
    } else {
        $result['error_mail']='Sorry there was an error sending your message. Please try again later';
    }
}

header('Content-type: application/json'); // tell browser what to expect
echo json_encode($result); // encode array to json object so javascript can work with it

我举了一个非常详细的例子,因为很多人一旦成功地发送了常规表单,就决定使用ajax,但是注意到页面重新加载;)

票数 1
EN

Stack Overflow用户

发布于 2017-03-16 00:11:50

我得到了你想要的。您希望提交此表单,如果有问题,则需要显示一些错误消息。

在您的情况下发生的情况是,当您提交表单时,它将被提交给contact.php。浏览器将显示从contact.php文件返回的内容。由于您的contact.php不包含任何HTML,并且也不编写任何内容,所以返回的页面不包含任何内容。

你有两个选择。

First way

将错误消息echocontact.php文件。将以下内容添加到contact.php文件的末尾。

代码语言:javascript
复制
echo $result;

这样,当有人提交你的表格时。你会把他引向一个新的页面,其中只有一行,上面写的是错误还是成功。

第二道

将这个逻辑移到您的index.html中。您必须将它重命名为index.php。然后将表单设置为提交到同一页。

代码语言:javascript
复制
<form .... action="">

这将将表单提交到当前页面,即index.php。然后,将contact.php中的逻辑放在index.php的顶部。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42822950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档