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

Сервис обмена электронных валют

Партнерская программа Kredov

Ничего не выводится после вызова метода

#1 Kuchuluk

Kuchuluk
  • Пользователь
  • 315 сообщений
  • Репутация: 5
0

Отправлено 02 Апрель 2013 - 21:04

вывожу аватар пользователя, используя два метода, первый метод он общий для выборки из таблицы базы
public function selAssoc($tb_name,$field,$where) // такая же ф-ция выборки из базы когда нужно вручную указывать параметр поиска возвращает массивом
{
  if (isset($where))
  {
   $query = "SELECT ".$field." FROM ".$tb_name." WHERE ".$where;
   $result = mysql_query($query) or die("".mysql_error());
   $data=array(); // объявляем массив
   for($i = 0; $i < mysql_num_rows($result); $i++)
   {
    $row = mysql_fetch_assoc($result);
    $data[]=$row;
   }
   return $data;
  }
  else
  {
   $query = "SELECT ".$field." FROM ".$tb_name;
   $result = mysql_query($query) or die("".mysql_error());
   for($i = 0; $i < mysql_num_rows($result); $i++)
   {
    $row = mysql_fetch_row($result);
    $data[]=$row;
   }
   return $data;
  }
}
второй метод выбирает конкретную аватарку, исходя из логина пользователя и формирует строку для тега img
public function selAva() // ф-ция для выбора аватарки - либо своей, если есть, либо системной (если нет своей)
{
  $ava = $this->selAssoc("avatars", "id, ava_name", "us_login = ".$_GET['login']." AND status = 2");
  if (!empty($ava))
  {
   $src = "avatars/".$ava[0]["id"].$ava[0]["ava_name"];
  }
  else
  {
   $src = "sys-images/no-avatar.gif";
  }
  return $src;
}
работу второго метода вывожу в теге
<div id="user_info_p2">
	  <img src="../party/<?php echo $us_info->selAva(); ?>">
	  <?php
	  if (isset($link_profile))
	  {echo "<br>".$link_profile;}
	  ?>
	 </div>
но после тега <div id="user_info_p2"> ничего в браузер не выводится. Сначала во втором методе я выбирал аватар по id пользователя, который находится в $_SESSION['id'] и все работало, но потом переделал, чтобы логин брался из массива GET, и началось. Ошибок никаких не выдает, а просто ничего не выводится. В чем может быть дело?

 

 

  • 0

#2 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 02 Апрель 2013 - 21:30

оно и не будет работать

$_GET['login']

это что такое? откуда ты берешь этот параметр?

вот в этой статье можешь почитать что такое GET и POST
  • 0

#3 html-ka

html-ka
  • Пользователь
  • 455 сообщений
  • Репутация: 82

Отправлено 03 Апрель 2013 - 14:57

дамп данных сделай и посмотри что там
  • 0

#4 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 03 Апрель 2013 - 18:27

чтобы логин брался из массива GET, и началось.

чтобы логин выводился из этого массива, он должен там быть, тоесть в адресной строке он должен быть. всегда

например, http://yoursite.com?login=somelogin
  • 0

#5 Kuchuluk

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

Отправлено 03 Апрель 2013 - 19:08

он там и так есть, как я по вашему тогда попадаю на страницу профиля пользователя? по его логину, который в $_GET["login"]


  • 0

#6 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 03 Апрель 2013 - 21:09

как то все у тебя запутанно получается, я бы рекомендовал испоьлзовать не логин, а айди

ну давай попробуем потестить вместе
1. Посмотрим, какой запрос отправляется в базу. В функции selAssoc после того как ты определишь запрос в базу, то есть после строчки

$query = "SELECT ".$field." FROM ".$tb_name." WHERE ".$where;
добавь
echo $query;

в результате запрос будет показан в браузере, выполни его в phpmyadmin и посмотри что возвращается

2. Функция selAva , после того, как получишь значение, после строчки
$ava = $this->selAssoc("avatars", "id, ava_name", "us_login = ".$_GET['login']." AND status = 2");
добавь такое
print_r($ava);
и посмотри , что есть в массиве

пока все, что могу посоветовать
  • 0

#7 html-ka

html-ka
  • Пользователь
  • 455 сообщений
  • Репутация: 82

Отправлено 04 Апрель 2013 - 05:47

Kuchuluk, мой тебе совет, бросай ты ООП, а лучше выучи хорошо для начала процедерное программирование, судя по коду ты даже в мануал не заглядывал :mellow: навскидку:

вот это зачем передавать в selAva?
$ava = $this->selAssoc("avatars", "id, ava_name", "us_login = ".$_GET['login']." AND status = 2");

дальше без слез не посмотришь, практически классическая sql-injection
"us_login = ".$_GET['login']."

а это что?
for($i = 0; $i < mysql_num_rows($result); $i++)

масло маслянное
    $row = mysql_fetch_assoc($result);
    $data[]=$row;

  • 0

#8 fedornabilkin

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

Отправлено 04 Апрель 2013 - 08:51

Ошибки у ТС конечно ужасные, но это не повод давать плохие рекомендаици.
html-ka, если критикуешь, то следом давай уже и пиши как надо сделать правильно.
Например обработать данные из $_GET строковыми функциями (экранировать спецсимволы, удалить теги и т.д.)

for($i = 0; $i < mysql_num_rows($result); $i++)

так действительно делать нехорошо, потому что количество запросов будет равно количеству строк, поэтому лучше сначала подсчитать количество строк, присвоить значение переменной и сравнивать в цикле с переменной.

$num_rows = mysql_num_rows($result);
for($i = 0; $i < $num_rows; $i++)

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


#9 html-ka

html-ka
  • Пользователь
  • 455 сообщений
  • Репутация: 82

Отправлено 04 Апрель 2013 - 11:39

Ошибки у ТС конечно ужасные, но это не повод давать плохие рекомендаици.

и чем же они плохи?

fedornabilkin, если критикуешь, то следом давай уже и пиши как надо сделать правильно :mellow:

так действительно делать нехорошо, потому что количество запросов будет равно количеству строк, поэтому лучше сначала подсчитать количество строк, присвоить значение переменной и сравнивать в цикле с переменной.

Например вот так.

$num_rows = mysql_num_rows($result);
for($i = 0; $i < $num_rows; $i++)

а чем твое решение лучше ТС?

Походу собирается клуб нелюителей оф.документации :)

А чем вам while не угодил?

Причем в первом условии цикл вообще не нужен, если логин является уникальным

if (isset($where))
это тоже очень странная конструкция, она всегда будет объявлена и не пустая, исходя из этого $ava = $this->selAssoc("avatars", "id, ava_name", "us_login = ".$_GET['login']." AND status = 2");
вторая часть условия вообще будет не нужна
  • 1

#10 fedornabilkin

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

Отправлено 04 Апрель 2013 - 13:11

html-ka, я же написал, что правильно и выгодно сделать один запрос к бд и получить количество записей, а не обращаться каждый раз, с каждой итерацией.
while конечно же удобнее, но почему-то мне кажется тут вообще цикл не нужен.
Если надо получить аватар пользователя, то и получаем один аватар, т.е. делаем запрос по айди или логину.
А если надо вывести список аватаров, то тогда уже циклы и тот же while. Но я думаю это обычная процедура и написание метода для класса вобще неуместно.
  • 1
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


robot

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


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