Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вопрос с PHP

387
23 августа 2006 года
Ihbif19
421 / / 28.10.2004
Подскажите пожалуйста, как можно работая с MySql на страницу выводить определённое количество результатов, а остальные результаты вывести на других страницах, и чтобы при этом были ссылки на другие страницы
6.7K
23 августа 2006 года
Ginza9
96 / / 30.06.2006
В SELECT указываешь LIMIT start,end

Потом в цикле выводишь номера страниц, предварительно подумав о том, сколько будет на каждой странице результатов. Параметрами каждой из ссылок будут начало и конец(start и end).

Примерно так
387
23 августа 2006 года
Ihbif19
421 / / 28.10.2004
Извини, но для меня это ответ только на 20%, можешь подробней объяснить. Заранее спасибо
15
23 августа 2006 года
shaelf
2.7K / / 04.05.2005
А если ещё заюзать мега скрипт форума под название "поиск", то можно найти тут бесчисленные обсуждение этой темы
8
24 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Ihbif17]Подскажите пожалуйста, как можно работая с MySql на страницу выводить определённое количество результатов, а остальные результаты вывести на других страницах, и чтобы при этом были ссылки на другие страницы[/QUOTE]
Тут обсасывалось это, как верно shaelf выразился, бесчисленное количество раз. http://forum.codenet.ru/showthread.php?t=26245 например (первое что попалось в результате 15-секундного поиска после прочтения твоего поста).
387
24 августа 2006 года
Ihbif19
421 / / 28.10.2004
Подскажи плиз, где ошибка?



<?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);

?>
387
24 августа 2006 года
Ihbif19
421 / / 28.10.2004
<?php
$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);
?>

Тут блин вообще данные из таблицы не выводит!!!
8
24 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Ihbif17]Тут блин вообще данные из таблицы не выводит!!![/QUOTE]
А откуда ты понял, что ничего не выводит? И куда всё это должно выводиться? Уж не вот этим-ли:

 
Код:
while($rows = mysql_fetch_array($result, mysql_assoc))
{
    printf("name_pay, info, my_number_pay",
    $rows['name_pay'],$rows['info'],$rows['my_number_pay']);
}

:eek: :confused:

Ты про printf() всё-таки мануальчик почитай...
387
24 августа 2006 года
Ihbif19
421 / / 28.10.2004
Да блин не в этом дело!!!
Постраничный вывод информации???Вот в чём вопрос.
на 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?
387
24 августа 2006 года
Ihbif19
421 / / 28.10.2004
Код такой

<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>


Что надо добавить, изменить чтобы информация выводилась на нескольких страницах(а не вся инфа на одной странице)
Пожалуйста отвечайте, по конкретней, не все же умные как вы, все когда то начинают с нуля!
8
25 августа 2006 года
mfender
3.5K / / 15.06.2005
Блин, ну что за человек!
Ты сам-то представляешь, как это всё должно работать?
В приведённой функции предполагается, что счёт идёт по номеру ряда из ОБЩЕЙ выборки БД. Т.е. тебе надо узнать для начала количество записей, соответствующих запросу

 
Код:
$sel = "SELECT field FROM buy_hosting";
$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); // Количество ссылок в панельке-листалке


В результате выполнения функции

 
Код:
$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']}'";


Теперь можешь выбирать нужные записи:

 
Код:
$res = mysql_query("SELECT * FROM table WHERE ... LIMIT {$_GET['page']} ". RECORDS_PER_PAGE);
15
25 августа 2006 года
shaelf
2.7K / / 04.05.2005
Вопрос. Тебе нужен готовый код или пинок чтобы ты понял? Если пинок, то ты его получил неоднократно, если код, то только скажи и топ сразу переползёт в раздел "работа".
387
25 августа 2006 года
Ihbif19
421 / / 28.10.2004
Если сами понимаете всё прекрасно, не значит что другие умные
387
25 августа 2006 года
Ihbif19
421 / / 28.10.2004
Хоть убейте, не получается, выводит только слово Array и всё
8
25 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Ihbif17]Хоть убейте, не получается, выводит только слово Array и всё[/QUOTE]
Кто выводит слово Array? Толком объясни, что не получается. Покажи, что ты делаешь - мы ж не телепаты...
387
25 августа 2006 года
Ihbif19
421 / / 28.10.2004
include "config.php"
$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);
8
25 августа 2006 года
mfender
3.5K / / 15.06.2005
Нахрена ты это показываешь? Это я написал и знаю наизусть. Что не получается-то?
387
25 августа 2006 года
Ihbif19
421 / / 28.10.2004
Вот нашёл хорошее обьяснение на одном сайте


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
13
25 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
Предлагаю закрыть тему... Автор неадекватен.
387
25 августа 2006 года
Ihbif19
421 / / 28.10.2004
Автор адекватен
8
25 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=RussianSpy]Предлагаю закрыть тему... Автор неадекватен.[/QUOTE]
Да я уж сам с ним рехнусь сейчас... :D "Вот нашёл хорошее обьяснение на одном сайте" :D *катаюсь под столом* "только выводит ошибку следующего вида" :D
8
25 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Ihbif17]Автор адекватен[/QUOTE]
http://rio.kbtour.ru/news.htm - тут работает эта же функция. Я её ещё три года назад нарисовал, а сегодня с утра подробно разжевал тебе, как её использовать. О какой адекватности ты говоришь, если у тебя "выводит только слово Array и всё"?
387
25 августа 2006 года
Ihbif19
421 / / 28.10.2004
Делал как говорили не работает.
8
25 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Ihbif17]Делал как говорили не работает.[/QUOTE]
То что не работает уже все поняли. Так что не работает? Кому помощь нужна? Почему клещами всё тянуть приходится?

