Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Блок "новости"
 
 автор: cheops   (16.09.2004 в 22:27)   письмо автору
 
 

LimP пислал:

драсьте,у меня вот к вам вопрос...вы в своем скрипте "новости" используете переменную $start не могли бы вы мне объяснить принцип ее функции,каким образом при ее поможи выводятся сооющения,в зависимости от последнего написанного,которое выводится первым,просто я задумал при добавлении скрипта сразу определять его id_news по названию новости и его теле...и непосредственно выводить ту новость первой у которой стоит тот id_news,что был передан этому скрипту обработчиком формы добавления сообщения,но я чую,что у меня будут проблемы с моим вариантом,так что,помогите,объясните принцип работы вашей переменной $start...

Переменная $start - хранит позицию, начиная с которой выводятся записи. Значение этой позиции передаётся по методу GET через строку запроса index.php?start=5. Поэтому в начале скрипта производится проверка, если значение не передано, переменной $start присваивается значение 0:
<?php
  
if(empty($_GET['start'])) $start 0;
  else 
$start $_GET['start'];
?>

После этого, базе данных отправляется запрос, на выборку записей начиная с позиции $start:
select * from news order by putdate desc limit $start, $all_number_news

Здесь $all_number_news - это число новостей на одной странице, например, 10. Для вывода ссылок на следующие позиции необходимо число всех записей в базе данных:
<?php
  $tot 
mysql_query("SELECT count(*) FROM news");
  if (
$tot$total mysql_result($tot,0);
?>

После этого можно выводить ссылку на "Предыдущие" новостные блоки
<?php 
 
// Если $start больше нуля, значит у нас есть предыдущие новости
 // выводим на них ссылку
  
if($start 0) echo "<a href='index.php?start=".($start $all_number_news)."'>Предыдущие новости</a>";
?>

и на "Следующие":
<?php
  
// Если $start+$pnumber всё же меньше общего количества
  // новостей, значит у нас есть следующие новости
  
if($start $all_number_news $total) echo "<a href='index.php?start=".($start $all_number_news)."'>Следующие новостей</a>";
?>


http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=299&page=1

   
 
 автор: LimP   (16.09.2004 в 23:18)   письмо автору
 
   для: cheops   (16.09.2004 в 22:27)
 

а ее нужно как-нибудь менять и если надо то как при добавлении новости в базу данных,меня интересует этот вопрос,технология,ну допустим если мы добавляем новость в базу,то $start присваиваем $start+1 или как,меня вот это интересует...

   
 
 автор: cheops   (16.09.2004 в 23:34)   письмо автору
 
   для: LimP   (16.09.2004 в 23:18)
 

Вообще $start не задумывалась для изменения где либо, помимо ссылок - единственный способ её изменения - это передача нового параметра start через строку запроса. Результатом такого подхода будет список из $all_number_news новостей, вывод которого осуществляется в цикле while:
<?php
$query 
"select * from news order by putdate desc limit $start$all_number_news";
$nw mysql_query($query);
while(
$news mysql_fetch_array($nw))
{
  echo 
"<a href=index.php?id_news=".$news['id_news']."&start=$start>".$news['name']."</a><br>";
}


PS Я если честно не до конца понял вопрос - он немного закручен :))).

   
 
 автор: LimP   (16.09.2004 в 23:46)   письмо автору
 
   для: cheops   (16.09.2004 в 23:34)
 

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

P.S вы правильно поняли мой "закрученный" вопрос :)))

   
 
 автор: cheops   (16.09.2004 в 23:55)   письмо автору
 
   для: LimP   (16.09.2004 в 23:46)
 

Не совсем, вернее совсем не так :))), $start будет равен 0 только в том случае, когда в строке запроса отсутсвует параметр start:
http://www.mysity.ru/index.php

Но при переходе по ссылке
<?php
 
echo "<a href='http://www.mysity.ru/index.php?start=".($start $all_number_news)."'>Следующие новости</a>"
?>

, если $start = 0, а $all_number_news = 10, строка запроса примет вид:
http://www.mysity.ru/index.php?start=10

второй перход ($start = 10, $all_number_news = 10) по ссылке даст уже
http://www.mysity.ru/index.php?start=20

третий ($start = 20, $all_number_news = 10:
http://www.mysity.ru/index.php?start=30
и т.д.

PS Для удобства отладки иногда полезно $all_number_news заменить на константу, то же значение 10 - будет гораздо легче отлаживать скрипт.

   
 
 автор: LimP   (17.09.2004 в 00:00)   письмо автору
 
   для: cheops   (16.09.2004 в 23:55)
 

ааа... все понятно,-эта переменная используется чисто для вывода...тоесть по номерам...а так скрипты выводятся по своему id_news...

   
 
 автор: LimP   (17.09.2004 в 14:35)   письмо автору
 
   для: LimP   (17.09.2004 в 00:00)
 

но как менять переменную $start чтобы она принимала значения то 10...20...30... ???

   
 
 автор: glsv (Дизайнер)   (17.09.2004 в 15:14)   письмо автору
 
   для: LimP   (17.09.2004 в 14:35)
 

Вы хотите увеличить количество выводимых на одной странице новостей? Вам необходимо изменить значения переменных $pnumber и $all_number_news

Первая отвечает за количество новостей в анонсе. А вторая за количество новостей в на странице "Новости"

   
 
 автор: LimP   (17.09.2004 в 15:18)   письмо автору
 
   для: glsv (Дизайнер)   (17.09.2004 в 15:14)
 

нет,вы неправильно поняли,где мне нужно менять и как переменную $start для того чтобы ее значение увеличивалось в зависимости от количества новостей...тоесть,попросту,где мне ее менять,чтобы она принимала значения например как показано постами выше...10...20...30...

   
 
 автор: LimP   (17.09.2004 в 16:32)   письмо автору
 
   для: LimP   (17.09.2004 в 15:18)
 

:)))

   
 
 автор: LimP   (17.09.2004 в 17:07)   письмо автору
 
   для: LimP   (17.09.2004 в 16:32)
 

:)))))))))

   
 
 автор: LimP   (17.09.2004 в 17:51)   письмо автору
 
   для: LimP   (17.09.2004 в 17:07)
 

я вот не пойму,каким образом переменной $start присваиваются эти значения,ведь мы пишем
<?php
include "../config.php";
if(empty(
$_GET['start'])) $_GET['start'] = 0;
if(
$_GET['start'] < 0$_GET['start']=0;
$tot mysql_query("select count (*) from news;");
$total mysql_fetch_array($tot);
$count $total['count(*)'];
if(
$start+$pnumber $count$start но что вот здесь???

?>

или это я неправилтьно написал???

   
 
 автор: glsv (Дизайнер)   (17.09.2004 в 20:19)   письмо автору
 
   для: LimP   (17.09.2004 в 15:18)
 

.... Мы друг друга не понимаем :)
------------------
Дело в том что переменная старт формируется автоматически. И ее значение увеличивается как раз на величину значения $all_number_news. Если вы хотите менять менять значения $start - то вы должны менять значение $all_number_news.
Формирование переменной происходит прямо при формировании ссылки.

<?
  
if($start $all_number_news $total) echo "<a class='linkblock' href='news.php?start=".($start $all_number_news)."'>Следующие <b>$all_number_news</b> новостей</a>";
?>

Если на эту ссылку нажать, то на страницу в строке запроса придет переменная $start. И в начале скрипта мы проверяем что пришло из строки запроса и присваиваем переменной start

<?
  
if(empty($_GET['start'])) $start 0;
  else 
$start $_GET['start'];
?>

Таким образом она и формируется.
------------------
А если вы хотите менять что то другое, то тогда говорите что и зачем :) Иначе - непонятно....

   
 
 автор: LimP   (17.09.2004 в 22:32)   письмо автору
 
   для: glsv (Дизайнер)   (17.09.2004 в 20:19)
 

я разобрался уже и сделал вот так:
<?php
include "../config.php";
$start $_GET['start'];
if(empty(
$start)) $start 0;
if(
$start 0$start 0;
$tot mysql_query("select count (*) from news;");
$total mysql_fetch_array($tot);
$count $total['count(*)'];
if(
$count>$pnumber)
{
 
$start $start $pnumber;
}


?>

   
 
 автор: LimP   (18.09.2004 в 16:10)   письмо автору
 
   для: LimP   (17.09.2004 в 22:32)
 

правильно ???

   
 
 автор: cheops   (18.09.2004 в 17:05)   письмо автору
 
   для: LimP   (18.09.2004 в 16:10)
 

Ну... вам виднее :))), работает?

   
 
 автор: LimP   (18.09.2004 в 17:11)   письмо автору
 
   для: cheops   (18.09.2004 в 17:05)
 

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

   
 
 автор: cheops   (18.09.2004 в 17:27)   письмо автору
 
   для: LimP   (18.09.2004 в 17:11)
 

>вроде да,но вы с точки зрения корректности,у меня все
>правильно???
Да. Только в SQL-запросе лучше использовать инструкцию AS, чтобы потом можно было обратиться к переменной по имени, а не по count(*), и когда возвращается одно значение вместо mysql_fetch_array(), лучше использовать mysql_result() (хотя я сам часто нарушаю это правило :):
<?php
$tot 
mysql_query("select count (*) as total from news;"); 
$count mysql_result($tot); 
?>

Это не очень существенно, но это "хороший стиль", который при отладке позволит сэкономить до 30% времени. Если к нему сразу привыкнуть - можно здорово ускорить свою работу (это как с десятипальцевым методом).
>по-моему нужно именно так работать с этойц
>переменной...не именно так,а вот начинать так,а потом уже
>использовать ее как ссылку на другие страницы и.т.д...
Хм... вообще говоря да, так пожалуй код более читабельным получится.

   
 
 автор: LimP   (19.09.2004 в 12:20)   письмо автору
 
   для: cheops   (18.09.2004 в 17:27)
 

