我的实时网站上有一个contact.php页面,但即使访问者在名称、电子邮件或消息字段中输入不完整的文本,表单仍认为它们是正确的,并显示成功消息。
如何指定名称必须至少为6个字母,电子邮件必须具有@符号和适当的.com、.org等结尾;消息长度必须至少为20个字母。
PHP脚本
<?php
if ($_POST['submit']) {
if (!$_POST['firstname']) {
$error="<br/>- Please enter your first name";
}
if (!$_POST['lastname']) {
$error="<br/>- Please enter your last name";
}
if (!$_POST['email']) {
$error.="<br/>- Please enter your email";
}
if (!$_POST['message']) {
$error.="<br/>- Please enter a message";
}
if (!$_POST['check']) {
$error.="<br/>- Please confirm you are human";
}
if ($error) {
$result='<div class="alert alert-danger" role="alert">
<strong>Whoops, there is an error</strong>. Please correct the following: '.$error.'</div>';
} else {
mail("myname@mywebsite.com",
"Contact message",
"Name: ".$_POST['name']."
Email: ".$_POST['name']."
Message: ".$_POST['message']);
{
$result='<div class="alert alert-success" role="alert">Thank you, I\'ll be in touch shortly. </div>';
}
}
}
?>
#HTML CODE#
<form method="post" role="form">
<div class="row">
<div class="col-md-3"></div>
<div class="contact-icon">
<i class="fas fa-user"></i>
</div>
<div class="form-inline">
<div class="col-md-9 form-group">
<label for="name">your name</label>
<span class="fieldSpan">
<input type="text"
name="name"
id="input-field-name"
class="form-control"
placeholder="your name"
value="<?php echo $_POST['name']; ?>">
</div>
</div>
</div>
<div class="row">
<div class="col-md-3"></div>
<div class="contact-icon">
<i class="fas fa-envelope"></i>
</div>
<div class="form-inline">
<div class="col-md-9 form-group">
<label for="email">your email address</label>
<span class="fieldSpan">
<input type="email"
name="email"
id="input-field-email"
class="form-control"
placeholder="yourname@website.com"
value="<?php echo $_POST['email']; ?>">
</div>
</div>
</div>
<div class="row">
<div class="col-md-3"></div>
<div class="contact-icon">
<i class="fas fa-pencil-alt"></i>
</div>
<div class="form-inline">
<div class="col-md-9 form-group">
<label for="message">your message</label>
<span class="fieldSpan vertical-align:top">
<textarea name="message"
rows="5"
id="input-field-message"
class="form-control"
placeholder="your message">
<?php echo $_POST['message']; ?></textarea>
<br>
<br>
</div>
</div>
</div>
</div>
<div class="col-md-12">
<div class="checkbox">
<label>
<input type="checkbox"
name="check">
Check this box if you're human.
</label>
</div>
</div>
</div>
<div class="col-md-3"></div>
<div class="row">
<div class="col-md-9">
<input type="submit"
name="submit"
class="btn btn-secondary"
value="send message"/>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
<!-- ----------- SCRIPTS------------ -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
发布于 2018-12-18 05:03:53
https://www.w3schools.com/php/php_form_url_email.asp
嘿!这就是你想要的答案。它是一个称为输入验证的概念,每种语言都有自己的处理方式。
下面是该链接的摘录,它验证了一些所需的字段。
<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "Invalid URL";
}
}
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
}
?>
通过检查if语句中name字段的长度是否大于或等于6,在确保字段不为空之后,您可以控制所需的验证类型。
发布于 2018-12-18 05:12:46
你可以直接使用html的特性来做这件事。
最小长度特性在这篇文章中得到了回答:minlength,如果你在html中使用de email input元素,浏览器将自动验证。
https://stackoverflow.com/questions/53822907
复制相似问题