我正在尝试使用表单来验证输入,通过使用if语句。
if (isset($_POST['weekly-rate']))
{
$weekly_rate = $_POST['weekly-rate'];
if(!isset($_POST['weekly-rate']))
{
$error_messages[]= 'Weekly rate was not set';
}
else
{
$weekly_rateOK = true;
}
}
else
{
$error_messages[] = 'Weekly rate was not set...';
}
当我运行它时,它给出了我想要的输出,这是没有设置每周租金。我认为这是不正确的
if(!isset($_POST['weekly-rate']))
{
$error_messages[]= 'Weekly rate was not set';`
表示如果未设置输入,则运行错误消息,未设置每周费率。
然而,我收到的只不过是
答案 0 :(得分:1)
您对isset()
的理解是正确的。但是,表单始终将字段发布回您的后端代码,这会导致isset()
始终为true。您可以考虑使用empty()
代替。
简化版本看起来像这样
$weekly_rateOK = !empty($_POST['weekly-rate']);
if (!$weekly_rateOK) {
$error_messages[] = 'Weekly rate was not set...';
}
如果需要,您可能需要添加整数检查。
答案 1 :(得分:0)
如果您正在使用带有名称的文本输入/选择,则输入/选择始终是已过帐并已设置,但使用空字符串。如果是复选框或单选按钮,则只有选中复选框或选中单选按钮才会设置它们。
我编写了一个样本验证函数,受Laravel的启发。您可以检查here,并通过添加其他案例来扩展它:
function validate ($rule_bag, $input) {
$flag = true;
$error_bag = [];
foreach ($rule_bag as $item => $rules){
$rules = is_array($rules) ? $rules : array_filter(explode(',', $rules));
foreach($rules as $rule){
$rule = trim($rule);
switch(mb_strtolower(trim($rule))){
case 'required': {
// checking isset then empty to be compatible with php <= 5.4
if (!isset($input[$item]) || empty($input[$item]))
{
$flag = false;
!isset($error_bag[$item])?$error_bag[$item]=[]:null;
$error_bag[$item][] = $rule;
}
break;
}
default: {
if (isset($input[$item])){
try {
if (!preg_match($rule, $input[$item])){
$flag = false;
!isset($error_bag[$item])?$error_bag[$item]=[]:null;
!isset($error_bag[$item]['regex'])?$error_bag[$item]['regex']=[]:null;
$error_bag[$item]['regex'][] = $rule;
}
}
catch(Exception $e){
echo $e->getMessage();
}
}
}
}
}
}
return $flag ? $flag : $error_bag;
}