首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP ()的错误消息评估系统

使用PHP ()的错误消息评估系统
EN

Stack Overflow用户
提问于 2017-03-20 13:09:55
回答 1查看 252关注 0票数 0

我正在尝试一个错误消息评估系统,但我无法让它正常工作,从而能够对系统进行评估。

你能看出它有什么问题吗?

代码语言:javascript
复制
    $errors     = array();
    $name       = '9';
    $familyname = 'family';
    $user       = '9user`';
    $postdata   = array('name' => $name,'familyname' => $familyname,'user' => $user);

    foreach($postdata as $key => $value)
    {
        switch($key)
        {
            case 'name':
                $rules = array
                (
                    'strlen($value)>1;'               => 'Your name is too short.',
                    'is_numeric(substr($value,0,1));' => 'Your name has to begin with a character.',
                    'has_specchar($value);'           => 'Your name contains illegal characters.'
                );

                foreach($rules as $rule => $error)
                {
                    if(eval($rule)) $errors[] = $error;
                }
                break;

            case 'familyname':
                break;

            case 'user':
                $rules = array
                (
                    'strlen($value)<5;'               => 'The username is too short.',
                    'is_numeric(substr($value,0,1));' => 'The username has to begin with a character.',
                    'has_specchar($value);'           => 'The username contains illegal characters.'
                );

                foreach($rules as $rule => $error)
                {
                    if(eval($rule))
                    // if(eval($rule)==1)
                    // if(eval($rule)===1)
                    // if(eval($rule)==true)
                    // if(eval($rule)===true)
                    // None of these have had an effect??!
                    {
                        $errors[] = $error;
                    }
                }
                break;

            default:
        }
    }
    print_r($errors);

    function has_specchar($x,$excludes=array())
    {

        if(is_array($excludes)&&!empty($excludes))
        {
            foreach($excludes as $exclude)
            {
                $x=str_replace($exclude,'',$x);        
            }    
        } 

        if(preg_match('/[^a-z0-9 ]+/i',$x))
        {
            return true;        
        }

        return false;

    }

这个错误数组是空的,即使我输入了数据,我知道应该触发它成为一个错误??!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-20 13:16:42

来自PHP文档:

除非在计算的代码中调用返回,否则eval()返回NULL,在这种情况下,传递给返回的值将被返回。从PHP 7开始,如果计算的代码中有一个解析错误,eval()将抛出一个ParseError异常。在PHP 7之前,在本例中eval()返回FALSE,以下代码的执行将继续正常进行。使用set_error_handler()不可能捕获eval()中的解析错误。

http://php.net/manual/en/function.eval.php

return添加到规则键似乎解决了这个问题。

代码语言:javascript
复制
    $rules = array
    (
        'return strlen($value)>1;'               => 'Your name is too short.',
        'return is_numeric(substr($value,0,1));' => 'Your name has to begin with a character.',
        'return has_specchar($value);'           => 'Your name contains illegal characters.'
    );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42904474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档