[英]How can I prevent my form being sent if a user writes misformated entries in my fields? ie. Letters in number fields
怎么了:
当我在两个文本框中都写两个值时,页面没有按应有的方式显示祝贺消息。 当我只写1个值时,会发生正确的事情,这没有显示祝贺消息。
应该发生什么:
如果用户仅写入1个值,则该表格仍应显示,且任何先前填写的字段仍在此。 如果用户在所有字段中写入值,则应显示“祝贺”。
编辑-终于使它工作了,以防其他新手想要检出它:
<html>
<head>
<?php
$validForm = false;
function getValue($field){
if(isset($_GET[$field])){
return htmlspecialchars(trim($_GET[$field]));
}
else{
return "";
}
}
function validateForm($value,$type){
$field = $_GET[$value];
//magic goes here.
switch ($type){
case 'required':
if (!isset($field) || ($field=="")){
global $validForm;
$validForm = false;
}
else{
global $validForm;
$validForm = true;
}
break;
case 'email':
$regexp = "/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z-][0-9a-zA-Z-]+\.)+[a-zA-Z](2,6)$/";
if(isset($field) && preg_match($regexp,$field)){
global $validForm;
$validForm = true;
}
else {
global $validForm;
$validForm = false;
}
break;
case 'number':
if(!isset($field) || ($field=="") || (!is_numeric($field))){
global $validForm;
$validForm = false;
}
else{
global $validForm;
$validForm = true;
}
break;
default:
die('Validacion desconocida.');
}
}
?>
</head>
<body>
<?php validateForm('name','required'); ?>
<?php validateForm('lastname','required'); ?>
<?php if($validForm == false){ ?>
<form action="class2.php" method="get">
<dl>
<dt>First Name:</dt>
<dd><input type="text" value="<?php echo htmlspecialchars(getValue('name')) ?>" name="name" />
</dd>
<dt>Last Name:</dt>
<dd><input type="text" value="<?php echo htmlspecialchars(getValue('lastname')) ?>" name="lastname" />
</dd>
<br />
<dt>
<input type="submit" value="enviar" name="validate"/>
</dt>
</dl>
</form>
<?php
} else {
?>
<h1>Congratulations, you succesfully filled out the form!</h1>
<?php }
?>
</body>
validateForm函数中的$ validForm变量似乎有问题。
我认为您假设对函数内部的$ validForm所做的更改会在函数外部更改相同的变量名称。 因为您尚未将其设置为全局变量,所以不会为您执行此操作。
您需要查看PHP中的Variable作用域。
http://php.net/manual/zh/language.variables.scope.php
这将说明您应该如何处理此变量。 您可以在函数中返回值。
例如,对于该函数,只需返回变量:
function validateField($value,$type){
//magic goes here.
switch ($type){
case 'required':
if (!isset($value) || ($value== "")){
$valid = false;
}
else{
$valid = true;
}
break;
case 'email':
$regexp = "/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z-][0-9a-zA-Z-]+\.)+[a-zA-Z](2,6)$/";
if(isset($value) && preg_match($regexp,$variable)){
$valid = true;
}
else {
$valid = false;
}
break;
case 'number':
if(!isset($value) || ($value=="") || (!is_numeric($value))){
$valid = false;
}
else{
$valid = true;
}
break;
default:
die('Validacion desconocida.');
}
return $valid;
}
那将解决功能上的问题
要获取变量,请执行以下操作:
$formValid = true;
if (!validateField($_GET['name'],'required'))
{
$formValid = false;
}
if (!validateField($_GET['lastname'],'required'))
{
$formValid = false;
}
如果($ formValid)....
问题是,您在检查$validForm
的值之后正在调用validateForm()
。 当您在body标签后立即检查$validForm
,它总是会为false。 当它经过第二个字段时,它将被设置为true(假设表单是有效的),但是此时您已经在if
语句的第一分支中,因此“祝贺”消息将永远不会显示。
要解决此问题,只需将验证调用移至,然后再检查$validForm
的值:
<body>
<?php
validateForm($_GET['name'],'required');
validateForm($_GET['lastname'],'required');
if($validForm == false){ ?>
<form>
等等。
2件事:
1)我不认为您的$ validForm变量在函数validateForm的范围内。 似乎您需要在函数global $ validate表单中对其进行全局调用。
2)将其设置为false后,调用validateForm。 您需要先进行检查,然后再进行有条件的检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.