|
|
|
| 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 | |
|
|
|
|
|
|
|
для: cheops
(16.09.2004 в 22:27)
| | а ее нужно как-нибудь менять и если надо то как при добавлении новости в базу данных,меня интересует этот вопрос,технология,ну допустим если мы добавляем новость в базу,то $start присваиваем $start+1 или как,меня вот это интересует... | |
|
|
|
|
|
|
|
для: 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 Я если честно не до конца понял вопрос - он немного закручен :))). | |
|
|
|
|
|
|
|
для: cheops
(16.09.2004 в 23:34)
| | так тоесть старт ненужно изменять,он всегда получается должен быть равен нулю чтоли???
P.S вы правильно поняли мой "закрученный" вопрос :))) | |
|
|
|
|
|
|
|
для: 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 - будет гораздо легче отлаживать скрипт. | |
|
|
|
|
|
|
|
для: cheops
(16.09.2004 в 23:55)
| | ааа... все понятно,-эта переменная используется чисто для вывода...тоесть по номерам...а так скрипты выводятся по своему id_news... | |
|
|
|
|
|
|
|
для: LimP
(17.09.2004 в 00:00)
| | но как менять переменную $start чтобы она принимала значения то 10...20...30... ??? | |
|
|
|
|
|
|
|
для: LimP
(17.09.2004 в 14:35)
| | Вы хотите увеличить количество выводимых на одной странице новостей? Вам необходимо изменить значения переменных $pnumber и $all_number_news
Первая отвечает за количество новостей в анонсе. А вторая за количество новостей в на странице "Новости" | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(17.09.2004 в 15:14)
| | нет,вы неправильно поняли,где мне нужно менять и как переменную $start для того чтобы ее значение увеличивалось в зависимости от количества новостей...тоесть,попросту,где мне ее менять,чтобы она принимала значения например как показано постами выше...10...20...30... | |
|
|
|
|
|
|
|
для: LimP
(17.09.2004 в 15:18)
| | :))) | |
|
|
|
|
|
|
|
для: LimP
(17.09.2004 в 16:32)
| | :))))))))) | |
|
|
|
|
|
|
|
для: 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 = но что вот здесь???
?>
|
или это я неправилтьно написал??? | |
|
|
|
|
|
|
|
для: 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'];
?>
|
Таким образом она и формируется.
------------------
А если вы хотите менять что то другое, то тогда говорите что и зачем :) Иначе - непонятно.... | |
|
|
|
|
|
|
|
для: 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
(17.09.2004 в 22:32)
| | правильно ??? | |
|
|
|
|
|
|
|
для: LimP
(18.09.2004 в 16:10)
| | Ну... вам виднее :))), работает? | |
|
|
|
|
|
|
|
для: cheops
(18.09.2004 в 17:05)
| | вроде да,но вы с точки зрения корректности,у меня все правильно???по-моему нужно именно так работать с этойц переменной...не именно так,а вот начинать так,а потом уже использовать ее как ссылку на другие страницы и.т.д... | |
|
|
|
|
|
|
|
для: 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% времени. Если к нему сразу привыкнуть - можно здорово ускорить свою работу (это как с десятипальцевым методом).
>по-моему нужно именно так работать с этойц
>переменной...не именно так,а вот начинать так,а потом уже
>использовать ее как ссылку на другие страницы и.т.д...
Хм... вообще говоря да, так пожалуй код более читабельным получится. | |
|
|
|
|
|
|
|
для: cheops
(18.09.2004 в 17:27)
| | большое пасиба,все учту... | |
|
|
|
|
|
|
|
для: cheops
(16.09.2004 в 22:27)
| | Большое спосибо cheops
Наконецтаки я разобрался с постраничной фигней уря! | |
|
|
|
|
|
|
|
для: Адоп Акробат
(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 я вложил архив со всеми этими файлами... | |
|
|
|
|
|
|
|
для: 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? | |
|
|
|
|
|
|
|
для: 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
........ | |
|
|
|
|
|
|
|
для: LimP
(19.09.2004 в 15:21)
| | А, действительно, ошибка в config.php: вместо mysql_connect() вызывается mysql_db_connect(), а так как перед функцией стоит алеф (@) - происходит подавление вывода ошибок в окно браузера, поэтому чистый экран. | |
|
|
|
|
|
|
|
для: cheops
(19.09.2004 в 16:17)
| | точно !!! вот я баран.простите за ламмера!!!! | |
|
|
|
|
|
|
|
для: LimP
(19.09.2004 в 16:31)
| | Я вот тоже четвёртый день мучаюсь над кодом постраничного вывода из БД MySQL средствами PHP. Наиболее полную статью по вопросу нашёл здесь. Перебробывал все предложенные варианты.
Мне понравилось - заказчику нет. Заказчик требует туже систему (один в один) как и тут (в строке поиска справа введите что-нибудь, к примеру web).
То есть, на какой бы странице не находился юзер, выводилось в сyмме 10 страниц. При нажатии на ">" - выводится следующая десятка, а не прибавляется 10 страниц к той, накоторой сейчас находится юзер... При нажатии на ">>" и "<<" последняя и первая страница соответственно.
Я в самого начала не очень разбирался с циклами, кроме while :) Сам я по другому примеру с phpfaq.ru понял как сделать простейший вывод страниц одна за другой. А вот примеры с той статьи на которую я ссылался выше вообще не понял, сколько не пытался разобраться...
Именно для меня не понятно, как вывести ссылки на следующую и последнюю страницу. Как сделать так, чтобы при нажатии на > выводилась следующая десятка (повторюсь ещё раз, как тут) Вообщем помогите мне сделать такую же систему как и на этом masterfile.ru... я в отчаинии | |
|
|
|
|
|
|
|
для: NIK
(21.01.2006 в 15:42)
| | Лучше завести новую тему, чтобы не перегружать эту и не выгружать каждый раз при ответе 26 старых постов. | |
|
|
|