X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Почему ничего не выводит?
alex159
alex159
Topic Starter сообщение 22.8.2013, 10:42; Ответить: alex159
Сообщение #1


Прошу сильно не ругать, так как php я очень плохо знаю. И пытаюсь что то делать, как могу.

Есть такой класс

class db {
public function connect() {
include ("$siteUrl"."core/config.php");
$select_db = mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
  }

public function select($chto,$table,$where) {
if($where != " ") {
$result = mysql_query("SELECT $chto FROM $table WHERE $where") or die("MySql error w!".mysql_error());
$myrow = mysql_fetch_array($result);
}
   else{
   $result = mysql_query("SELECT $chto FROM $table") or die("MySql error!".mysql_error());
   $myrow = mysql_fetch_array($result);
   }
     }

           }
$db = new db();


К примеру хочу вывести с таблицы значение ячейки "status".

echo $db->connect();
echo $db->select("status","seting"," ");
echo $myrow['status'];


Ни, ошибки не выдает, и не чего не выводит.

Прошу помочь, где ошибка. Или как правильно сделать эти 2 функции + потом хочу добавить функцию редактирования и удаления.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 22.8.2013, 11:09; Ответить: matroskin8
Сообщение #2


Прошу помочь, где ошибка

Как минимум ошибка в том, что функция ничего не возвращает, а должна возвращать результат запроса:
public function select($chto,$table,$where) {
if($where != " ") {
  $result = mysql_query("SELECT $chto FROM $table WHERE $where") or die("MySql error w!".mysql_error());
  $myrow = mysql_fetch_array($result);
}
else{
  $result = mysql_query("SELECT $chto FROM $table") or die("MySql error!".mysql_error());
  $myrow = mysql_fetch_array($result);
}
return $myrow; // возвращаем результат
}
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
сообщение 22.8.2013, 11:30; Ответить: fedornabilkin
Сообщение #3


Так ведь ретурна в методе нету. Выборка производится, но не возвращается результат.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alex159
alex159
Topic Starter сообщение 22.8.2013, 12:25; Ответить: alex159
Сообщение #4


Так ведь ретурна в методе нету. Выборка производится, но не возвращается результат.

Как минимум ошибка в том, что функция ничего не возвращает, а должна возвращать результат запроса:


Спасибо, я в классах и функциях слаб. Вот и учусь.

Теперь все обрабатываеться, но выводиться вместо этого "Array". Можете подсказать как правильно реализовать эту функцию?

Считывания данных с базы. Я хочу потом это использовать в шаблоне. Что бы каждый раз не писать такое
  $result = mysql_query("SELECT $chto FROM $table") or die("MySql error!".mysql_error());
  $myrow = mysql_fetch_array($result);

А просто вывести функцию с нужными мне параметрами.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
сообщение 22.8.2013, 12:35; Ответить: fedornabilkin
Сообщение #5


Массив и должен возвращаться.
Далее циклом можно обойти массив и сформировать контент.
Проверяем, наличие массива и обрабатываем
if(is_array($array)){
    foreach($array as $row){
        $list .= '<p>'.$row['id'].'</p>';
    }
}
echo $list;

$array - это то, что возвратит метод
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
KirSl_hb
KirSl_hb
сообщение 23.8.2013, 23:43; Ответить: KirSl_hb
Сообщение #6


В зависимости где дальше данные использовать. Если, например, для вывода, например статью или товар какой-нибудь, то лучше использовать ассоциативный массив и выбор будет следующим:
// вместо mysql_fetch_array -> mysql_fetch_assoc
// завернули одно в другое, в $result сразу массив будет
// Конструкция or die() хороша при отладке, но для проекта лучше использовать готовый класс или заготовить в таких местах условие на случай для польователя и продакшна
$result = mysql_fetch_assoc(mysql_query("SELECT $chto FROM $table")) or die("MySql error!".mysql_error());

if(!$result)
    echo 'Запрашиваемых данных в базе не обнаружено'; //написать можно что угодно. Это увидит пользователь, если по какой-то причине запрос не сработает

// Далее массив будет вида
// [0] => Array('key1' => 'value');
// Разобрать его на 2 составляющие. Если нужны ключи. Если нет, разбираем как foreach($result as $value)
foreach($result as $key => $value)
{
    $key .= '<p>'. $key .'</p>';
    $value .= '<p>'. $value .'</p>';
}


PS: неудобный редактор кода..
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
сообщение 24.8.2013, 17:15; Ответить: fedornabilkin
Сообщение #7


Вообще-то в $value сваливается ассоциативный массив, когда форичем его обходишь.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
c0ns0l3
c0ns0l3
сообщение 31.8.2013, 21:27; Ответить: c0ns0l3
Сообщение #8


Уважаемый [member=alex159], Вам нужно понять в 1ю очередь сам смысл работы классов и "видимость" переменных.

<?php
<?php
/**
* @author c0ns0l3
* @copyright 2013
*/

class db {
  
  private $dbh;
  private $result;
        private $last_query;
        private $out;
      
        public $count;

  /**
   * db::__construct()
   *
   * @param mixed $host
   * @param mixed $login
   * @param mixed $psw
   * @param mixed $db
   * @return
   */
  public function __construct($host,$login,$psw,$db) {
            #Здесь сохраняем в классе линк на соединение
   $this->dbh = @mysql_connect($host,$login,$psw,$db);
          
            #Проверям установку соединения
   if(!$this->dbh) {
    echo 'Error connecting to MYSQL SERVER';
                die();
    return false;
   }
            #Выбираем БД и проверям процедуру
            if(!mysql_select_db($db,$this->dbh)) {
                echo 'Error selecting DB on MYSQL SERVER';
                die(); #Если надо вообще завершить код
                return false;
            }
            return true;
  }
      
      
        /**
         * db::query()
         *
         * @param mixed $query
         * @return
         */
        private function query ($query) {
            #Затычка на повторный вызов
            if($this->last_query == $query)
                return $this->result;
          
            $result = @mysql_query($query,$this->dbh);
            if(!$result)
                return false;
              
          
            #Очищаем временные переменные
                $this->out = array();
                $this->last_query = $query;
            #Сохраняем в лкассе результаты запроса (mysql resource)
                $this->result = $result;
            #Возвращаем результат (вдруг понадобится)
                return $result;
        }
      
        /**
         * db::get_results()
         *
         * @param mixed $query
         * @return
         */
        public function get_results($query = null) {
            //Затычки
            if(is_null($query))
                return false;
            //Обрабатываем запрос  
            $this->query($query);
            //Проверка ответа
            if(!$this->result)
                return false;
              
            //Считаем количество строк ( на случай если хочешь работать с объектами)
            $num_rows = 0;
            // тот самый случай while( $row = @mysql_fetch_object ( $this->result ) ) {
            while( $row = @mysql_fetch_array ( $this->result ) ) {
          $this->out[$num_rows] = $row;
          $num_rows++;
      }
            //Сохраням количество строк
            $this->count = $num_rows;
            //Возвращаем массив с данными
            return $this->out;
        }
      
      
        /**
         * db::get_last_result()
         *
         * @return
         */
        public function  get_last_result() {
            if(is_array($this->out))
                return $this->out;
            return false;
        }
}
?>


Используем соответственно:
$mysql = new db('host','username','password','db_name');
    $users = $mysql->get_results('SELECT * FROM users WHERE 1 = 1');
   echo $users->count; //количество найденных пользователей
    //$users = будет уже массив данных


А это кусок из моего класса, с которым работаю на данный момент, правда под M$ SQL..

