PHP игнорирует обязательное поле и отправляет форму
У меня есть следующая форма, которую я создал в PHP, но по какой-то причине проверка ошибок не препятствует отправке формы. Я не являюсь разработчиком php, и любая помощь будет принята с благодарностью. По какой-то причине мои флажки с несколькими параметрами также не работают, и выдает ошибку
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Basic Page Needs
–––––––––––––––––––––––––––––––––––––––––––––––––– -->
<meta charset="utf-8">
<title>Submit Form</title>
<meta name="description" content="">
<meta name="author" content="">
<!-- Mobile Specific Metas
–––––––––––––––––––––––––––––––––––––––––––––––––– -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- FONT
–––––––––––––––––––––––––––––––––––––––––––––––––– -->
<link href="//fonts.googleapis.com/css?family=Raleway:400,300,600" rel="stylesheet" type="text/css">
<!-- CSS
–––––––––––––––––––––––––––––––––––––––––––––––––– -->
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/skeleton.css">
<script src='//cdn.tinymce.com/4/tinymce.min.js'></script>
<script>
tinymce.init({
selector: '#PContent',
theme: 'modern',
height: 300,
plugins: [
'advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker',
'searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking',
'save table contextmenu directionality emoticons template paste textcolor'
],
content_css: 'css/content.css',
toolbar: 'insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | print preview media fullpage | forecolor backcolor emoticons'
});
</script>
<!-- Favicon
–––––––––––––––––––––––––––––––––––––––––––––––––– -->
<link rel="icon" type="image/png" href="images/favicon.png">
<style>
form label {
float: left;
width: 150px;
margin-bottom: 5px;
margin-top: 5px;
}
.clear {
display: block;
clear: both;
width: 100%;
}
</style>
</head>
<body onload="myUploadFunction()">
<!-- Primary Page Layout
–––––––––––––––––––––––––––––––––––––––––––––––––– -->
<div class="container">
<div class="row">
<div class="one-half column" style="margin-top: 2%">
<?php
require 'xxx.php';
$fnameErr = $emailErr = $genderErr = $websiteErr = "";
// STEP 0. Are we getting form submission or should we show the form's field for filling?
if(isset($_POST['add'])) {
// STEP 1. Get the connection
// STEP 2. Validate user's input
if (empty($_POST["fname"])) {
$fnameErr = "Name is required";
} else {
$fname = test_input($_POST["fname"]);
}
$lname = $_POST['lname'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$doservice = $_POST['doservice'];
$etype = $_POST['etype'];
$rtype = $_POST['rtype'];
$ptime = $_POST['ptime'];
$paddress = $_POST['paddress'];
$rtime = $_POST['rtime'];
$daddress = $_POST['daddress'];
$vtype = $_POST['vtype'];
$pcount = $_POST['pcount'];
$addetails = $_POST['addetails'];
$heardwhere = $_POST['heardwhere'];
// STEP 3. Properly encode user input for SQL
// STEP 4. Construct the SQL query
//INSERT
$sql = " INSERT INTO QuotesInfo ( fname, lname, phone, email, doservice, etype, rtype,
ptime, paddress, rtime, daddress, vtype, pcount, addetails, heardwhere )
VALUES ('".$_POST["fname"]."','".$_POST["lname"]."','".$_POST["phone"]."','
".$_POST["email"]."','".$_POST["doservice"]."','".$_POST["etype"]."','".$_POST["rtype"]."','".$_POST["ptime"]."','
".$_POST["paddress"]."','".$_POST["rtime"]."','".$_POST["daddress"]."','".$_POST["vtype"]."','".$_POST["pcount"]."','
".$_POST["addetails"]."','".$_POST["heardwhere"]."') ";
//$retval = mysql_query( $sql, $mysqli ); // procedural version
$retval = $mysqli->query($sql);
// STEP 5. Execute the SQL query
if(! $retval ) {
// STEP 5.1 Deal with insuccess
die('Could not enter data: ' . $mysqli->error);
}
// STEP 5.2 Deal with success
echo "Entered data successfully\n";
$to = "myemail@gmail.com";
$subject = "Contact mail";
$from=$_POST["email"];
$msg= $fname . " " . $lname . "\r\n" . $phone . "\r\n" . $email . "\r\n" . $doservice . "\r\n" . $etype . "\r\n" . $rtype . "\r\n" . $ptime . "\r\n" . $paddress . "\r\n" . $rtime . "\r\n" . $daddress . "\r\n" . $vtype . "\r\n" . $pcount . "\r\n" . $addetails . "\r\n" . implode(", ", $heardwhere);
$headers = "From: $from";
mail($to,$subject,$msg,$headers);
echo "Email successfully sent.";
// STEP 6. We're done, close the connection
//mysqli_close($mysqli);
$mysqli->close();
}else {
?>
<form id="form1" name="form1" method = "post" action = "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<label for="fname">First Name</label><input type="text" name="fname" id="fname" />
<span class="error">* <?php echo $fnameErr;?></span>
<br class="clear" />
<label for="lname">Last Name</label><input type="text" name="lname" id="lname" />
<br class="clear" />
<label for="phone">Phone</label><input type="text" name="phone" id="phone" />
<br class="clear" />
<label for="email">Email</label><input type="text" name="email" id="email" />
<br class="clear" />
<label for="doservice">Date of Service</label><input type="text" name="doservice" id="doservice" />
<br class="clear" />
<label for="etype">Event type</label><select name="etype" id="etype">
<option value="Wedding">Wedding</option>
<option value="Quinceanera/Cotillion">Quinceanera/Cotillion</option>
<option value="Corporate/Business">Corporate/Business</option>
<option value="Homecoming/Prom/School Dance">Homecoming/Prom/School Dance</option>
<option value="Bachelor/Bachelorette">Bachelor/Bachelorette</option>
<option value="Concert">Concert</option>
<option value="Sporting Event">Sporting Event</option>
<option value="Birthday">Birthday</option>
<option value="Sweet 16">Sweet 16</option>
<option value="Night Out">Night Out</option>
</select>
<br class="clear" />
<label for="rtype">Rental type</label><select name="rtype" id="rtype">
<option value="Hourly Rental">Hourly Rental</option>
<option value="Round Trip">Round Trip</option>
<option value="One Way">One Way</option>
<option value="Shuttle Service">Shuttle Service</option>
</select>
<br class="clear" />
<label for="ptime">Pickup Time</label><input type="text" name="ptime" id="ptime" />
<br class="clear" />
<label for="paddress">Pick Up Address and City</label><input type="text" name="paddress" id="paddress" />
<br class="clear" />
<label for="rtime">Return Time</label><input type="text" name="rtime" id="rtime" />
<br class="clear" />
<label for="daddress">Drop Off Address, City</label><input type="text" name="daddress" id="daddress" />
<br class="clear" />
<label for="vtype">Type of Vehicle</label><select name="vtype" id="vtype">
<option value="10 passenger limousine">10 passenger limousine</option>
<option value="22 Passenger SUV">22 Passenger SUV</option>
<option value="22-30 Passenger Party Bus">22-30 Passenger Party Bus</option>
<option value="31 Passenger Shuttle Bus">31 Passenger Shuttle Bus</option>
</select>
<br class="clear" />
<label for="pcount">How many passengers</label><input type="text" name="pcount" id="pcount" />
<br class="clear" />
<label for="addetails">Additional Details</label><textarea name="addetails" id="addetails" cols="45" rows="5"></textarea>
<br class="clear" />
<label for="heardwhere">How did you hear about us</label>
<input type="checkbox" name="heardwhere[]" value="Facebook" id="heardwhere_0" />Facebook
<input type="checkbox" name="heardwhere[]" value="Twitter" id="heardwhere_1" />Twitter
<input type="checkbox" name="heardwhere[]" value="Google" id="heardwhere_2" />Google
<input type="checkbox" name="heardwhere[]" value="Referral" id="heardwhere_3" />Referral
<input type="checkbox" name="heardwhere[]" value="Website Ad" id="heardwhere_4" />Website Ad
<input type="checkbox" name="heardwhere[]" value="Flyer" id="heardwhere_5" />Flyer
<input type="checkbox" name="heardwhere[]" value="Bridal Show" id="heardwhere_6" />Bridal Show
<input type="checkbox" name="heardwhere[]" value="Quinceanera Show" id="heardwhere_7" />Quinceanera Show
<input type="checkbox" name="heardwhere[]" value="Yelp" id="heardwhere_8" />Yelp
<input type="submit" name="add" id="add" value="Save">
<br class="clear" />
</form></div>
<div class="one-half column" style="margin-top: 2%">
<?php
$sqli = "SELECT fname, lname, phone, email, doservice, etype, rtype, ptime, paddress, rtime, daddress, vtype, pcount, addetails, heardwhere FROM QuotesInfo ";
$resulti = $mysqli->query($sqli);
if ($resulti->num_rows > 0) {
// output data of each row
while($row = $resulti->fetch_assoc()) {
echo "" . $row["fname"]. " " . $row["lname"]. " : " . $row["phone"]. "<br>"
. $row["email"]. " " . $row["doservice"]. " : " . $row["etype"]. "<br>"
. $row["rtype"]. " " . $row["ptime"]. " : " . $row["paddress"]. "<br>"
. $row["rtime"]. " " . $row["daddress"]. " : " . $row["vtype"]. "<br>"
. $row["pcount"]. " " . $row["addetails"]. " : " . $row["heardwhere"]. "<br>";
}
} else {
echo "0 results";
}
?>
</div>
<?php
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
</div>
</div>
<!-- End Document
–––––––––––––––––––––––––––––––––––––––––––––––––– -->
</body>
</html>
3 ответа
- Первое, что вам нужно сделать, это просто поместить весь ваш php-код в один блок. Я не знаю, что вы делаете, вы запускаете условие if в своем первом блоке и заканчиваете его в другом блоке.
- Используйте если еще Условие правильно. Я проверил ваш код и обнаружил, что вы запускаете условие if, а затем запускаете условие else, но после этого вы запускаете другое условие else. Хорошо, если все еще правильно.
Я изменил ваш код, когда некоторые переменные размещены в вашем файле. Проверьте это, это, безусловно, решит вашу проблему. Я успешно запустил этот код в моей системе.
<?php
$ fnameErr = $ emailErr = $ sexErr = $ websiteErr = "";
// STEP 0. Are we getting form submission or should we show the form's field for filling?
// если fname опубликовано if(isset($_POST['fname'])) { // ШАГ 1. Получить соединение
// STEP 2. Validate user's input if (empty($_POST["fname"])) { $fnameErr = "Name is required";
} else { //else условие и помните все ваши условия if else должны быть // в этом блоке, только не вне этого
$ fname = test_input ($ _ POST ["fname"]); $ lname = $ _POST ['lname'];
$ phone = $ _POST ['phone'];
$ email = $ _POST ['email'];
$ doservice = $ _POST ['doservice'];
$ etype = $ _POST ['etype'];
$ rtype = $ _POST ['rtype'];
$ ptime = $ _POST ['ptime'];
$ paddress = $ _POST ['paddress'];
$ rtime = $ _POST ['rtime'];
$ daddress = $ _POST ['daddress'];
$ vtype = $ _POST ['vtype'];
$ pcount = $ _POST ['pcount'];
$ addetails = $ _POST ['addetails'];
$ hearwhere = $ _POST ['hearwhere'];// STEP 3. Properly encode user input for SQL // STEP 4. Construct the SQL query
// INSERT $ sql = "INSERT INTO QuotesInfo (fname, lname, телефон, электронная почта, doservice, etype, rtype, ptime, paddress, rtime, адрес электронной почты, vtype, pcount, addetails, слышно)
ЗНАЧЕНИЯ ('".$_POST["fname"]."','".$_POST["lname"]."','".$_POST["phone"]."',' ".$_POST["электронная почта"]. " ''".$_POST["doservice"]."''". $ _ POST [ "ETYPE"]. " ''". $ _ POST [ "RTYPE"]. "",'".$_POST["ptime"]."',' ".$_POST["paddress"]."','".$_POST["rtime"]."','".$_POST["daddress"]."','".$_POST["vtype"]."','".$_POST["pcount"]."',' ".$_POST["addetails"]."','".$_POST["услышано"]. "')";//$retval = mysql_query( $sql, $mysqli ); // procedural version $retval = $mysqli->query($sql); // STEP 5. Execute the SQL query if(! $retval ) { // STEP 5.1 Deal with insuccess die('Could not enter data: ' . $mysqli->error); } // STEP 5.2 Deal with success echo "Entered data successfully\n";
$ to = "myemail@gmail.com"; $ subject = "Контактная почта"; $ От = $ _ POST [ "электронная почта"]; $msg= $fname . " " $lname . "\r\n" . $ телефон. "\r\n" . $email . "\r\n" . $doservice . "\r\n" . $etype . "\r\n" . $rtype . "\r\n" . $ptime . "\r\n" . $paddress . "\r\n" . $rtime . "\r\n" . $ адрес "\r\n" . $vtype . "\r\n" . $pcount . "\r\n" . $addetails . "\r\n" . implode(", ", $hearwhere); $headers = "From: $from";
почта ($ к, $ при условии, $ тзд, $ заголовки); echo "Письмо успешно отправлено.";
// STEP 6. We're done, close the connection //mysqli_close($mysqli); $mysqli->close(); } // this is your else condition, make sure it will be also in else //condition above. I have commented this coz I have no database :P //else { $sqli = "SELECT fname, lname, phone, email, doservice, etype, rtype, ptime, paddress, rtime, daddress, vtype, pcount, addetails, heardwhere FROM QuotesInfo ";
$ resulti = mysqli_query ($ con, $ sqli);
if ($ resulti-> num_rows> 0) {// выводить данные каждой строки, а ($row = $resulti->fetch_assoc()) { echo "" . $ Строки [ "имя_файла"]. "" $ Строки [ "LNAME"]. ": " . $ Строки [ "телефон"]. "
". $ row [" email "]." ". $ row [" doservice "].": ". $ row [" etype "]."
". $ row [" rtype "]." ". $ row [" ptime "].": ". $ row [" paddress "]."
". $ row [" rtime "]." ". $ row [" daddress "].": ". $ row [" vtype "]."
". $ row [" pcount "]." ". $ row [" addetails "].": ". $ row [" hearwhere "]."
"; }} else {echo" 0 results "; }
}function test_input($data) {
$ data = trim ($ data); $ data = stripslashes ($ data); $ data = htmlspecialchars ($ data); вернуть данные $; }
?>
Проверьте этот код и попытайтесь понять его. Надеюсь, это сработает сейчас. Удачного кодирования:)
Вы должны использовать функцию exit() после вашего условия if, как это
if (empty($_POST["fname"])) {
$fnameErr = "Name is required";
exit();
}
Теперь это сначала проверит ваше имя, если оно пустое, оно выйдет
Вы в некоторой степени проверяете входные данные, но в своих операторах if/else вам нужно сделать какой-то способ экранирования, если значения не заданы, возможно, используя: If(! Isset($value)){ Errors[] = 'value не установлен'; }
If(isset($errors)){
Echo your error handling
} else {
The rest of your script
}