2013-09-18 2 views
4

Когда я пытаюсь отправить форму на моем сайте, я получаю следующее сообщение об ошибке:Почему моя проверка PHP-формы не работает?

Фатальная ошибка: Не удается получить доступ к пустой недвижимости в функции/form_validation.php на линии 15

Код для проверки формы является:

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

Поскольку ваши строки не пронумерованы здесь, и мы не знаем, если есть больше кода вокруг этого, вы можете указать, какие из этих линий бросать ошибка? – Renan

+0

Вы используете PHP 4 ?. Если нет, прочитайте документацию http://php.net/manual/en/language.oop5.php. Вам больше не нужно использовать 'var'. Вы можете использовать 'public function __construct() {}' как ваш конструктор. –

+0

Кроме того, в качестве примечания стороны, нет необходимости использовать eval. Вместо: '$ cmd =" ​​\ $ this -> ". $ Key."(); "; eval ($ cmd); ' Просто выполните:' $ this -> $ key() ' – Mark

ответ

6

Изменить это:

$this->$post_data = $HTTP_POST_DATA; 

Для этого:

$this->post_data = $HTTP_POST_DATA; 
+0

Спасибо. Изменение каждого экземпляра $ this -> $ post_data должно быть $ this-> post_data. Можете ли вы объяснить мне простыми словами, почему мне нужно было сделать это изменение после перехода с PHP4 на PHP5? – user2791808

+1

Чтобы быть совершенно честным, я понятия не имею, хотя у меня нет абсолютно никакого опыта работы с PHP4. Однако я хотел бы услышать, почему это когда-либо работало. – Mark

7

$this->$post_data должен быть $this->post_data

В будущем, попробуйте посмотреть на линии, которая указывает сообщение об ошибке вы делаете, потому что обычно это где проблема! ;)

+0

Спасибо. Изменение каждого экземпляра $ this -> $ post_data должно быть $ this-> post_data. Можете ли вы объяснить мне простыми словами, почему мне нужно было сделать это изменение после перехода с PHP4 на PHP5? – user2791808

+0

Ум ... Я не уверен, зачем мне это нужно, так как у вас есть много других прав доступа прямо там, но по какой-то причине вы помещаете дополнительный '' 'в этот конкретный ... –

1

Вы можете позаботиться о немедленных проблемах путем изменения строки следующим образом:

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

Если вы 'd хотел бы знать точно, ПОЧЕМУ это не работает, попробуйте распечатать массив 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

Смежные вопросы