Непонятный пробел.

Статус
В этой теме нельзя размещать новые ответы.

Runapa

Постоялец
Регистрация
30 Окт 2010
Сообщения
63
Реакции
5
Пожалуйста объясните мне почему вот этот класс

PHP:
class Main_page extends Db {
    function get_main_page(){
        $sql = "SELECT page_name, position FROM buttons WHERE position = '0'";
        $result = $this->sql($sql);
        return $result;
    }
   
    function search_main() {
        $res = $this->get_main_page(); //Возвращаем ссылку на результат sql запроса.
        $row = mysql_fetch_assoc($res);
        return $row["page_name"];
    }
   
    function print_main() {
        if (isset($_GET["p"])) {
            $p = $_GET["p"];
        }else{
            $p = $this->search_main();
        }
        return $p;
    }
}

который вызывается

PHP:
$main = new Main_page();
$p = $main->print_main();

выводит пустую строку ? Причем в соурсе страницы это выглядит как пустая строка.
Если
PHP:
return $p;
поменять на
PHP:
echo $p;
, то выводится содержимое переменной $p.
Уже всю голову сломал. Помогите понять ?
 
Ну тут не совсем понятно... что там в Db?

Давайте упростим класс и попробуем ещё раз:

PHP:
class Main_page extends Db {
 
    public function get_main_page() {
        return $this->sql("SELECT page_name, position FROM buttons WHERE position = '0'");
    }
 
    public function search_main() {
        $row = mysql_fetch_assoc( $this->get_main_page() );
     
        if( !empty( $row["page_name"] ) ) {
            return $row["page_name"];
        }
     
        return '';
    }
 
    public function print_main() {
        global $_GET;
     
        return ( isset($_GET['p']) ) ? $_GET['p'] : $this->search_main();
    }
}

то выводится содержимое переменной $p.
Уже всю голову сломал. Помогите понять ?

а что там должно выводится?
 
А ничего. В $p попадает значение поля бд page_name. Но оно не должно выводиться.
Кстати, упрощенный класс выводит тоже самое.
 
честно говоря не очень понятно, чего нужно добиться, попробуем разобраться, итак
в $p записывается: page_name или $_GET['p'],
эта строка:
$p = $main->print_main();
ничего не выведет, т.к. это присваивание а не вывод
так в чем проблема? что $p получается пустое или что $p не пустое но не выводится?
тогда в 1-м случае
либо этот запрос: SELECT page_name, position FROM buttons WHERE position = '0'
выдает пустую выборку (или там page_name не заполнено), либо GET параметр p - существует, но тоже пустой
во 2-м
нужно смотреть (писать?) код который делает вывод, а его здесь нет
 
А можно как то увидеть класс Db?
 
PHP:
class Db extends Config {
    private $connection;
       
    function __construct() {
        $this->open_connection();
    }
   
    private function open_connection() {
        $this->connection = mysql_connect($this->DB_HOST, $this->DB_USER, $this->DB_PASS);
        if (!$this->connection){
            die("Database connection failed".mysql_error());
        }else{
            $db_select = mysql_select_db($this->DB_NAME);
            if(!$db_select) {
                die("Database selection failed: ".mysql_error());
            }
        }
        mysql_query("set names utf8") or die("set names utf8 failed");
    }
   
    public function sql($query) {
        $result = mysql_query($query, $this->connection);
        if(!$result){
            die("Database query failed: ".mysql_error());
        }
        return $result;
    }
       
}


честно говоря не очень понятно, чего нужно добиться, попробуем разобраться, итак
в $p записывается: page_name или $_GET['p'],
эта строка:
$p = $main->print_main();
ничего не выведет, т.к. это присваивание а не вывод
так в чем проблема? что $p получается пустое или что $p не пустое но не выводится?
тогда в 1-м случае
либо этот запрос: SELECT page_name, position FROM buttons WHERE position = '0'
выдает пустую выборку (или там page_name не заполнено), либо GET параметр p - существует, но тоже пустой
во 2-м
нужно смотреть (писать?) код который делает вывод, а его здесь нет

Тут ничего не должно выводиться. $p просто содержит имя страницы которое используется при формировании url.

Вот что меня беспокоит:

HTML:
</head>
<body>
    <div class="container">
  <div class="header">
         
<div class="lang_buttons">

Пробел между header и lang_buttons выводится в браузере как пустая строка.
 
Позволил себе доработать класс:

PHP:
class Db extends Config {
    private $connection, $result;
 
    function __construct() {
        $this->open_connection();
    }
 
    private function open_connection()
    {
        $this->connection = mysql_connect($this->DB_HOST, $this->DB_USER, $this->DB_PASS) or die('SQL not connected: '  . mysql_error());
        $db_select        = mysql_select_db($this->DB_NAME, $this->connection) or die( mysql_error() );
   
        mysql_query("set names utf8") or die("set names utf8 failed");
    }
 
    public function sql($query)
    {
        $query = mysql_real_escape_string($query, $this->connection);
        return $this->result = mysql_query($query, $this->connection);
    }
 
    public function fetch()
    {
        if( is_resource($this->result) ) {
            return mysql_fetch_assoc($this->result);
        }
   
        return null;
    }
 
    public function fetch_all()
    {
        if( !is_resource($this->result) ) {
            return false;
        }
   
        $rows = $this->count();
        $_    = array();
   
        if($rows > 0) {
            for($j = 0; $j < $rows; $j++) {
                $_[] = mysql_fetch_assoc($this->result);
            }
        }
   
        return $_;
    }
 
    public function count()
    {
        return ( is_resource($this->result) ) ? mysql_num_rows($this->result) : 0;
    }
}

Теперь сам класс Main_page:

PHP:
class Main_page extends Db {
 
    public function get_main_page() {
        return $this->sql("SELECT * FROM buttons WHERE position = '0' LIMIT 1");
    }
 
    public function search_main() {
        $this->get_main_page();
        $row = $this->fetch();
 
        if( !empty( $row['page_name'] ) ) {
            return $row['page_name'];
        }
 
        return '';
    }
 
    public function print_main() {
        global $_GET;
 
        return ( array_key_exists('p', $_GET) ) ? $_GET['p'] : $this->search_main();
    }
}

Теперь два момента.
1. Если есть что-то в $_GET['p'] даже пробел... будет выведен он
2. Если есть запись в базе и в page_name что-то есть, то будет отображено оно если нед $_GET['p']

Если и это не поможет... вышлите мне код весь... я помогу разобраться
 
Пипец .Я лошара.
Спасибо всем кто откликнулся.Причина появления пробела оказалось проста. Это был символ что появляется в начале файла в кодировке UTF-8. Перекодировал в UTF-8 без бом, и всё заработало как надо.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху