Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2012, 15:36   #1
Ibanez Wizard
Адский тунеядец
Форумчанин
 
Аватар для Ibanez Wizard
 
Регистрация: 11.06.2010
Сообщений: 164
Вопрос Передача длинных GET параметров

Нужно передать длинный текст на другую страницу при помощи GET параметра для модуля новостей. Вот сам код:


Код:
<?php
	$num = 3;  
	$page = $_GET['str'];  
	$result = mysql_query("SELECT COUNT(*) FROM news");  
	$posts = mysql_result($result, 0); 
	$total = intval(($posts - 1) / $num) + 1;  
	$page = intval($page);  
	if(empty($page) or $page < 0) $page = 1; 
	if($page > $total) $page = $total;  
	$start = $page * $num - $num;  
	
// Сохранение всех новостей из базы данных в массив 
	$result = mysql_query("SELECT * FROM news LIMIT $start, $num");  
	while ( $postrow[] = mysql_fetch_array($result));	

// Вывод всех новостей
		for($i = 0; $i < $num; $i++)  {  
			if(empty($postrow[$i])) break; //Убираем пустые блоки, если новости закончились
			echo "<div class='news'>
				<div class='news_left_image'><img src='/image/news_bg.jpg'></div>
				<div class='news_content'>
				<div class='news_head'>".$postrow[$i]['title']."</div>
				<div class='news_text'>".$postrow[$i]['content']."</div>
				<div class='news_date'>".$postrow[$i]['date']."</div>
				<div class='news_button'>
				<a class='pbutton' href='./index.php?page=num&content=".$postrow[$i]['content']."'>>>></a></div>
				</div>
				</div>";  
		}
		
// Вывод навигации по страницам		
	echo '<div class="news_navigation">';
		if ($page != 1) $pervpage = '<a class="page" href= ./index.php?page=news&str=1><<</a>  
									 <a class="page" href= ./index.php?page=news&str='. ($page - 1) .'><</a> ';  
		if ($page != $total) $nextpage = ' <a class="page" href= ./index.php?page=news&str='. ($page + 1) .'>></a>  
										   <a class="page" href= ./index.php?page=news&str=' .$total. '>>></a>';  
		if($page - 2 > 0) $page2left = ' <a class="page" href= ./index.php?page=news&str='. ($page - 2) .'>'. ($page - 2) .'</a>  ';  
		if($page - 1 > 0) $page1left = '<a class="page" href= ./index.php?page=news&str='. ($page - 1) .'>'. ($page - 1) .'</a>  ';  
		if($page + 2 <= $total) $page2right = '  <a class="page" href= ./index.php?page=news&str='. ($page + 2) .'>'. ($page + 2) .'</a>';  
		if($page + 1 <= $total) $page1right = '  <a class="page" href= ./index.php?page=news&str='. ($page + 1) .'>'. ($page + 1) .'</a>'; 
						  
		echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;  
	echo '</div>';
?>

Примерно в 26 строке выводится ссылка (на страницу отображения именно этой новости), в которой параметру content передается значение записи из базы данных content. Но если запись очень большая, то браузер выведет ошибку о слишком большой длина адреса. Как решить эту проблему?
Ibanez Wizard вне форума Ответить с цитированием
Старый 09.02.2012, 15:58   #2
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

как бы обычно id новости передают а не всю новость))) а на странице новости получают содержимое запросом по этому самому id.
Еще вот здесь явно "что-то пошло не так"
Код:
while ( $postrow[] = mysql_fetch_array($result));	
   for($i = 0; $i < $num; $i++)
      if(empty($postrow[$i])) break;
Cronos20 вне форума Ответить с цитированием
Старый 09.02.2012, 17:05   #3
Ibanez Wizard
Адский тунеядец
Форумчанин
 
Аватар для Ibanez Wizard
 
Регистрация: 11.06.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Cronos20 Посмотреть сообщение
как бы обычно id новости передают а не всю новость))) а на странице новости получают содержимое запросом по этому самому id.
Еще вот здесь явно "что-то пошло не так"
Код:
while ( $postrow[] = mysql_fetch_array($result));	
   for($i = 0; $i < $num; $i++)
      if(empty($postrow[$i])) break;
А можно пожалуйста привести код этого запроса

А на счет кода
Код:
if(empty($postrow[$i])) break;
Тут я проверяю - если переменная пуста, то не выводить блоки, а то если в таблице к примеру 7 записей, а мне надо выводить по три на страницу, то под конец, когда все 7 блоков с новостями вывелись на последней странице выводится ещё один пустой блок без информации.
Ibanez Wizard вне форума Ответить с цитированием
Старый 09.02.2012, 17:32   #4
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Ну обычно достаточно одного цикла ... и не обязательно их интегрировать друг в друга))
Либо так
Код:
while ( $row = mysql_fetch_array($result));	
   echo $row['content'];
Либо так
Код:
$rows = mysql_fetch_array($result);
for($i = 0; $i < count($rows); $i++)
   echo $rows[$i]['content'];
Про пустые ряды не понял .. не должно их вообще, значит где-то ошибка проектирования или получения лишних данных
Cronos20 вне форума Ответить с цитированием
Старый 09.02.2012, 17:49   #5
Ibanez Wizard
Адский тунеядец
Форумчанин
 
Аватар для Ibanez Wizard
 
Регистрация: 11.06.2010
Сообщений: 164
По умолчанию

Цитата:
$rows = mysql_fetch_array($result);
for($i = 0; $i < count($rows); $i++)
echo $rows[$i]['content'];
А к чему этот код? Что в GET параметре передавать? При чем здесь этот цикл? Мне надо вывести полный текст новости (content) при нажатии на ссылку (то есть на общей странице новостей он должен обрезать весь текст до 500 символов).
Ibanez Wizard вне форума Ответить с цитированием
Старый 09.02.2012, 19:42   #6
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Так я ж вам написал, зачем вы в ссылку пихаете контент??? Какой-нить id передавайте, а потом по id получайте весь контент .. или о чем вопрос?
Cronos20 вне форума Ответить с цитированием
Старый 09.02.2012, 20:36   #7
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

Ну если слишком длинная строка то может хэширование? Только такой метод который сможет зашифровать запрос так и расшифровать.
Abuhamed вне форума Ответить с цитированием
Старый 10.02.2012, 20:32   #8
Attic
Новичок
Джуниор
 
Аватар для Attic
 
Регистрация: 10.02.2012
Сообщений: 2
По умолчанию

Цитата:
Ну если слишком длинная строка то может хэширование? Только такой метод который сможет зашифровать запрос так и расшифровать
Не поможет, стандарты не позволяют пропихивать в GET длинные строки. И хеширование - это односторонняя операция, двухсторонняя это уже шифрование
Attic вне форума Ответить с цитированием
Старый 10.02.2012, 21:38   #9
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

Я имел введу шифрование...
Abuhamed вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметров _Mixer_ Общие вопросы по Java, Java SE, Kotlin 0 22.09.2011 20:17
Передача параметров функции Кипящий чайник Общие вопросы C/C++ 12 11.08.2010 19:45
Передача параметров aesoem Общие вопросы Delphi 8 15.07.2008 21:51
Передача параметров Gudzon Общие вопросы Delphi 12 08.02.2007 08:19