Вопрос с PHP
Подскажите пожалуйста, как можно работая с MySql на страницу выводить определённое количество результатов, а остальные результаты вывести на других страницах, и чтобы при этом были ссылки на другие страницы
Потом в цикле выводишь номера страниц, предварительно подумав о том, сколько будет на каждой странице результатов. Параметрами каждой из ссылок будут начало и конец(start и end).
Примерно так
Извини, но для меня это ответ только на 20%, можешь подробней объяснить. Заранее спасибо
А если ещё заюзать мега скрипт форума под название "поиск", то можно найти тут бесчисленные обсуждение этой темы
Тут обсасывалось это, как верно shaelf выразился, бесчисленное количество раз. http://forum.codenet.ru/showthread.php?t=26245 например (первое что попалось в результате 15-секундного поиска после прочтения твоего поста).
<?php
include("config.php");
$bresult = mysql_query("select * from webmoney_info");
if ($numrows>1) {
$numrows = $numrows-1;
mt_srand((double)microtime()*1000000);
$bannum = mt_rand(0, $numrows);
} else {
$bannum = 0;
}
$bresult2 = mysql_query("select name_pay, my_number_pay from webmoney_info limit $bannum,1");
list($name_pay, $my_number_pay) = mysql_fetch_row($bresult2);
?>
$link = mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_select_db($dbname, $link);
// Данные для mysql сервера
$dbhost = "localhost"; // Хост
$dbuser = "root"; // Имя пользователя
$dbpassword = ""; // Пароль
$dbname = "test"; // Имя базы данных
// Подключаемся к mysql серверу
// Выбираем нашу базу данных
mysql_select_db($dbname, $link);
// Добавляем запись в нашу таблицу customer
// т.е. делаем sql запрос
$query = "select * from webmoney_info";
// Запрашиваем
$result = mysql_query($query, $link);
while($rows = mysql_fetch_array($result, mysql_assoc))
{
printf("name_pay, info, my_number_pay",
$rows['name_pay'],$rows['info'],$rows['my_number_pay']);
}
// Закрываем соединение
mysql_close($link);
?>
Тут блин вообще данные из таблицы не выводит!!!
А откуда ты понял, что ничего не выводит? И куда всё это должно выводиться? Уж не вот этим-ли:
Код:
while($rows = mysql_fetch_array($result, mysql_assoc))
{
printf("name_pay, info, my_number_pay",
$rows['name_pay'],$rows['info'],$rows['my_number_pay']);
}
{
printf("name_pay, info, my_number_pay",
$rows['name_pay'],$rows['info'],$rows['my_number_pay']);
}
:eek: :confused:
Ты про printf() всё-таки мануальчик почитай...
Постраничный вывод информации???Вот в чём вопрос.
на php.net в мануале есть?
И со всеми выше описанными примерами это не получается :
function GetNavArray($startItem, $itemsCount, $unitsPerPage, $unitsInNavbar)
{
//Всего юнитов для бара - частное от количества возвращенных записей
//и количества записей на странице.
$num_units_all=ceil($itemsCount/$unitsPerPage);
//Актуальный блок бара. Частное от частного стартового номера возвращенной записи
//и количества записей на странице, и количества юнитов в блоке бара.
$actual_block=floor(($startItem/$unitsPerPage)/$unitsInNavbar);
//Последний блок юнитов (количество блоков). Частное от количества возвращенных записей
//и количества юнитов в баре
$end_block=$num_units_all/$unitsInNavbar;
//Стартовый номер юнита в актуальном блоке на баре. Произведение номера текущего блока
//с количеством юнитов на баре плюс единица.
$start_unit=floor(($actual_block*$unitsInNavbar)+1);
//Конечный номер юнита в баре. Сумма стартового юнита с количеством юнитов в баре.
$end_unit=$start_unit+$unitsInNavbar;
//Текущий юнит. Частное от суммы стартового номера возвращенной записи с количеством записей
//на странице и количества юнитов в баре
//$this->nav_array['actual_unit'] = ceil($start_unit/$this->nav_array_size);
//Цикл от стартового до конечного юнитов.
for($n=$start_unit; $n<$end_unit; ++$n)
{
$val = (int)(($n*$unitsPerPage)-$unitsPerPage);
if($val<=$startItem) $ret['actual_unit'] = $n;
$ret['pages'][$n] = $val;
}
$start_unit!=1 ? $ret['prev_arrow'] = $actual_block * (($unitsPerPage * $unitsInNavbar) - $unitsPerPage) : $ret['prev_arrow'] = 0;
$actual_block < floor($num_units_all/$unitsInNavbar) ? $ret['next_arrow'] = $end_unit * $unitsPerPage - $unitsPerPage : $ret['next_arrow'] = 0;
return $ret;
}
GetNavArray(20, 300, 20, 5), где первый параметр (20) - "страница", которая сейчас; (300) - общее количество возможных рядов выбора из БД; (20) - количество записей на страницу; (5) - количество циферок в панельке-листалке, вернёт массив:
PHP код:
Array
(
[actual_unit] => 2
[pages] => Array
(
[1] => 0
[2] => 20
[3] => 40
[4] => 60
[5] => 80
)
[prev_arrow] => 0
[next_arrow] => 100
)
Функция хорошая не спорю, только не получается совместить с функциями mysql?
<html>
<head>
<title></title>
</head>
<body>
<?php
//соединение с базой данных при помощи функции mysql_connect()
//в аргументах функции укажите имя сервера, логин и пароль.
$db = mysql_connect("localhost","root","");
//функция mysql_select_db() выбирает текущую
//базу данных с именем "test"
mysql_select_db("test" ,$db);
//функция mysql_query() выполняет запрос на выборку данных
//результирующий набор данных хранится в переменной $sql
$sel = "SELECT name_, add_urls, inform_host FROM buy_hosting";
$res = mysql_query($sel);
if ($res)
{
while($result = mysql_fetch_array($res))
{
echo "<br><a href=u.php=".$result["add_urls"].">".$result["name_"]."</a>
<br>".$result["inform_host"]."<br>$qwe";
}
}
mysql_close($db);
?>
</body>
</html>
Что надо добавить, изменить чтобы информация выводилась на нескольких страницах(а не вся инфа на одной странице)
Пожалуйста отвечайте, по конкретней, не все же умные как вы, все когда то начинают с нуля!
Ты сам-то представляешь, как это всё должно работать?
В приведённой функции предполагается, что счёт идёт по номеру ряда из ОБЩЕЙ выборки БД. Т.е. тебе надо узнать для начала количество записей, соответствующих запросу
Код:
$sel = "SELECT field FROM buy_hosting";
$res = mysql_query($sel);
$ItemsCount = mysql_numrows($res);
$res = mysql_query($sel);
$ItemsCount = mysql_numrows($res);
$ItemsCount - это и будет значение количества ВСЕХ записей, которые нужно листать.
Теперь нужно знать, с какой записи нужно выбирать. Для эттого будем передавать в запросе нумер записи. Типа http://site.dom/script.php?page=20. Это означает, что выбирать нам надо с двадцатой записи. А количество выбираемых записей определяем заранее (всё это можно определить в настройках скрипта, или сайта):
Код:
define("RECORDS_PER_PAGE", 10); // Количество выводимых записей на страницу
define("NAVIGATE_ITEMS", 5); // Количество ссылок в панельке-листалке
define("NAVIGATE_ITEMS", 5); // Количество ссылок в панельке-листалке
В результате выполнения функции
Код:
$NArray = GetNavArray(isset($_GET['page']) ? $_GET['page'] : 0, $ItemsCount, RECORDS_PER_PAGE, NAVIGATE_ITEMS);
имеем массив:
[HTML]Array
(
[actual_unit] => 2
[pages] => Array
(
[1] => 0
[2] => 20
[3] => 40
[4] => 60
[5] => 80
)
[prev_arrow] => 0
[next_arrow] => 100
)[/HTML]
И делаешь какой-то блочок ссылок:
Код:
$Navigare = "<a href='script.php?page={$NArray['prev_arrow']}'";
foreach ($NArray['pages'] as $page){
$Navigare .= "<a href='script.php?page={$page}'";
}
$Navigare .= "<a href='script.php?page={$NArray['next_arrow']}'";
foreach ($NArray['pages'] as $page){
$Navigare .= "<a href='script.php?page={$page}'";
}
$Navigare .= "<a href='script.php?page={$NArray['next_arrow']}'";
Теперь можешь выбирать нужные записи:
Код:
$res = mysql_query("SELECT * FROM table WHERE ... LIMIT {$_GET['page']} ". RECORDS_PER_PAGE);
Вопрос. Тебе нужен готовый код или пинок чтобы ты понял? Если пинок, то ты его получил неоднократно, если код, то только скажи и топ сразу переползёт в раздел "работа".
Если сами понимаете всё прекрасно, не значит что другие умные
Хоть убейте, не получается, выводит только слово Array и всё
Кто выводит слово Array? Толком объясни, что не получается. Покажи, что ты делаешь - мы ж не телепаты...
$sel = "SELECT field FROM buy_hosting";
$res = mysql_query($sel);
$ItemsCount = mysql_numrows($res);
define("RECORDS_PER_PAGE", 10); // Количество выводимых записей на страницу
define("NAVIGATE_ITEMS", 5); // Количество ссылок в панельке-листалке
$NArray = GetNavArray(isset($_GET['page']) ? $_GET['page'] : 0, $ItemsCount, RECORDS_PER_PAGE, NAVIGATE_ITEMS);
$Navigare = "<a href='script.php?page={$NArray['prev_arrow']}'";
foreach ($NArray['pages'] as $page){
$Navigare .= "<a href='script.php?page={$page}'";
}
$Navigare .= "<a href='script.php?page={$NArray['next_arrow']}'";
$res = mysql_query("SELECT * FROM table WHERE ... LIMIT {$_GET['page']} ". RECORDS_PER_PAGE);
Нахрена ты это показываешь? Это я написал и знаю наизусть. Что не получается-то?
include "config.php";
$start = intval($_GET['start']);
//Количество записей на страницу:
$per_page = 10;
connect_db();
$result = query_db("SELECT COUNT(*) FROM buy_hosting");
$row = mysql_fetch_array($result);
$num = $row[0];
$num_of_page = ceil($num/$per_page);
//Дальше запрос в базу:
$result = query_db("SELECT*FROM buy_hosting ORDER BY id_urls_host DESC LIMIT ".$start.", ".$per_page."");
//Закрываем соединение с БД:
close_db();
/Ну и вывод:
while($row = mysql_fetch_array($result)){
//Расслешиваем и выводим значения переменных:
print "Название: ".stripslashes($row['name_']);
print "Дата: ".$row['date'];<br><br>
print "Содержание: ".stripslashes($row['inform_host']); //Ошибка на этой строке
}
//Дальше вывод навигации:
for($i=1;$i <= $num_of_page;$i++){
//Если $i == номеру текущей странице, то
//выводим без ссылки:
if(($i == ($start/$per)+1) || ($start == 0 && $i == 1)){
$html .= "[".$i."]";
}else{
//Иначе, с ссылкой:
$html .= "[<a href=\"page.php?start=".($i-1)*$per."/\">".$i."</a>]";
}
}
только выводит ошибку следующего вида
Parse error: parse error in e:/addinfo/webserv/apache/htdocs/wbim/u.php on line 46
Предлагаю закрыть тему... Автор неадекватен.
Автор адекватен
Да я уж сам с ним рехнусь сейчас... :D "Вот нашёл хорошее обьяснение на одном сайте" :D *катаюсь под столом* "только выводит ошибку следующего вида" :D
http://rio.kbtour.ru/news.htm - тут работает эта же функция. Я её ещё три года назад нарисовал, а сегодня с утра подробно разжевал тебе, как её использовать. О какой адекватности ты говоришь, если у тебя "выводит только слово Array и всё"?
Делал как говорили не работает.
То что не работает уже все поняли. Так что не работает? Кому помощь нужна? Почему клещами всё тянуть приходится?
Даю наводящий вопрос:
Что передаёшь в ф-цию GetNavArray()? Распиши подробно. Желательно сделать так:
Код:
function GetNavArray($startItem, $itemsCount, $unitsPerPage, $unitsInNavbar){
var_dump(get_defined_vars());
....
}
var_dump(get_defined_vars());
....
}
И что она покажет. Можешь показать сюда.
Вот код
<?php
include "test.php";
$number_per_page = 10;
// Подсчитываем количество строк в таблице с новостями:
$result = mysql_query ("SELECT COUNT(*) as `quantity` FROM `buy_hosting`");
// Извлекаем результирующий ряд в массив:
$quantity = mysql_fetch_array ( $result, MYSQL_ASSOC );
// И вытаскиваем количество всех новостей:
$quantity = $quantity['quantity'];
// Здесь мы обрабатываем GET массив, получаем переменную $start (если она существует, конечно) и приводим ее к целому числу:
$start = ( isset ( $_GET['start'] ) && intval ( $_GET['start'] ) ) ? $_GET['start'] : 0;
$result = mysql_query ("SELECT*FROM buy_hosting ORDER BY id_urls_host DESC LIMIT ".$start.", ".$number_per_page."");
while ( $row = mysql_fetch_array ( $result, MYSQL_ASSOC ) ) {
print "".$row['name_']."
n";
print $row['inform_host']."
n";
}
$number_of_page = ceil ( $quantity/$number_per_page );
print "Страницы:\n";
for ( $i = 1; $i <= $number_of_page; $i ++ ) {
print ''.$i.' ';
}
?>
Выводит что надо но только не печатает ссылки на следующие страницы
помоги с этим
Цитата:
Выводит что надо но только не печатает ссылки на следующие страницы
так кто ж тебе мешает вместо print ''.$i.' '; написать print ''<a href=script.php?start={$i}>$i</a>";
Вот так работает, но опять же при переходе на другую страницу информация остаётся как и на превыдущей!
Вот так работает, но опять же при переходе на другую страницу информация остаётся как и на превыдущей![/QUOTE]
$start = ( isset ( $_GET['start'] ) && intval ( $_GET['start'] ) ) ? $_GET['start'] : 0;
У тебя $_GET['start'] на входе ищет, а ты ему $_GET['page'] посылаешь.
Вообще, напиши в самом начале error_reporting(E_ALL); и смотри все свои ошибки. Или предпочитаешь за каждой буквой на форум шарахаться?
Слушай, достал!!! Ну ты не тупо копируй и вставляй, а хоть присмотрись к коду: script.php?start={$i}> - явно что $i должна идти без фигурных скобок!!!
Ты хоть чё-то в PHP понимаешь или нет???[/QUOTE]
print "<a href=r.php?start=".$i.">".$i."</a>";
Я и написал что правильнее будет так
Должна быть в фигурных скобок. Конечно, в данном случае можно и без них обойтись.
print "<a href=r.php?start=".$i.">".$i."</a>";
Я и написал что правильнее будет так[/QUOTE]
Правильнее будет так, как я написал. Учите синтаксис. Вся эта куча кавычек с точками читабельности не добавляет. А фигурные скобки - очень удобная штука для вставки переменных в строку.
Например:
Код:
echo "Дядя Вася был голодный - проглотил $var холодный";
/*Такой способ подстановки катит*/
echo "Дядя Вася был голодный - проглотил $_GET['var'] холодный";
/*Такой способ подстановки не катит*/
echo "Дядя Вася был голодный - проглотил {$_GET['var']} холодный";
/*А вот такой - самый лучший, т.к. не нужно плодить миллион кавычек и точек*/
/*Такой способ подстановки катит*/
echo "Дядя Вася был голодный - проглотил $_GET['var'] холодный";
/*Такой способ подстановки не катит*/
echo "Дядя Вася был голодный - проглотил {$_GET['var']} холодный";
/*А вот такой - самый лучший, т.к. не нужно плодить миллион кавычек и точек*/
Ты думаешь, я в глаза балуюсь? Первый раз ты написал print "<a href=r.php?page=".$i.">".$i."</a>"; в 12:28, а в 12:34 отредактировал и теперь доказываешь мне, что я верблюд. Нехорошо, товарищ, нехорошо....
Цитата:
только выводит ошибку следующего вида
Parse error: parse error in e:/addinfo/webserv/apache/htdocs/wbim/u.php on line 46
Parse error: parse error in e:/addinfo/webserv/apache/htdocs/wbim/u.php on line 46
А что в 46-ой строке телепы должны угадывать? ))))
Насчет адекватности действительно стоит подумать :D
Напротив строки с ошибкой написано //Ошибка здесь
Светофор красный свет, мерин стоит на светафоре и в него сзади въезжает запорожец, ну водила мерина стерпел. 2 светофор та же самая история, тот же самый запорожец... 3... 4... 5... наконец водитель выходит из мерина подходит к запорожцу и спрашивает
-- А когда меня впереди нету, как ты на красный тормозишь?
Так вот, у меня похожий вопрос. Ошибка там крайне детская, более того, если человек только начал писать что-то (это вообще его первый язык) будет замечать такие ошибки буквально через неделю - другую.
>>читайте сначала что пишу, потом говорите.
Я заглянул прочесть только ради любопытства, так как читать неформатированный код тут мало кто будет. Подавая таким образом код, ты проявляешь неуважение к тем, кто будет его читать. Теперь ещё один вопрос, если ты относишься неуважительно, то почему ты ждёшь уважения в ответ?