Перейти к содержимому

Реферальная программа Мегаплана


  • Закрытая тема Тема закрыта

Почему ничего не выводит?

#1 alex159

alex159
  • Пользователь
  • 492 сообщений
  • Репутация: 32
-1

Отправлено 22 Август 2013 - 09:42

Прошу сильно не ругать, так как 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

#2 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 22 Август 2013 - 10:09

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

Как минимум ошибка в том, что функция ничего не возвращает, а должна возвращать результат запроса:
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; // возвращаем результат
}

  • 1


#3 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 22 Август 2013 - 10:30

Так ведь ретурна в методе нету. Выборка производится, но не возвращается результат.
  • 1
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#4 alex159

alex159
    Topic Starter
  • Пользователь
  • 492 сообщений
  • Репутация: 32

Отправлено 22 Август 2013 - 11:25

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

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


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

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

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

#5 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 22 Август 2013 - 11:35

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


#6 KirSl

KirSl
  • Пользователь
  • 24 сообщений
  • Репутация: 1

Отправлено 23 Август 2013 - 22:43

В зависимости где дальше данные использовать. Если, например, для вывода, например статью или товар какой-нибудь, то лучше использовать ассоциативный массив и выбор будет следующим:
// вместо 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: неудобный редактор кода..
  • 1

#7 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 24 Август 2013 - 16:15

Вообще-то в $value сваливается ассоциативный массив, когда форичем его обходишь.
  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#8 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 31 Август 2013 - 20:27

Уважаемый 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;
	 }

  • 1

#9 alex159

alex159
    Topic Starter
  • Пользователь
  • 492 сообщений
  • Репутация: 32

Отправлено 31 Август 2013 - 21:18

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

уже разобрался.
  • 0

#10 Sosnovskij

Sosnovskij
  • Администратор
  • 3 886 сообщений
  • Репутация: 566

Отправлено 02 Сентябрь 2013 - 10:08

alex159, в таком случае желательно писать, что проблема решена :)
  • 0

Не стесняйтесь ставить оценки темам :) Правила форума. Мой блог http://sosnovskij.ru/.



robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru