如果用户输入了错误的英国电话号码格式或不是号码,但错误消息不起作用,我会尝试向用户显示错误消息。
HTML
<input type="text" name="phone" class="form-control" value="<?php echo $phone;?>" placeholder="Mobile Number ">
<span class="error"><?php echo $phoneErr;?></span>
PHP
$phoneErr = "";
$phone = "";
if (empty($_POST["phone"])) {
$phone = "";
} else if(!preg_match( $phone, '/^(?:'('+?44')'s?|'+?44 ?)?(?:0|'(0'))?'s?(?:(?:1'd{3}|7[1-9]'d{2}|20's?[78])'s?'d's?'d{2}[ -]?'d{3}|2'd{2}'s?'d{3}[ -]?'d{4}) $/'))
{
$phoneErr = "Invalid phone number";
}else {
$phone = test_input($_POST["phone"]);
}
test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
如果不是数字,则不会向数据库中插入任何内容,但如果我键入的数字9223372036854775807将被插入,则该值不是我输入的值。我做了一些研究,我认为这个值意味着无效字符串。
我表格的其他部分都很好,只是电话号码不好,我不知道为什么。
首先:您的正则表达式(甚至被最后一个空格清除)与9223372036854775807不匹配。
并没有显示如何在数据库中插入值,但若上面的代码用于检查电话号码,那个么除非插入$_POST['phone']
,否则如何插入任何电话号码都是个谜。但是,如果您之前尝试在$phone
中转换$_POST['phone']
,为什么要插入它?
我说"试试",因为事实上$phone = test_input($_POST["phone"])
这条线从来没有发生过。
如果$_POST['phone']
为空,则将$phone
设置为空字符串(这是不必要的:$phone
已经是空字符串,但这不是问题),否则将测试正则表达式,但在$phone
(空字符串)上测试,而不是在$_POST['phone']
上测试;此外,您反转了preg_match
参数,因此实际上您测试了一个空模式是否与字符串/^(?:'('+?44')'s?|' ...
匹配。
你必须用这样的方式重写你的检查程序:
$phoneErr = False;
$phone = "";
if( ! empty( $_POST["phone"] ) )
{
$pattern = '/^(?:'('+?44')'s?|'+?44 ?)?(?:0|'(0'))?'s?(?:(?:1'd{3}|7[1-9]'d{2}|20's?[78])'s?'d's?'d{2}[ -]?'d{3}|2'd{2}'s?'d{3}[ -]?'d{4})$/';
if( !preg_match( $pattern, $phone ) )
{
$phoneErr = "Invalid phone number";
}
else
{
$phone = test_input($_POST["phone"]);
}
}
(...)
if( $phoneErr )
{
// Your error routine here
}
elseif( $phone )
{
// Insert $phone (not $_POST['phone']) to database
}
关于正则表达式,在使用之前,请在regex101.com上使用多个英国有效数字对其进行检查。或者,您可以尝试注释中引用的有问题的正则表达式。
已解决
<?php
require_once('connect.php');
if(isset($_POST['submit']))
{
$name= strip_tags($_POST['name']);
$phone = strip_tags($_POST['phone']);
if($name=="") {
$error[] = "Please enter name.";
}
else if(!preg_match('/^[a-zA-Z ]*$/', $name))
{
// check if name only contains letters and whitespace
$error[] = "Only letters and white space allowed for name";
}
else
{
if( !empty($phone) )
{
$pattern = '/^(?:'('+?44')'s?|'+?44 ?)?(?:0|'(0'))?'s?(?:(?:1'd{3}|7[1-9]'d{2}|20's?[78])'s?'d's?'d{2}[ -]?'d{3}|2'd{2}'s?'d{3}[ -]?'d{4})$/';
if(!preg_match($pattern, $phone)){
$error[] = 'Please enter a valid phone number!';
}else{
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt =$conn->prepare( "INSERT INTO contact (name,phone)
VALUES( :name, :phone)");
$stmt->bindparam(':name', $name);
$stmt->bindparam(':phone', $phone);
$stmt->execute();
}catch(PDOException $e) {
echo "Error: " . $e->getMessage();
die();
}
}
}
}
}
?>