Перейти к контенту
  • 0

Проблема со списком пользователей


Kallstrem

Вопрос

Вообщем когда захожу в Пользователи (здесь это вот: http://www.ibresource.ru/forums/index.php?act=Members), у меня отображается на каждой странице только 1 пользователь. Не отображаются 9 т.е. Какое число ни поставь внизу.

 

Но мне не надо исправлять, вы скажите вообще из какого файла берется скрипт для отображения?

 

Я писал мод и редактировал вот эти файлы:

sources\action_admin\member.php

sources\action_admin\rebuild.php

sources\action_public\moderate.php

sources\action_public\profile.php

sources\action_public\topics.php

sources\classes\class_session.php

sources\classes\post\class_post_edit.php

sources\classes\post\class_post_new.php

sources\classes\post\class_post_reply.php

sources\lib\func_mod.php

sources\sql\mysql_queries.php

sources\ipsclass.php

 

в каком из них искать ошибочку?

 

Спасибо заранее.

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Хм в этом може есть в нескольких местах корректировка запросов

вот по иструкции и проверь где ты накосячил.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Так, вот скрины:

В первом скрине отображается только 1 человек, хотя должно быть 10. Во втором показывается "Последние сообщения пользователя", должно показываться 20, а показывается 1.

http://g.foto.radikal.ru/0610/b87ee1397e00t.jpg

 

http://g.foto.radikal.ru/0610/e2a0430389f6t.jpg

 

Я нашел файл, где ошибка (если загружаю не измененный - все ок, если измененный - появляется этот баг).

Вот отрывок из инструкции:

 

//-------------------------------------------------
// sources\action_public\topics.php
//-------------------------------------------------

================================================================================
НАЙТИ:
------
			$member['member_joined'] = $this->ipsclass->compiled_templates['skin_topic']->member_joined( $this->ipsclass->get_date( $member['joined'], 'JOINED' ) );

			$member['member_group']  = $this->ipsclass->compiled_templates['skin_topic']->member_group( $this->ipsclass->cache['group_cache'][ $member['mgroup'] ]['g_title'] );

			$member['member_posts']  = $this->ipsclass->compiled_templates['skin_topic']->member_posts( $this->ipsclass->do_number_format($member['posts']) );
---------------
ДОБАВИТЬ ПОСЛЕ:
---------------
			switch($this->ipsclass->vars['wcm_showtopic']){
					case 'total':
							$words_val = $member['total_words'];
							$member['member_wordstat'] = $this->ipsclass->lang['words_total'].$words_val;
							break;
					case 'perday':
							$words_val = $member['total_words'] / ceil((time() - $member['joined']) / (3600*24));
							$member['member_wordstat'] = sprintf($this->ipsclass->lang['words_perday']."%.1f", $words_val);
							break;
					case 'perpost':
							$this->ipsclass->DB->simple_construct( array( 'select' => 'COUNT(*) as total_posts',
																													  'from'   => 'posts',
																													  'where'  => "author_id={$member['id']}" ) );
							$this->ipsclass->DB->simple_exec();

							$total_posts = $this->ipsclass->DB->fetch_row();

							$words_val = $member['total_words'] / $total_posts['total_posts'];
							$member['member_wordstat'] = sprintf($this->ipsclass->lang['words_perpost']."%.1f", $words_val);
						   ;
			}

			if ( $this->ipsclass->vars['wcm_showgraph'] && $this->ipsclass->vars['wcm_graph_levels'] )
			{
					$pips = 0;
					$levels = explode(',', $this->ipsclass->vars['wcm_graph_levels']);

					for ($i = count($levels)-1; $i >= 0; $i--)
					{
							if ($words_val >= $levels[$i])
							{
								$pips = $i+1;
								break;
							}
					}

					if ($pips)
					{
						for ($i = 1; $i <= $pips; ++$i)
						{
							$member['member_words_rank'] .= "<{A_STAR}>";
						}
						$member['member_words_rank'] .= "<br />";
					}
			}
==================================================================

 

Где то здесь эта ошибочка. Найдите пожалуста!

 

Еще нашел:

Если из этого шага убрать эти строчки:

 

								$this->ipsclass->DB->simple_exec();

							$total_posts = $this->ipsclass->DB->fetch_row();

 

То отображается все нормально, но зато исчезает статистика слов + сверху появляется такое:

 

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

 

 

к слову если убрать одну строчку, то отображается только 5 пользователей (хотя я запрашиваю 10), и строк тоже пять сверху:

 

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

IPB WARNING [2] Division by zero (Line: 1094 of /sources/action_public/topics.php)

 

 

ПОМОГИТЕ!!!!!!!

Ссылка на комментарий
Поделиться на других сайтах

  • 0

На странице Member List

В самом верху: IPB WARNING [2] Division by zero (Line: 1237 of \sources\action_public\topics.php)

 

+Когда прошу вывести всех пользователей или просто пользователей, страница работает некорректно...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Попробуй:

 

memberlist.php

		//-----------------------------------------
	// START THE LISTING
	//-----------------------------------------

	if ( $max['total_members'] > 0 )
	{
		$this->ipsclass->DB->cache_add_query( 'mlist_get_members', array( 'query'   => $query_string,
																		  'sort'	=> $this->sort_key,
																		  'order'   => $this->sort_order,
																		  'limit_a' => $this->first,
																		  'limit_b' => $this->max_results ) );
		$this->ipsclass->DB->cache_exec_query();

		while ($member = $this->ipsclass->DB->fetch_row() )
		{

поменять на:

		//-----------------------------------------
	// START THE LISTING
	//-----------------------------------------

	if ( $max['total_members'] > 0 )
	{
		$this->ipsclass->DB->cache_add_query( 'mlist_get_members', array( 'query'   => $query_string,
																		  'sort'	=> $this->sort_key,
																		  'order'   => $this->sort_order,
																		  'limit_a' => $this->first,
																		  'limit_b' => $this->max_results ) );
		$song = $this->ipsclass->DB->cache_exec_query();

		while ($member = $this->ipsclass->DB->fetch_row($song) )
		{

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Большое спасибо, списки вроде бы стали отображаться корректно, но сверху все равно все еще висит сообщение про ошибку:

IPB WARNING [2] Division by zero (Line: 1237 of \sources\action_public\topics.php)
IPB WARNING [2] Division by zero (Line: 1237 of \sources\action_public\topics.php)

А вот строка на которую ругается мемберлист:

 $words_val = $member['total_words'] / $total_posts['total_posts'];

Насколько я понял, форуму не нравится, что у пользователей, которые не написали ни одного сообшения, 0 делиться на 0. Думаю, достаточно прибавить ко второму параметру (кол-ву сообщений) 0,0001 и все будет работать корректно, но я не знаю, как это правильно с точки зрения синтаксиса сделать.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
$total_posts['total_posts'] = ( $total_posts['total_posts'] ) ? $total_posts['total_posts'] : $total_posts['total_posts'] + 1;

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Спасибо, но куда это впихивать? Над строкой 1237 (в моем случае)?

И еще вопрос: нельзя ли прибавлять не натуральное число, а десятичную дробь для того, чтоб не сильно влиять на точность подсчета? Хотя это не слишком принципиально. Спасибо за твою помощь!

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Спасибо, но куда это впихивать?

Перед

$words_val = $member['total_words'] / $total_posts['total_posts'];

И еще вопрос: нельзя ли прибавлять не натуральное число, а десятичную дробь для того, чтоб не сильно влиять на точность подсчета?

Прибавляй чего хочешь, ты ж сам себе хозяин :D

Тебе главное чтобы не было деление на 0.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Большое спасибо!

P.S. Просто я думал, что данной переменной возможно просто нельзя присваивать значение не натурального числа.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
В php это не важно. Сколько прибавите такой тип переменной и будет
Ссылка на комментарий
Поделиться на других сайтах

  • 0

В принципе, про это я немного читал, но я думал, что возможно после этого кол-ва сообщений всех пользователей отображались б не в виде целых чисел, но, на сколько я уже тестировал, все отображается корректно. Надеюсь, все баги данного мода исправлены.

P.S. Насколько я знаю, этикет в интернете позволяет ко всем не зависимо от возраста обращаться на "ты", по этому я несколько смущен, когда ко мне обращаются на "вы", тем более я почти уверен, что я тебя младше. :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Сам мод не очень. Делать запросы в часто вызываемой функции - это очень плохо. Получается что у тебя делается по запросу на одного листаемого чувака.
Ссылка на комментарий
Поделиться на других сайтах

  • 0
Фактически, мой форум пока что существует только на локалке, в интернете он появится только после окончания работ над ним, и я думаю, что на первых порах это не будет проблемой, пока форум не раскрутиться (если), ну естественно, если я замечу, что пользователей стает все больше и больше, а форум работает все медленней и медленней, тогда первых, что я сделаю- удалю этот мод. Спасибо за предупреждение!
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Возник еще один вопрос. Не знаю, связана моя новообнаруженная проблема с этим модом или нет, но все же задам вопрос в эту тему.

Когда я захожу в профиль любого участника и нажимаю "Найти сообщения пользователя", показывается только одно- последнее сообщение. Также не показывается кол-во страниц. Помогите, пожалуйста!

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Из той же серии.. этот мод вам всё напортил..

Лучше бы убрал ты этот мод, потому что хвостов ты от него ещё много имхо найдёшь.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

как-то так:

search.php

		if ($this->result_type == 'topics')
	{
		//-----------------------------------------
		// CACHED QUERY?
		//-----------------------------------------

		if ( $this->cached_query )
		{
			$this->output .= $this->start_page($this->cached_matches);

			$this->ipsclass->DB->prefix_changed = 1;
			$song = $this->ipsclass->DB->query( $this->cached_query );
			$this->ipsclass->DB->prefix_changed = 0;
		}
		//-----------------------------------------
		// PID / TID
		//-----------------------------------------

		else if ($this->search_in == 'titles')
		{
			if ( ! $topics )
			{
				$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_search_results' ) );
			}

			$this->output .= $this->start_page($topic_max_hits);

			$this->ipsclass->DB->simple_construct( array( 'select' => 't.*',
														  'from'   => 'topics t',
														  'where'  => "t.tid IN({$topics})",
														  'order'  => "t.pinned DESC, t.".$this->sort_key." ".$this->sort_order,
														  'limit'  => array( $this->first, 25 )
												 )	  );
			$song = $this->ipsclass->DB->simple_exec();
		}
		else
		{
			//-----------------------------------------
			// Add posts to the mix
			//-----------------------------------------

			if ($posts)
			{
				$this->ipsclass->DB->simple_construct( array( 'select' => 'topic_id', 'from' => 'posts', 'where' => "pid IN({$posts})" ) );
				$this->ipsclass->DB->simple_exec();

				while ( $pr = $this->ipsclass->DB->fetch_row() )
				{
					$topic_array[ $pr['topic_id'] ] = $pr['topic_id'];
				}

				$topics		 = implode( ",", $topic_array );
				$topic_max_hits = count( $topic_array );
			}

			$this->output .= $this->start_page($topic_max_hits);

			$this->ipsclass->DB->simple_construct( array( 'select' => 't.*',
														  'from'   => 'topics t',
														  'where'  => "t.tid IN({$topics})",
														  'order'  => "t.pinned DESC, t.".$this->sort_key." ".$this->sort_order,
														  'limit'  => array( $this->first, 25 )
												 )	  );
			$song = $this->ipsclass->DB->simple_exec();
		}

		//-----------------------------------------
		// PRINT: Any returned rows?
		//-----------------------------------------

		if ( $this->ipsclass->DB->get_num_rows() )
		{
			while ( $row = $this->ipsclass->DB->fetch_row() )
			{
				$row['keywords'] = $url_words;
				$this->output   .= $this->ipsclass->compiled_templates['skin_search']->RenderRow( $this->parse_entry($row) );

			}
		}
		else
		{
			if ( ! $this->ipsclass->input['lastdate'] )
			{
				$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_search_results' ) );
			}
			else
			{
				$this->output .= $this->ipsclass->compiled_templates['skin_search']->no_results_row(); 
			}
		}

		//-----------------------------------------
		// PRINT: End the page
		//-----------------------------------------

		$this->output .= $this->ipsclass->compiled_templates['skin_search']->end_results_table(array( 'SHOW_PAGES' => $this->links ));
	}

	//-----------------------------------------
	// Results as posts...
	//-----------------------------------------

	else
	{
		//-----------------------------------------
		// Grab topic lib
		//-----------------------------------------

		require_once( ROOT_PATH.'sources/action_public/topics.php' );
		$this->topics = new topics();
		$this->topics->ipsclass =& $this->ipsclass;
		$this->topics->topic_init();

		$attach_pids = array();

		//-----------------------------------------
		// CACHED QUERY?
		//-----------------------------------------

		if ( $this->cached_query )
		{
			$this->output .= $this->start_page($this->cached_matches, 1);

			$song = $this->ipsclass->DB->query( $this->cached_query );
		}
		//-----------------------------------------
		// PID / TID
		//-----------------------------------------

		else
		{
			//-----------------------------------------
			// Start...
			//-----------------------------------------

			if ($this->search_in == 'titles')
			{
				if ( ! $topics )
				{
					$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_search_results' ) );
				}

				$this->output .= $this->start_page($topic_max_hits, 1);

				$this->ipsclass->DB->cache_add_query( 'search_main_in_titles', array( 'topics' => $topics, 'limit_a' => $this->first ) );
				$song = $this->ipsclass->DB->cache_exec_query();
			}
			else
			{
				//-----------------------------------------
				// Add Topics
				//-----------------------------------------

				if ( $topics )
				{
					$this->ipsclass->DB->simple_construct( array( 'select' => 'pid', 'from' => 'posts', 'where' => "topic_id IN({$topics}) AND new_topic=1" ) );
					$this->ipsclass->DB->simple_exec();

					while ( $pr = $this->ipsclass->DB->fetch_row() )
					{
						$post_array[ $pr['pid'] ] = $pr['pid'];
					}

					$posts		 = implode( ",", $post_array );
					$post_max_hits = count( $post_array );
				}

				$this->output .= $this->start_page($post_max_hits, 1);

				$this->ipsclass->DB->cache_add_query( 'search_main_in_posts', array( 'posts' => $posts, 'limit_a' => $this->first ) );
				$song = $this->ipsclass->DB->cache_exec_query();
			}
		}

		while ( $row = $this->ipsclass->DB->fetch_row($song) )
		{

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Спасибо, то есть нужно искать

		if ($this->result_type == 'topics')

и начиная с этого кода заменять на твой, вот только до какого кода?

 

P.S. Я теперь наглядно понимаю, что нужно самому серьезно вычить php (и связанные с ним языки программирования и синтаксис баз данных), и писать модификицаии для себя самостоятельно, ибо я, установив приблизительно сотню модификаций и обнаружив серьезную проблему, просто уже иногда не знаю, что делать. А модификации Dean'а- это вообще верх безграмотности, ибо почти каждая модификация в его исполнении, которую я устанавливаю, содержит серьезные недоработки, которые он даже не думает исправлять.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
вот только до какого кода?

ну соответственно до

while ( $row = $this->ipsclass->DB->fetch_row

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.