Помощь с методом класса в PHP - PullRequest
0 голосов
/ 17 января 2010

Я пытаюсь создать функцию, в которую я могу передать запрос mysql и получить результат обратно или ошибку, он также должен проверить, является ли пользователь, выполняющий код, администратором, если он есть, то он получитПеременная сеанса, которая содержит число запросов mysql, выполненных на странице, а затем увеличивает ее на 1 число, а затем устанавливает обратно в сеанс, также, если пользователь является администратором, он будет отображать любые сообщения об ошибках.

Я знаю, что это не лучший код, но похоже, что он должен работать?Любые советы по улучшению тоже, пожалуйста.

Вы видите, что я запускаю другой метод, который получает значение переменных сеанса, затем я устанавливаю его в переменную в текущем методе, затем я увеличиваю его значение на 1 число изатем запустите метод установки, чтобы снова сохранить его в сеансе.Я не совсем уверен, что это правильный способ сделать это?Мне действительно нужно запустить все эти методы и сохранить их все в локальной переменной, как я?

Также я получаю эту ошибку

Неустранимая ошибка: использование $ this, когда нетв контексте объекта в C: \ webserver \ htdocs \ project2 \ includes \ classes \ Database.class.php в строке 37

Строка 37 - это

$this->user_role = $session->get('user_role');

Метод ...

public static function query($sql)
{
    global $session; // the $session Object

    //get the session value to see if user is an admin
    $this->user_role = $session->get('user_role');

    //if user is admin, get query counter session value and +1 to it and reset it to a session variable.
    if ($this->user_role >= 9){
        $this->querie_counter = $session->get('querie_counter');
        $this->querie_counter++; // add +1 to the number
        $session->set('querie_counter',$this->querie_counter)
    }

    //run mysql query
    $result = mysql_query($sql);

    if (!$result) {
        // If admin is viewing then we show the SQL code and the error returned
        if($this->user_role >= 9){
            $error = '<BR><center><font size="+1" face="arial" color="red">An Internal Error has occurred.<BR> The error has been recorded for review</font></center><br>';
            $sql_formatted = highlight_string(stripslashes($sql), true);
            $error .= '<b>The MySQL Syntax Used</b><br>' . $sql_formatted .
            '<br><br><b>The MySQL Error Returned</b><br>' . mysql_error();
        }
        die($error);
    }
    return $result;
}

Ответы [ 3 ]

3 голосов
/ 17 января 2010

Вы не можете использовать $ this внутри статического метода. Статические методы не привязаны к каким-либо экземплярам объекта, поэтому внутри статического метода $ это не имеет смысла.

user_role - тоже статическая переменная? Если это так, вам нужно использовать Database :: $ user_role.

Вы также получите эту ошибку с $ this-> querie_counter.

1 голос
/ 17 января 2010

Хм, никто не прочитал ошибку или?

**Fatal error: Using $this when not in object context in C:\webserver\htdocs\project2\includes\classes\Database.class.php on line 37**

хорошо, вы не можете использовать $this в статической функции вы должны использовать self::users

public static function query($sql)
{
    global $session; // the $session Object

    //get the session value to see if user is an admin
    self::user_role = $session->get('user_role');

    //if user is admin, get query counter session value and +1 to it and reset it to a session variable.
    if (self::user_role >= 9){
        self::querie_counter = $session->get('querie_counter');
        self::querie_counter++; // add +1 to the number
        $session->set('querie_counter',$this->querie_counter)
    }

    //run mysql query
    $result = mysql_query($sql);

    if (!$result) {
        // If admin is viewing then we show the sql code and the error returned
        if(self::user_role >= 9){
            $error = '<BR><center><font size="+1" face="arial" color="red">An Internal Error has Occured.<BR> The error has been recorded for review</font></center><br>';
            $sql_formatted = highlight_string(stripslashes($sql), true);
            $error .= '<b>The MySQL Syntax Used</b><br>' . $sql_formatted .
            '<br><br><b>The MySQL Error Returned</b><br>' . mysql_error();
        }
        die($error);
    }
    return $result;
}
0 голосов
/ 17 января 2010

Кажется, все в порядке, просто исправьте следующие пункты:

  • запрос не запрос
  • Вы должны использовать htmlspecialchars() вместо stripslashes()
  • highlight_string() выделяет только код PHP, а не SQL - что он там делает?
  • введите действительный код XHTML в сообщение об ошибке (нет <BR>, ни <br> => <br />)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...