点击提交时Bootstrap和PHP联系表单显示空白页面

问题描述:

嗨,大家好,我需要一些帮助。点击提交时Bootstrap和PHP联系表单显示空白页面

当我尝试测试自举窗体时,它会显示一个白色屏幕。这里是我的code.NB是新手到网络开发,#ExcuseMyFrenchThough

,这里是我的index.html

<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]的

<?php 
    if (isset($_POST["submit"])) { 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $message = $_POST['message']; 
     /*$human = intval($_POST['human']); */ 
     $from = 'Geofrey Zellah'; 
     $to = '[email protected]'; 
     $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住的不是本地
enter image description here

有人吗?

+0

http://php.net/manual/en/function.error-reporting.php,你会看到很多未定义的索引通知,由于没有名称属性。 –

+0

@fred -li我没有收到任何错误我只是点击提交后才得到白屏,所以我不知道我的代码有什么问题谢谢 –

+1

@ Fred-ii-:我想,这个问题不是重复的你上面提到的是什么。 (你所标记的与此无关) –

  1. 提交变量永远不会在您的窗体中设置。注意,该按钮现在是提交类型提交的名称属性为submit的输入。

  2. 另外你的其他表单变量没有设置。

  3. 你永远不会回应任何事情。所以我在你的最后一个条件中回应。

  4. 如果您希望表单在提交表单后显示,您需要将index.html重命名为index.php,并在顶部包含contact.php。见下文。

  5. 如果您明白地检查$ _POST变量是否为真,PHP将抛出E_NOTICE错误。所以最好将变量包装到isset()中(就像这个变量集合)函数一样。见下文。

我重构了,以防止E_NOTICE错误并评论这些更改。

contact.php

<?php 
if (isset($_POST["submit"])) { 

    $error = []; 

    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['message']; 
    /*$human = intval($_POST['human']); */ 
    $from = 'Geofrey Zellah'; 
    $to = '[email protected]'; 
    $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 < - 注意文件扩展名的变化

<?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> 

UPDATE

如果你不想提交时重新加载页面g表单,您将需要一些jQuery ajax操作并更改您的HTML和PHP文件。

首先删除之前,我们添加了index.php文件的第一行:

<?php include 'contact.php';?><!-- Remove this one --> 

你不想被包含的文件做,而是将数据发送给它。

接下来编辑HTML文件并在HTML下包含jQuery库(在HTML下执行JS东西的常见做法)。然后相应地改变你的PHP文件。

因此新的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" 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="[email protected]"> 
       </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:

<?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 = '[email protected]'; 
    $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 

我做了这样一个复杂的例子,因为许多人决定去阿贾克斯,一旦他们成功地发送定期形式,但注意,页面重新加载;)

+0

你的意思是什么?你能解释你的答案吗? –

+1

请查看更新后的答案 – Yolo

+0

非常感谢你,兄弟,确实你的答案和imeesha一起解决了这个问题, –

我得到你想要达到的。你想提交这个表单,如果出现错误,你想显示一些错误信息。

你的情况发生了什么,当你提交你的表格时,它会被提交到contact.php。您的浏览器将显示您从contact.php文件返回的内容。由于您的contact.php不包含任何HTML内容,并且您也不写任何内容,所以返回的页面不包含任何内容。

您有两种选择。

第一种方式

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

echo $result; 

这样,当有人提交您的表单。您将引导他到一个新的页面,只有一行说明是否有错误或成功。

方式二

此举逻辑在index.html。您必须将其重命名为index.php。然后将表单设置为提交到同一页面。

<form .... action=""> 

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

+0

Imeesha谢谢,我试过第二种方式将index.html更改为index.php,不幸的是,我的页面显示白色屏幕只是空白页面有错误或没有任何内容,但是当我把index.HTML显示我的页面,我能做些什么来解决这个问题 –

+0

Imeesha谢谢,你的第二种方法现在可以工作,我需要改变index.html index.php也放在一个页面没有联系,PHP,现在我的联系表格可以发送电子邮件,因为我想但不幸的是它不显示“成功消息”再次感谢 –