Даю наводящий вопрос:
Что передаёшь в ф-цию GetNavArray()? Распиши подробно. Желательно сделать так:
 
Код:
function GetNavArray($startItem, $itemsCount, $unitsPerPage, $unitsInNavbar){
var_dump(get_defined_vars());
....
}

И что она покажет. Можешь показать сюда.
387
25 августа 2006 года
Ihbif19
421 / / 28.10.2004
Забей на эту функцию!
Вот код
<?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.' ';

}

?>


Выводит что надо но только не печатает ссылки на следующие страницы
помоги с этим
8
25 августа 2006 года
mfender
3.5K / / 15.06.2005
Точно неадекватен. Всё что ты ты тут напечатал, я тебе выше нарисовал с утра, только покороче. А вот что касается
Цитата:
Выводит что надо но только не печатает ссылки на следующие страницы


так кто ж тебе мешает вместо print ''.$i.' '; написать print ''<a href=script.php?start={$i}>$i</a>";

387
25 августа 2006 года
Ihbif19
421 / / 28.10.2004
print "<a href=r.php?start=".$i.">".$i."</a>";
Вот так работает, но опять же при переходе на другую страницу информация остаётся как и на превыдущей!
8
25 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Ihbif17]print "<a href=r.php?start=".$i.">".$i."</a>";
Вот так работает, но опять же при переходе на другую страницу информация остаётся как и на превыдущей![/QUOTE]
$start = ( isset ( $_GET['start'] ) && intval ( $_GET['start'] ) ) ? $_GET['start'] : 0;
У тебя $_GET['start'] на входе ищет, а ты ему $_GET['page'] посылаешь.

Вообще, напиши в самом начале error_reporting(E_ALL); и смотри все свои ошибки. Или предпочитаешь за каждой буквой на форум шарахаться?
387
25 августа 2006 года
Ihbif19
421 / / 28.10.2004
[QUOTE=UAS]Ihbif17
Слушай, достал!!! Ну ты не тупо копируй и вставляй, а хоть присмотрись к коду: script.php?start={$i}> - явно что $i должна идти без фигурных скобок!!!
Ты хоть чё-то в PHP понимаешь или нет???[/QUOTE]

print "<a href=r.php?start=".$i.">".$i."</a>";
Я и написал что правильнее будет так
8
25 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=UAS]Ihbif17явно что $i должна идти без фигурных скобок!!![/QUOTE]
Должна быть в фигурных скобок. Конечно, в данном случае можно и без них обойтись.
387
25 августа 2006 года
Ihbif19
421 / / 28.10.2004
print "<a href=r.php?start=".$i.">".$i."</a>";
8
25 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Ihbif17]print "<a href=r.php?start=".$i.">".$i."</a>";
Я и написал что правильнее будет так[/QUOTE]
Правильнее будет так, как я написал. Учите синтаксис. Вся эта куча кавычек с точками читабельности не добавляет. А фигурные скобки - очень удобная штука для вставки переменных в строку.

Например:

 
Код:
echo "Дядя Вася был голодный - проглотил $var холодный";
/*Такой способ подстановки катит*/

echo "Дядя Вася был голодный - проглотил $_GET['var'] холодный";
/*Такой способ подстановки не катит*/

echo "Дядя Вася был голодный - проглотил {$_GET['var']} холодный";
/*А вот такой - самый лучший, т.к. не нужно плодить миллион кавычек и точек*/
8
25 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Ihbif17]print "<a href=r.php?start=".$i.">".$i."</a>";[/QUOTE]
Ты думаешь, я в глаза балуюсь? Первый раз ты написал print "<a href=r.php?page=".$i.">".$i."</a>"; в 12:28, а в 12:34 отредактировал и теперь доказываешь мне, что я верблюд. Нехорошо, товарищ, нехорошо....
12
26 августа 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
только выводит ошибку следующего вида
Parse error: parse error in e:/addinfo/webserv/apache/htdocs/wbim/u.php on line 46


А что в 46-ой строке телепы должны угадывать? ))))
Насчет адекватности действительно стоит подумать :D

387
26 августа 2006 года
Ihbif19
421 / / 28.10.2004
читайте сначала что пишу, потом говорите.
Напротив строки с ошибкой написано //Ошибка здесь
15
26 августа 2006 года
shaelf
2.7K / / 04.05.2005
Посмотрел, увидел (про ошибку на 46 строке) и сразу анекдот вспомнил.
Светофор красный свет, мерин стоит на светафоре и в него сзади въезжает запорожец, ну водила мерина стерпел. 2 светофор та же самая история, тот же самый запорожец... 3... 4... 5... наконец водитель выходит из мерина подходит к запорожцу и спрашивает
-- А когда меня впереди нету, как ты на красный тормозишь?
Так вот, у меня похожий вопрос. Ошибка там крайне детская, более того, если человек только начал писать что-то (это вообще его первый язык) будет замечать такие ошибки буквально через неделю - другую.
>>читайте сначала что пишу, потом говорите.
Я заглянул прочесть только ради любопытства, так как читать неформатированный код тут мало кто будет. Подавая таким образом код, ты проявляешь неуважение к тем, кто будет его читать. Теперь ещё один вопрос, если ты относишься неуважительно, то почему ты ждёшь уважения в ответ?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог