4

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

致命错误:无法访问第 15 行的函数/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 之前,这段代码可以正常工作。知道我需要改变什么才能让它再次工作吗?

谢谢

4

3 回答 3

7

$this->$post_data应该$this->post_data

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

于 2013-09-18T19:08:19.330 回答
6

改变这个:

$this->$post_data = $HTTP_POST_DATA;

对此:

$this->post_data = $HTTP_POST_DATA;
于 2013-09-18T19:08:46.273 回答
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

于 2013-09-18T19:11:00.233 回答