如何使用PHP显示/隐藏元素以及如何将用户发送到另一个页面

时间:2014-09-27 15:36:33

标签: php html

我正在为我的联系表单整理PHP。如果表格没有填写,我试图做的就是出现错误信息。我的html中有一个div,我想显示错误。

我知道我可以使用' echo'显示一条消息,但我希望它准确定位在我想要的位置。我已经看到了这样做的方法,但它涉及将所有PHP代码放在html文件中......然后重命名文件.php。我想将大部分PHP代码与html分开。

这是我的代码:

HTML:

<div class="error">
    <p>
        Please fill out all fields.
    </p>
</div>
<form id="contactForm" action="contact.php" method="post">
    <div>
        <input type="text" name="name" id="name" placeholder="Your Name" maxlength="65" tabindex="1"> <label for="name">Name</label> 
    </div>
    <div>
        <input type="email" name="_replyto" id="email" placeholder="Your Email" maxlength="30" tabindex="2"> <label for="email">Email</label> 
    </div>
    <div>
    <textarea name="message" id="message" rows="10" placeholder="Your Message..." maxlength="1000" tabindex="3"></textarea> <label for="message">Your Message</label> 
    </div>
    <div>
        <input type="submit" name="submit" value="Send" tabindex="4"> 
    </div>
</form>

PHP:

// Check for form submission:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    /* The function takes one argument: a string.
    * The function returns a clean version of the string.
    * The clean version may be either an empty string or
    * just the removal of all newline characters.
    */
    function spam_scrubber($value) {

        // List of very bad values:
        $very_bad = array('to:', 'cc:', 'bcc:', 'content-type:', 'mime-version:', 'multipart-mixed:', 'content-transfer-encoding:');

        // If any of the very bad strings are in 
        // the submitted value, return an empty string:
        foreach ($very_bad as $v) {
            if (stripos($value, $v) !== false) return '';
        }

        // Replace any newline characters with spaces:
        $value = str_replace(array( "\r", "\n", "%0a", "%0d"), ' ', $value);

        // Return the value:
        return trim($value);

    } // End of spam_scrubber() function.

    // Clean the form data:
    $scrubbed = array_map('spam_scrubber', $_POST);

    // Minimal form validation:
    if (!empty($scrubbed['name']) && !empty($scrubbed['email']) && !empty($scrubbed['comments']) ) {

        // Create the body:
        $body = "Name: {$scrubbed['name']}\n\nComments: {$scrubbed['comments']}";

        // Send the email:
        mail('example@email.com', 'Contact Form Submission', $body, "From: {$scrubbed['email']}");

        // Print a message:
        echo '<p><em>Thank you.</em></p>';

        // Clear $scrubbed (so that the form's not sticky):
        $scrubbed = array();

    } else {
        echo '<p style="font-weight: bold; color: #C00">Please fill out the form completely.</p>';
    }

} // End of main isset() IF

我的php位于一个名为contact.php的文件中,我的html位于一个名为contact.html的文件中。

如果表单不完整,我想显示带有类错误的div。

我尝试了另一种方法,将此代码添加到html中,替换当前的错误div:

<span class="error">* <?php include 'contact.php'; echo $Err;?></span>

这到php文件:

$Err = "Please fill out all fields";

它仍然没有奏效。好像它不能从html文件中读取php文件中的代码,即使我包含它了吗?

另一件事是,一旦提交表单,我将如何将用户发送到另一个html页面?是通过替换

来完成的
// Print a message:
echo '<p><em>Thank you.</em></p>';

header('Location: nextpage.html');

感谢您提前提供任何帮助。

4 个答案:

答案 0 :(得分:1)

您可以考虑使用javascript解决方案。首先将div设为display:none;,然后你可以使用:

document.getElementsByClassName('error')[0].style.display = "block";

当你想让它可见时。还有JQuery解决方案:(可能不正确,朋友们帮助PLZ!)

$('.error')[0].hide();
$('.error')[0].show();

您还可以使用http://www.w3schools.com/jquery/jquery_hide_show.asp的说明设置速度/淡入淡出 同样对于重定向,是的,你可以替换它们。或者您也可以使用JS解决方案。取代

echo '<p><em>Thank you.</em></p>';

使用:

echo '<p><em>Thank you.</em></p><script>location.replace("WHERE YOU WANNA GO!");</script>';

希望这有帮助。