большое пасиба,все учту...

   
 
 автор: Адоп Акробат   (18.09.2004 в 15:58)   письмо автору
 
   для: cheops   (16.09.2004 в 22:27)
 

Большое спосибо cheops
Наконецтаки я разобрался с постраничной фигней уря!

   
 
 автор: LimP   (19.09.2004 в 14:39)   письмо автору
 
   для: Адоп Акробат   (18.09.2004 в 15:58)
 

вот у меня еще вопросик,помогите...у меня имеется в новостях в папке admin файлы index.php formaddpost.php addpost.php .... так вот,у меня небольшая проблемка так как переменную $start нужно передавать везде по кругу,то...я начал в файле index.php прогписал вот так(это пока весь код этого файла):
<?php
include "../config.php";
//$start = $_GET['start']; это потому что пока сюда никто ничего не 
//передает...
if(empty($start)) $start 0
if(
$start 0$start 0
$tot mysql_query("select count (*) from news;"); 
$total mysql_fetch_array($tot); 
$count $total['count(*)']; 
if(
$count>$pnumber

$start $start $pnumber

echo (
"<meta http-equiv='refresh' content='0;url=formaddpost.php?start=".$start."'>");
?>

вот так ... но у меня выводится пустая страница...но если закомментировать вот это
//include "../config.php"; то все вроде работает с промежуточной ошибкой что мол не может определиться функция mysql_fetch_array (ну понятное дело,она не может определиться,т.к. ей некак подключиться к базе)и открывается скрипт formaddpost.php?start=0 ну воттак и должно...но мне же надо подключиться к базе,чтоб в файле index.php определить значение переменной $start (я понятно изъясняю???)я не знаю,у меня такое уже было в файле addpost.php но там я заменил на require и вроде все работает...подскажите,чек за глюк
p.s файл config.php должен находиться каталогом ниже этих файлов...
p.p.s я вложил архив со всеми этими файлами...

   
 
 автор: cheops   (19.09.2004 в 15:16)   письмо автору
 
   для: LimP   (19.09.2004 в 14:39)
 

Это симптом того, что не работает связка MySQL+PHP, если система бы работала, то комментирование
<?php
// include "../config.php";
?>

должно давать предупреждение
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\main\test\index.php on line 7

А белый лист при использовании функций MySQL признак того, что MySQL не подключен - посмотрите php.ini - не просочился вариант в котором закомментировано расширение php_mysql.dll?

   
 
 автор: LimP   (19.09.2004 в 15:21)   письмо автору
 
   для: cheops   (19.09.2004 в 15:16)
 

так я же ж и говорю,ошибку дает,но промежуточную и тут же на formaddpost.php?start=0 переходит т.к. <meta http-equiv='refresh' content='0;url=formaddpost.php?start=".$start."'> поэтому и переход идет,но если это убрать,то вылазит как раз вот эта ошибочка,так что все у меня установлено правильно и работает...
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\localhost\site\admin\index.php on line 7
........

   
 
 автор: cheops   (19.09.2004 в 16:17)   письмо автору
 
   для: LimP   (19.09.2004 в 15:21)
 

А, действительно, ошибка в config.php: вместо mysql_connect() вызывается mysql_db_connect(), а так как перед функцией стоит алеф (@) - происходит подавление вывода ошибок в окно браузера, поэтому чистый экран.

   
 
 автор: LimP   (19.09.2004 в 16:31)   письмо автору
 
   для: cheops   (19.09.2004 в 16:17)
 

точно !!! вот я баран.простите за ламмера!!!!

   
 
 автор: NIK   (21.01.2006 в 15:42)   письмо автору
 
   для: LimP   (19.09.2004 в 16:31)
 

Я вот тоже четвёртый день мучаюсь над кодом постраничного вывода из БД MySQL средствами PHP. Наиболее полную статью по вопросу нашёл здесь. Перебробывал все предложенные варианты.

Мне понравилось - заказчику нет. Заказчик требует туже систему (один в один) как и тут (в строке поиска справа введите что-нибудь, к примеру web).

То есть, на какой бы странице не находился юзер, выводилось в сyмме 10 страниц. При нажатии на ">" - выводится следующая десятка, а не прибавляется 10 страниц к той, накоторой сейчас находится юзер... При нажатии на ">>" и "<<" последняя и первая страница соответственно.

Я в самого начала не очень разбирался с циклами, кроме while :) Сам я по другому примеру с phpfaq.ru понял как сделать простейший вывод страниц одна за другой. А вот примеры с той статьи на которую я ссылался выше вообще не понял, сколько не пытался разобраться...

Именно для меня не понятно, как вывести ссылки на следующую и последнюю страницу. Как сделать так, чтобы при нажатии на > выводилась следующая десятка (повторюсь ещё раз, как тут) Вообщем помогите мне сделать такую же систему как и на этом masterfile.ru... я в отчаинии

   
 
 автор: cheops   (21.01.2006 в 21:38)   письмо автору
 
   для: NIK   (21.01.2006 в 15:42)
 

Лучше завести новую тему, чтобы не перегружать эту и не выгружать каждый раз при ответе 26 старых постов.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования