Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: неработает цикл

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
imper
Отправлено: 02 Ноября, 2012 - 10:53:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


здравствуйте Ребят!
Голливудская улыбкаD решил попрактиковаться с ООП и не пойму в чём проблема уже два дня голову ломаю.

вот код класса

PHP:
скопировать код в буфер обмена
  1. Class DB {
  2. protected $db_name = 'ххх';
  3.     protected $db_user = 'ххх';
  4.     protected $db_pass = 'ххх';
  5.     protected $db_host = 'ххх';
  6.  
  7. //соединение
  8.     function mysql_connect(){
  9.         $query = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
  10.         mysql_select_db($this->db_name);
  11.         return true;
  12.     }
  13.  
  14. //вот здесь этот цикл совершает только одну итерацию хоть убей я и просто число вгонял //вместо $rows хотя я проверял внутри цмкла и снаружи $rows = 3 так как 3 строки в БД )
  15.  
  16. function vivod_db($resurs){
  17.             $rows = mysql_num_rows($resurs);
  18.             $vivod = array();
  19.         for($j=0; $j<$rows; ++$j)
  20. {
  21.      $row = mysql_fetch_row($resurs);
  22.      $vivod = "$row[0],$row[1]";
  23.      //array_push($vivod,$row);
  24.      return $vivod;
  25. }
  26.  
  27.     }
  28.  
  29. //вот здесь собственно сам запрос и вызов метода vivod_db($result)с результатом запроса
  30. function select_db($table){
  31.         $query = "SELECT * FROM $table";
  32.         $result = mysql_query($query);
  33.         return $this->vivod_db($result);
  34.     }
  35.    
  36. }



вот создание объекта
PHP:
скопировать код в буфер обмена
  1. $db = new DB;
  2. $db->mysql_connect();
  3. print_r( $db->select_db('content'));



я как только не пробовал но всё равно одну итерацию совершает
помогите пожалуйста, или укажите на ошибку а то уже незнаю как это так
(Добавление)
выводит всегда только первую запись в БД *

а если возвратить в методе vivod_db()
vivod[1] пусто Недовольство, огорчение

(Отредактировано автором: 02 Ноября, 2012 - 10:54:45)



-----
Самое лучшее решение проблемы
самое простое
 
 Top
dubasua
Отправлено: 02 Ноября, 2012 - 10:57:31
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




imper пишет:
//соединение
    function mysql_connect(){
        $query = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
        mysql_select_db($this->db_name);
        return true;
    }


Попробуй для начала метод переименовать, например назови его ms_connect()
 
 Top
eai
Отправлено: 02 Ноября, 2012 - 10:58:51
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




А че так счаз не модно что ли ?

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. while( $row = mysql_fetch_row($resurs))
  4. {
  5. ///////////
  6. }
  7.  
  8.  
  9.  
 
 Top
EuGen Администратор
Отправлено: 02 Ноября, 2012 - 11:00:55
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




imper пишет:
function vivod_db($resurs){
$rows = mysql_num_rows($resurs);
$vivod = array();
for($j=0; $j<$rows; ++$j)
{
$row = mysql_fetch_row($resurs);
$vivod = "$row[0],$row[1]";
//array_push($vivod,$row);
return $vivod;
}

оно и понятно, ведь Вы перезаписываете каждый раз (в каждой итерации). Переделать можно так (оригинальные названия сохранены):
CODE (php):
скопировать код в буфер обмена
  1. function vivod_db($resurs)
  2. {
  3.    $vivod = array();
  4.    while($row=mysql_fetch_array($resurs))
  5.    {
  6.       $vivod[]=$row;
  7.    };
  8.    return $vivod;
  9. }

Названия все же переделайте. С таким неймспейсингом (точнее, отсутствии его) работать дальше будет трудно.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
imper
Отправлено: 02 Ноября, 2012 - 11:02:11
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


eai пишет:
А че так счаз не модно что ли ?

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. while( $row = mysql_fetch_row($resurs))
  4. {
  5. ///////////
  6. }
  7.  
  8.  
  9.  


Так пробовал всё равно одна итерация (


-----
Самое лучшее решение проблемы
самое простое
 
 Top
dubasua
Отправлено: 02 Ноября, 2012 - 11:04:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




EuGen пишет:
 {
      $vivod[]=$row;
   };


А что там точка с запятой делает? После фигурной скобки.

(Отредактировано автором: 02 Ноября, 2012 - 11:04:38)

 
 Top
imper
Отправлено: 02 Ноября, 2012 - 11:05:09
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


EuGen пишет:
imper пишет:
function vivod_db($resurs){
$rows = mysql_num_rows($resurs);
$vivod = array();
for($j=0; $j<$rows; ++$j)
{
$row = mysql_fetch_row($resurs);
$vivod = "$row[0],$row[1]";
//array_push($vivod,$row);
return $vivod;
}

оно и понятно, ведь Вы перезаписываете каждый раз (в каждой итерации). Переделать можно так (оригинальные названия сохранены):
CODE (php):
скопировать код в буфер обмена
  1. function vivod_db($resurs)
  2. {
  3.    $vivod = array();
  4.    while($row=mysql_fetch_array($resurs))
  5.    {
  6.       $vivod[]=$row;
  7.    };
  8.    return $vivod;
  9. }

Названия все же переделайте. С таким неймспейсингом (точнее, отсутствии его) работать дальше будет трудно.



да, спасибо сработало =-)


-----
Самое лучшее решение проблемы
самое простое
 
 Top
imper
Отправлено: 05 Ноября, 2012 - 19:44:48
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


Помог: 2 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1. function vivod_db($resurs)
  2. {
  3.    $vivod = array();
  4.    while($row=mysql_fetch_array($resurs))
  5.    {
  6.       $vivod[]=$row;
  7.    };
  8.    return $vivod;
  9. }


//маленькая поправочка, в массиве все строки дублируются (по два раза показываются)
//вот так прям всё чОтко всё Улыбка

PHP:
скопировать код в буфер обмена
  1.  function vivod_db($resurs)
  2.    {
  3.    $rows = mysql_num_rows($resurs);
  4.    $vivod = array();
  5.    while($row=mysql_fetch_array($resurs, MYSQL_NUM))
  6.    { $vivod[]=$row; }
  7.     return $vivod;
  8.    }


-----
Самое лучшее решение проблемы
самое простое
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB