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
Форумы портала PHP.SU :: Версия для печати :: неработает цикл
Форумы портала PHP.SU » » Вопросы новичков » неработает цикл

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

1. imper - 02 Ноября, 2012 - 10:53:40 - перейти к сообщению
здравствуйте Ребят!
Голливудская улыбка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] пусто Недовольство, огорчение
2. dubasua - 02 Ноября, 2012 - 10:57:31 - перейти к сообщению
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()
3. eai - 02 Ноября, 2012 - 10:58:51 - перейти к сообщению
А че так счаз не модно что ли ?

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. while( $row = mysql_fetch_row($resurs))
  4. {
  5. ///////////
  6. }
  7.  
  8.  
  9.  
4. EuGen - 02 Ноября, 2012 - 11:00:55 - перейти к сообщению
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. }

Названия все же переделайте. С таким неймспейсингом (точнее, отсутствии его) работать дальше будет трудно.
5. imper - 02 Ноября, 2012 - 11:02:11 - перейти к сообщению
eai пишет:
А че так счаз не модно что ли ?

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


Так пробовал всё равно одна итерация (
6. dubasua - 02 Ноября, 2012 - 11:04:01 - перейти к сообщению
EuGen пишет:
 {
      $vivod[]=$row;
   };


А что там точка с запятой делает? После фигурной скобки.
7. imper - 02 Ноября, 2012 - 11:05:09 - перейти к сообщению
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. }

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



да, спасибо сработало =-)
8. imper - 05 Ноября, 2012 - 19:44:48 - перейти к сообщению
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.    }

 

Powered by ExBB FM 1.0 RC1