Мне нужно проверить форму, прежде чем она будет отправлена в массив сеанса, это то, что я до сих пор.
Используя PHP_SELF
, форма отправляется в индекс, который должен проверить правильность введенного ввода.
Ошибка отображается перед отправкой формы, и каждый раз, когда она отправляется с неправильными данными, другие сообщения не отображаются. Страница обновляется
Любая помощь была бы удивительной, я отключил проверку javascript, чтобы проверить это, и наполовину функционален
Код PHP:
<?php
// define variables and set to empty values
$nameErr = $emailErr = $mobileErr = $creditCardErr = $expiryErr = "";
$name = $email = $mobile = $creditCard = $expiry = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
function validate($str) {
return trim(htmlspecialchars($str));
}
//Valikdating User name
if (empty($_POST["cust[name]"])) {
$nameErr = "Name is required";
} else {
$name = validate($_POST["cust[name]"]);
if (!preg_match("/\b([A-Z]{1}[a-z]{1,30}[- ]{0,1}|[A-Z]{1}[- \']{1}[A-Z]{0,1}
[a-z]{1,30}[- ]{0,1}|[a-z]{1,2}[ -\']{1}[A-Z]{1}[a-z]{1,30}){2,5}/",$name)) {
$nameErr = "Only Western names, letters and white spaces allowed";
}
}
if (empty($_POST["cust[email]"])) {
$emailErr = "Email is required";
} else {
$email = validate($_POST["cust[email]"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
if (empty($_POST["cust[mobile]"])) {
$mobileErr = "Mobile Number is required";
} else {
$mobile = validate($_POST["cust[mobile]"]);
//check if mobile phone is inputted correctly
if (!preg_match("/^(\(04\)|04|\+614)( ?\d){8}$/",$mobile)) {
$mobilelErr = "Invalid Mobile Number";
}
}
if (empty($_POST["cust[card]"])) {
$creditCardErr = "Credit Card is required";
} else {
$creditCard = validate($_POST["cust[card]"]);
//check if all credit card types are valid
if (!preg_match("/^(\d){16}$/",$creditCard)) {
}else if(!preg_match("/^(\d){4}\s{1}(\d){4}\s{1}(\d){4}\s{1}(\d){4}$/",$creditCard)) {
}else if(!preg_match("/^(\d){4}\-{1}(\d){4}\-{1}(\d){4}\-{1}(\d){4}$/",$creditCard)) {
$creditCardErr = "Invalid Credit Card";
}
}
//This needs to be fixed
if (empty($_POST["cust[expiry]"])) {
$expiryErr = "Expiry is required";
} else {
$expiry = validate($_POST["cust[expiry]"]);
//check if expiry is valid and a month ahead
if (!preg_match("",$expiry)) {
$expiryErr = "Invalid date, select month onwards";
}
}
}
? >
Код HTML-формы:
<div id="bookingsCard">
<form id="seatform" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
<!-- Customer Details -->
<div class="CustomerDetails">
<label for="CustomerDetails"><b>CUSTOMER DETAILS</b></label>
<br><br>
<label for="Name"><b>Name</b></label>
<input type="text" name="cust[name]" id="cust-name" value="<?php echo $name; ?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
<label for="Email"><b>Email</b></label>
<input type="email" name="cust[email]" id='cust-email' value="<?php echo $email; ?>">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
<label for="Mobile"><b>Mobile</b></label>
<input type="tel" name="cust[mobile]" id='cust-mobile' value="<?php echo $mobile; ?>">
<span class="error">* <?php echo $mobileErr;?></span>
<br><br>
<label for="Credit Card"><b>Credit Card</b></label>
<input type="text" name="cust[card]" id='cust-card' value="<?php echo $creditCard; ?>">
<span class="error">* <?php echo $creditCardErr;?></span>
<br><br>
<label for="Expiry"><b>Expiry</b></label>
<input type="month" name="cust[expiry]" id='cust-expiry'
pattern="[0-9]{4}-[0-9]{2}" value="<?php echo $expiry; ?>">
<span class="error">* <?php echo $expiryErr;?></span>
<br><br>
</div>
<hr>
<label><b>Total Amount</b></label>
<input name="total" id="total" type="text" readonly>
<br><br>
<button type="submit" class="bookbtn" name="order" value='order' id='bookbtn' >Book Now!</button>
</form>
</div>
2 ответа
Вы могли бы сделать что-то вроде этого: для html: <input type="text" required name="custname" id="cust-name" value="<?php echo $name; ?>"><span class="error">* <?php echo $nameErr;?></span>
не знаю, почему вы использовали cust [name], но я использовал упрощенное имя и добавил проверку html 5 required
, которая делает жизнь намного проще. А теперь после отправки формы php:
if ( isset($_POST["name"]) && !empty($_POST["name"])) {
$name = $_POST["name"];
//your other validation
} else {
$nameErr = "Name is required/ not set";
}
// надеюсь, что это поможет вам счастливое кодирование
$ _POST ["cust [XXX]"] недопустимо. Если вы должны использовать 2d массив для проверки данных, вы должны использовать вместо этого $ _POST ['cust'] ['XXX']. Код ниже работает отлично.
if (empty($_POST["cust"]['name'])) {
$nameErr = "Name is required";
}
else {
$name = validate($_POST["cust"]['name']);
.............
}
Данные, которые вы публикуете с помощью формы, уже сериализованы в массив с именем $ _POST. Чтобы получить массив внутри массива, вам нужно использовать приведенный выше синтаксис. Если у вас нет нескольких экземпляров формы, приведенной выше, использование одного размерного массива во входных данных формы будет приемлемым.
<form action="" method="POST">
<input type="text" name="name"></input>
......
</form>
Затем вы можете получить почтовые данные, как показано ниже:
<?php
if(empty($_POST['name'])){
$nameErr = 'Please input your name';
}else{
//Do something to process the value submitted
}
?>
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.