答案 1 :(得分:1)

首先,您需要了解服务器如何处理PHP和HTML文件。服务器配置告诉它如何解释文件;一些文件按原样提供,一些文件传递给处理程序,作为脚本执行它们等。在您的服务器配置中,可能会有一行指示服务器处理扩展名为.php的文件作为使用PHP执行的脚本。不需要执行HTML文件;它们被发送到客户端,客户端的浏览器解释html,css和js信息以呈现网页。因为HTML文件作为脚本执行,如果你把代码(perl,php,java,c ++,smalltalk ......你想要的任何东西!)放在文件中,它将由服务器执行,除非浏览器具有该语言的解释器,否则它将不会被浏览器执行,就像HTML,CSS和javascript一样。这就是为什么HTML文件中的PHP没有被执行的原因:除非您指示您的Web服务器将该文件解释为PHP脚本,否则它会将其视为标准的html文件。

在您的情况下,如果表单验证失败,您希望向用户显示错误消息。您还希望将您的代码和HTML文件分开(这是一个很好的习惯,恕我直言!)。这提出了一个问题,因为您确实需要更改HTML页面的内容以包含错误消息,但HTML页面基本上是静态的。您可以将用户重定向到具有相同内容的另一个页面,但页面顶部会显示一条错误消息,但这是一个相当丑陋的解决方案。您还可以使用javascript进行表单验证,如果表单提交无效,则向用户显示错误消息,但关闭JS的任何人都可以绕过该检查。

针对您的问题,最灵活的解决方案是使用模板系统,该系统允许您自定义页面内容,但保持PHP代码不受HTML影响。那里有许多PHP模板系统;谷歌会为你充足。模板包含可以在PHP脚本中设置并在模板中使用的变量;模板引擎然后解析模板,插入变量,并输出结果。

在您的情况下,您可以设置表单以在表单顶部显示错误消息,并可能突出显示未正确填充的字段。

以下是使用Smarty的示例,{{3}}是一种流行的,灵活的模板系统:

include('Smarty.class.php');

// create object
$smarty = new Smarty;

if (! empty($_POST)) {
    // validate your form input
    ...
    // Minimal form validation:
    if (!empty($scrubbed['name']) && !empty($scrubbed['email']) && !empty($scrubbed['comments']) ) {
        // send your email
        // redirect user to a thank you page
        header("Location: thankyou.html");
    }
    else {
        // sets a variable $error in the template
        $smarty->assign('error', 'Please fill out the form completely');
    }
}

// display it
$smarty->display('form.tpl');

模板文件form.tpl应包含您的标准表单以及出现错误时要添加的任何部分。以下是示例form.tpl文件的摘录:

<h2>Contact me!</h2>
{if isset($error)}
<div class="error">
    <p>
        {$error}
    </p>
</div>
{/if}

<form id="contactForm" action="contact.php" method="post">
(etc.)
如果contact.php检测到错误,则输出

<h2>Contact me!</h2>
<div class="error">
    <p>
        Please fill out the form completely
    </p>
</p>
<form id="contactForm" action="contact.php" method="post">
(etc.)

如果没有错误则输出(即表格尚未填写):

<h2>Contact me!</h2>
<form id="contactForm" action="contact.php" method="post">
(etc.)

这是模板可以执行的一个非常基本的示例。我希望这已经澄清了一些事情,让你一瞥HTML模板的精彩世界。

答案 2 :(得分:0)

首先。您需要将contact.html转换为.php文件以便使用php代码 考虑命名你的contact.php&gt; contact.script.php,并将contact.html重命名为contact.php 然后,在您的PHP代码中,您可以执行以下操作:

<强> contact.script.php

if((!empty($scrubbed['name']) && !empty($scrubbed['email']) && !empty($scrubbed['comments']) ) {
    ...
    $message = 'Thank you.';
} else {
#   put your error message into the same variable
    $message =  'Please fill out the form completely.';
}

<强> contact.php:

/* at the very beginning of your code */
include 'path/to/contact.script.php';
/* Then, wherever you would like to show the message just add this at the end: */
<?=$message?>  //  this will echo out the message (same as <?php echo $message; ?> - as in:

<div class="error"><p><?=$message?></p></div>

答案 3 :(得分:0)

<input type="text" value="<?php echo $ta;?>">

<div id="content" style="display:<?php echo $ta==2 ? 'block':'none' ?>"></div>