在网页中添加文字

时间:2012-10-02 12:53:49

标签: php html

所以我创建了一个包含表单的网页,并找到了一些相对简单的代码来获取表单的内容,检查它是否有错误或不完整的部分,并返回错误或发送它。不幸的是,它在新页面中而不是在表单页面本身中返回错误,这就是我想要它做的。

HTML表单:

    <form name="contactform" method="post" action="send_form.php">
        <table width="450px">
            <tr>
                <td valign="top">
                    <label for="first_name">First Name &#42</label>
                </td>
                <td valign="top">
                    <input type="text" name="first_name" maxlength="50" size="30">
                </td>
            </tr>
            <tr>
                <td valign="top">
                    <label for="last_name">Last Name &#42</label>
                </td>
                <td valign="top">
                    <input type="text" name="last_name" maxlength="50" size="30">
                </td>
            </tr>
            <tr>
                <td valign="top">
                    <label for="email">Email Address &#42</label>
                </td>
                <td valign="top">
                    <input type="text" name="email" maxlength="80" size="30">
                </td>
            </tr>
            <tr>
                <td valign="top">
                    <label for="telephone">Telephone Number</label>
                </td>
                <td valign="top">
                    <input type="text" name="telephone" maxlength="30" size="30">
                </td>
            </tr>
            <tr>
                <td valign="top">
                    <label for="comments">Comments &#42</label>
                </td>
                <td valign="top">
                    <textarea name="comments" maxlength="1000" cols="25" rows="6"></textarea>
                </td>
            </tr>
            <tr>
                <td colspan="2" style="text-align:center">
                    <h6>An astrisk (&#42) denotes a required field.</h6>
                    <input type="submit" value="Submit" />
                </td>
            </tr>
        </table>
    </form>

PHP代码:

if(isset($_POST['email'])) {

$email_to = "my@email.com";
$email_subject = "Comments";


function died($error) {
    //This is where I think the code that prints to the same webpage should be rather than putting on a new page, which is what I does now
    echo "There were error(s) found with the form you submitted. Please review these errors and resubmit.";
    echo "These errors appear below.<br /><br />";
    echo $error."<br /><br />";
    echo "Please go back and fix these errors.<br /><br />";
    die();
}

// validation expected data exists
if(!isset($_POST['first_name']) ||
    !isset($_POST['last_name']) ||
    !isset($_POST['email']) ||
    !isset($_POST['telephone']) ||
    !isset($_POST['comments'])) {
    died('We are sorry, but there appears to be a problem with the form you submitted.');       
}

$first_name = $_POST['first_name']; // required
$last_name = $_POST['last_name']; // required
$email_from = $_POST['email']; // required
$telephone = $_POST['telephone']; // not required
$comments = $_POST['comments']; // required

$error_message = "";
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
if(!preg_match($email_exp,$email_from)) {
$error_message .= 'The Email Address you entered does not appear to be valid.<br />';
}
$string_exp = "/^[A-Za-z .'-]+$/";
if(!preg_match($string_exp,$first_name)) {
$error_message .= 'The First Name you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$last_name)) {
$error_message .= 'The Last Name you entered does not appear to be valid.<br />';
}
if(strlen($comments) < 2) {
$error_message .= 'The Comments you entered do not appear to be valid.<br />';
}
if(strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Form details below.\n\n";

function clean_string($string) {
  $bad = array("content-type","bcc:","to:","cc:","href");
  return str_replace($bad,"",$string);
}

$email_message .= "First Name: ".clean_string($first_name)."\n";
$email_message .= "Last Name: ".clean_string($last_name)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Telephone: ".clean_string($telephone)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";


// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);  

<!-- email success html -->
<h4>Thank you for contacting us. We will be in touch with you very soon.</h4>
<h4><a class="submitSuccess" href="index.php">Return to Index</a></h4>

}

我基本上希望它在文本框上方打印一行文字,说明表格没有正确填写。现在它创建了一个包含错误的新网页。

边注: 应该有几个php括号,但代码没有正确显示,所以我把它们拿出来。你可以了解代码。

3 个答案:

答案 0 :(得分:2)

查看代码,PHP页面的基本行为是检查是否存在任何验证错误。如果是,请显示错误消息,否则发送电子邮件。

您要做的是显示包含验证错误的原始页面。

通常,至少在我所知道的几乎每个框架中,都是通过使用重定向来完成的。 基本上,如果没有错误,我们会将用户重定向到成功页面。

如果有错误,我们会将错误信息+用户数据放入会话变量并重定向到原始表单。

基本代码结构如下所示:

验证脚本:

if ( validate_form($_POST))
{
     /*
         Form validation succeeded, 
         Do whatever processing you want (Like sending an email)
     */    
     header('location: success.php'); // redirect to the success page
}
else
{
     /*
         Form validation failed        
     */
     session_start(); 
     $error = ...;
     $form_data = array('error' => $error, 'username' => $_POST['username'], ...);
     $SESSION['form_data'] = $form_data;
     header('location: form.php');

}

表单脚本:

<?php
     session_start(); 
     if( isset($SESSION['form_data']))
     { 
         $username = $SESSION['form_data']['username'];
         $errors = $SESSION['form_data']['error'];
     }
     else
     {
         $username = '';
         $errors = '';          
     }

?>

<form name="contactform" method="post" action="send_form.php">
      <input type="text" name="username" value=<?php $username ?> >       
      <label for="errors"><?php $errors ?></label>   
</form>

PS:此代码是一个简单的演示,显然不是100%正确。你必须添加更多的异常处理,更多的安全检查......但你明白了。

我建议您尝试使用轻量级MVC框架来了解如何以正确的方式完成此操作。 您甚至可以查看这些框架的源代码。

答案 1 :(得分:0)

当您的表单数据未通过验证服务器端时,您最后使用die()调用函数died()。请检查PHP帮助以确保die()能够满足您的需求。导致死机告诉PHP停止解析PHP并将页面AS-IS发送到客户端。所以你的表格永远不会出现。

Personnaly:我只使用die函数进行调试

答案 2 :(得分:0)

说:

<form name="contactform" method="post" action="send_form.php">

您告诉HTML表单在Web浏览器中转到send_form.php。 然后,在send_form.php中,完成逻辑以查看表单的内容是否正确,因此它在该新页面上显示回显。

您将不得不在原始HTML页面中使用某些脚本(javascript / php)来检查表单是否填写正确。

看到类似这样的内容:http://www.thesitewizard.com/archive/validation.shtml