/**
         * Получение всех данных из запроса
         * @param string $query
         * @param string $output (OBJECT,ARRAY_Y,ARRAY_N)
         * @return mixed
         * */
        function get_results( $query = null, $output = 'OBJECT' ) {
    
  
      if ( $query )
       $this->query( $query );
      else
       return null;
  
      $new_array = array();
          
      if ( $output == 'OBJECT' ) {
       return $this->last_result;
      } elseif ( $output == 'OBJECT_K' ) {
       foreach ( $this->last_result as $row ) {
        $var_by_ref = get_object_vars( $row );
        $key = array_shift( $var_by_ref );
        if ( ! isset( $new_array[ $key ] ) )
         $new_array[ $key ] = $row;
       }
       return $new_array;
      } elseif ( $output == 'ARRAY_A' || $output == 'ARRAY_N' ) {
       if ( $this->last_result ) {
        foreach( (array) $this->last_result as $row ) {
         if ( $output == 'ARRAY_N' ) {
          $new_array[] = array_values( get_object_vars( $row ) );
         } else {        
          $new_array[] = get_object_vars( $row );
         }
        }
       }
       return $new_array;
      }
      return null;
     }


private function query( $query ) {
            $query = iconv('utf-8','windows-1251',$query);
      if ( count($this->exception) )
       return false;
              
            $query = $this->prepare_db($query);
  
      $return_val = 0;
      $this->flush();
  
      $this->last_query = $query;
  
      if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES )
       $this->timer_start();
  
      $this->result = @mssql_query( $query, $this->dbh );
          
            $this->queries[] = $query;
                
                
            if(!$this->result) {              
                return new ADK_Error(new Exception(mssql_get_last_message()),true);
            }
      if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES )
       $this->queries[] = array( $query, $this->timer_stop(), $this->get_caller() );
  
  
      if ( preg_match( '/^s*(create|alter|truncate|drop)s/i', $query ) ) {
       $return_val = $this->result;
      } elseif ( preg_match( '/^s*(insert|delete|update|replace)s/i', $query ) ) {
       $this->rows_affected = mssql_rows_affected ( $this->dbh );
       if ( preg_match( '/^s*(insert|replace)s/i', $query ) ) {
        //TODO: how to find inserted PK in MSSQL? oO
       }
       // Return number of rows affected
       $return_val = $this->rows_affected;
      } else {
       $num_rows = 0;
       while ( $row = @mssql_fetch_object ( $this->result ) ) {
           array_walk($row,array($this,'convert_to_utf8'));
        $this->last_result[$num_rows] = $row;
        $num_rows++;
       }
  
       // Log number of rows the query returned
       // and return number of rows selected
       $this->num_rows = $num_rows;
       $return_val     = $num_rows;
      }
  
      return $return_val;
     }
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alex159
alex159
Topic Starter сообщение 31.8.2013, 22:18; Ответить: alex159
Сообщение #9


[member=c0ns0l3], большое спасибо, но с дня создания темы прошло 8 дней.

уже разобрался.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sosnovskij
sosnovskij
сообщение 2.9.2013, 11:08; Ответить: sosnovskij
Сообщение #10


[member=alex159], в таком случае желательно писать, что проблема решена :)


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыПочему нельзя давать рекламу на бренд?
6 Bilish 1318 12.1.2020, 13:47
автор: BLIK
Открытая тема (нет новых ответов) Почему стоит выбрать именно Berileads?
2 leadkreditrf 1820 27.11.2019, 12:39
автор: -leadkreditrf-
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыПочему слайдер не работает в IE ?
1 GTAlex 1380 2.11.2016, 11:53
автор: BLIK
Горячая тема (нет новых ответов) Почему мой контент называют Королевским?
Продающие тексты и SEO-статьи роскошного качества за 1-2 дня
36 Octavodia 12882 22.10.2015, 18:19
автор: grumdas
Открытая тема (нет новых ответов) "Почему так дешево?" Рерайт/Копирайт.
Качественный контент по низким ценам!
17 Vadim_text 6133 9.10.2015, 15:23
автор: Octavodia


 



RSS Текстовая версия Сейчас: 29.3.2024, 19:18
Дизайн