PHP验证失败

时间:2014-12-03 23:33:18

标签: php forms validation radio

我创建了Err代码,因此必须检查名称和广播,否则它无法转到确认页面并在字段旁边发送错误消息。如果我遗漏任何代码,请提供帮助!

<?php
$nameErr = $charityErr = "";
$name = $charity = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
        $nameErr = "Name is missing";
    }
    else {
        $name = $_POST["name"];
    }
   if (!isset($_POST["charity"])) {
        $charityErr = "You must select 1 option";
    }
    else {
        $charity = $_POST["charity"];
    }
}  
?>
<html>
<head>
   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
   <link type="text/css" href="testStyle.css" rel="stylesheet"/>
<title>Survey</title>
</head>

<body>
<div><!--start form-->
  <form method="post" action="submit.php">
  <input type="radio" name="charity" <?php if (isset($charity) && $charity == "1") echo "checked"; ?> value="1">1 
<input type="radio" name="charity" <?php if (isset($charity) && $charity == "2") echo "checked"; ?> value="2">2 
<input type="radio" name="charity" <?php if (isset($charity) && $charity == "3") echo "checked"; ?> value="3">3
 <span class="error"><?php echo $charityErr;?></span>
  <input type="text" name="name" placeholder="ENTER YOUR COMPANY NAME">
  <span class="error"><?php echo $nameErr;?></span>
  <input type="submit" name="submit" value="Submit"/>     
</form>  
</div><!--end form-->

</body>
</html>

我的submit.php说:

/* Subject and Email Variables */
   $emailSubject = 'Survey!';
   $webMaster = 'myname@email.com';

/* Gathering Data Variables */
   $name = $_POST ['name'];
   $charity = $_POST ['charity'];

    //create a new variable called $body line break, say email and variable, don't leave any space next to EOD - new variable $body 3 arrows less than greater than, beyond EOD no spaces
   $body = <<<EOD
<br><hr><br>
Company Name: $name <br>
Charity: $charity <br>
EOD;

   //be able to tell who it's from
   $headers = "From: $email\r\n";
   $headers .= "Content-type: text/html\r\n";
   $success = mail($webMaster, $emailSubject, $body, $headers); 


/* Results rendered as HTML */
   $theResults = <<<EOD
<html>
blah blah
</html>

这会重定向到submit.php页面,但我的验证不起作用并发送空白数据。

表单代码如上:

<form method="post" action="submit.php">

  <input type="radio" name="charity"
 <?php if (isset($charity) && $charity == "1") echo "checked"; ?>
 value="1">1 
<input type="radio" name="charity"
 <?php if (isset($charity) && $charity == "2") echo "checked"; ?>
 value="2">2 
<input type="radio" name="charity"
 <?php if (isset($charity) && $charity == "3") echo "checked"; ?>
 value="3">3
 <span class="error"><?php echo $charityErr;?></span>

  <input type="text" name="name" placeholder="ENTER YOUR COMPANY NAME">
  <span class="error"><?php echo $nameErr;?></span>
  <input type="submit" name="submit" value="Submit"/>

</form>  

1 个答案:

答案 0 :(得分:1)

这里有语法错误:

<?php if (isset($charity) && charity == "3") echo "checked"; ?>

你错过了慈善机构中的$:

<?php if (isset($charity) && $charity == "3") echo "checked"; ?>

关于你的第二个问题,我认为你的表格有点乱。 您可以使用相同的页面进行表单,验证,错误管理和proccesing,使用此结构:

  • 捕获变量

  • 验证

  • proccesing

  • 显示错误(如果有)或成功消息

  • 如果错误或未发送,则呈现表单

尝试这样的事情:

<?php

//Capture POST/GET vars
$charity = $_REQUEST['charity'];
$name = $_REQUEST['name'];
$step = $_REQUEST['step'];

//You can add some sanitizing to the vars here


//Form sent if step == 1
if ($step == 1){

    /*
     * Validate form
     */

    //Initialize error's array
    $error = array();

    //No charity value error
    if (!$charity){
        $error[] = 'You must select 1 option';
    }

    //Missing name error
    if (!$name){
        $error[] = 'Name is missing';
    }

    //Add any other validation here



    /*
     * Process form if not error
     */

    if (!$error){

        //Send eMail
        $subject = "Your subject here";
        $toemail = "<yourname@example.com>";
        $bounce = "<bounce@example.com>";
        $message = "
                   Company Name: $name<br>
                   Charity: $charity <br>";
        $subject = '=?UTF-8?B?'.base64_encode(utf8_encode($subject)).'?=';
        $headers = "From: <webform@example.com>" . "\r\n" .
        "Reply-To: <info@example.com>" . "\r\n" .
        "X-Mailer: PHP/" . phpversion();
        mail($toemail, $subject, $message, $headers, "-f $bounce" );

        //Add any other proccesing here, like database writting

    }

    /*
     * Show errors || succsess msg on the top of the form
     */

    if ($error){
        unset($step); //if error, show the form
        echo '<div style="color:yellow;background-color:red;">ERROR:<br>';
        foreach ($error as $e){
            echo '- '.$e.'<br>';
        }
        echo '</div><br>';
    }else{
        echo '<div>Form succesfully sent</div><br>';

    }



}


/*
 * Form rendering
 */

if (!$step){
?>

<form method="post" action="">
    <input type="radio" name="charity" value="1" <?php echo ($charity == "1") ? ' checked':''; ?>>1 
    <input type="radio" name="charity" value="2" <?php echo ($charity == "3") ? ' checked':''; ?>>2 
    <input type="radio" name="charity" value="3" <?php echo ($charity == "3") ? ' checked':''; ?>>3
    <input type="text" name="name" placeholder="ENTER YOUR COMPANY NAME">
    <input type="hidden" name="step" value="1">
    <input type="submit" name="submit" value="Submit"/>     
</form>


<?php
}