формы — ошибка проверки PHP

Я создал код ошибки, чтобы проверить имя и радио, иначе он не сможет перейти на страницу подтверждения и отправить сообщение об ошибке рядом с полем. Пожалуйста, помогите, если я пропускаю какой-либо код!

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

/* 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>

2

Решение

У вас есть синтаксическая ошибка здесь:

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

Вы пропустите $ в благотворительном var:

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

Что касается вашего второго вопроса, я думаю, что ваша форма немного грязная.
Вы можете использовать ту же страницу для формы, проверки, управления ошибками и обработки, используя эту структуру:

  • захватить вары

  • проверки

  • Пчеловодство

  • показать ошибки, если таковые имеются или успех сообщения

  • визуализировать форму, если ошибка или не отправлено

Попробуйте что-то вроде этого:

<?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 = "<[email protected]>";
$bounce = "<[email protected]>";
$message = "Company Name: $name<br>
Charity: $charity <br>";
$subject = '=?UTF-8?B?'.base64_encode(utf8_encode($subject)).'?=';
$headers = "From: <[email protected]>" . "\r\n" .
"Reply-To: <[email protected]>" . "\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
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]