为什么我的PHP表单验证工作没有成功?

时间:2013-09-18 19:05:57

标签: php forms

当我尝试在我的网站上提交表单时,我收到以下错误:

致命错误:无法访问第15行的functions / form_validation.php中的空属性

表单验证的代码是:

class Validation {
    var $success;
    var $post_data;
    var $errors;
    var $delimiter;


    function Validation($HTTP_POST_DATA) {
        $this->success = true;
        $this->errors = false;
        $this->$post_data = $HTTP_POST_DATA;
        $this->delimiter = "|";
        while(list ($key, $val) = each ($this->$post_data)) {
            $this->{$key} = $val;
        }
        reset($this->$post_data);
        while(list ($key, $val) = each ($this->$post_data)) {
            if(method_exists($this, $key)) {
                $cmd = "\$this->".$key."();";
                eval($cmd);
            }
        }
    }

表单页面中的代码是:

 include_once($APP_ROOT . "functions/index.php");
    include_once($APP_ROOT . "functions/form_validation.php");
    $CONTINUE = TRUE;
    $valid = new Validation($_POST);
    if($CONTINUE = $valid->success) {

在我们升级到PHP5之前,这段代码工作得很好。知道我需要改变什么来让它再次运作吗?

由于

3 个答案:

答案 0 :(得分:7)

$this->$post_data应为$this->post_data

将来,请尝试查看错误消息指向您的行,因为通常情况就是问题所在! ;)

答案 1 :(得分:6)

改变这个:

$this->$post_data = $HTTP_POST_DATA;

对此:

$this->post_data = $HTTP_POST_DATA;

答案 2 :(得分:1)

您可以通过修改行来解决当前问题:

if(property_exists(this, $key)) $this->{$key} = $val;

如果您想确切知道为什么这不起作用,请尝试在调试模式下打印POST数组:

function Validation($HTTP_POST_DATA) {
  echo '<pre>'. print_r($HTTP_POST_DATA, true). "</pre>\n";
... rest of method ...

另外,将$this->$post_data的所有实例更改为$this->post_data