• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Каталог

  • Автор темы Alexygen
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

Alexygen

Подскажите, пожалуйста, как ограничеть колличество выводимой информации из базы до 30 строк, а если более 30, то внизу подписывать 1,2,3 страниц(ссылки) на следующе 30 и т.д.
Вот код который выводит из базы данные:
$select=mysql_query("select * from emails_send where user='$user_id' order by id asc") or die ("Íå âåðíûé ïóòü. Íå ìîãó âûáðàòü.");
while ($line = mysql_fetch_array ($select))
{
extract($line);
print"
<tr>
<td class=tab width=50 align=center>$id</td>
<td class=tab width=200 align=left>$email</td>
</tr>";
}
 
S

SKI

Задаем колличество страниц:
Код:
$onPage = 30;
Наверное, лучше использовать цикл с параметром. Ограничиваем вывод информации:
Код:
for ($i = 0; $line = mysql_fetch_array($select); $i++) {
extract($line);
if (($i >= $onPage * ($page - 1)) && ($i <= $onPage * $page - 1)) {
print "<tr>
<td class=tab width=50 align=center>$id</td>
<td class=tab width=200 align=left>$email</td>
</tr>";		
}						
}
Печатаем номера страниц.
Код:
if (isset($page)) {
if ($onPage <= 30) {
for ($p = 1; $p <= (mysql_num_rows($select)-1)/30+1; $p++) {
print '<a href="index.php?page='.$p.'">'.$p.'</a>';
}
}
}

Должно работать.
 
A

Alexygen

А чему равен $page? А то у меня получается пустая страница!
 
G

Gisma

тебе нужны два запроса :
1 - на получение количества записей в БД (SELECT count ...)
2 - на ограничение вывода результатов из БД, для этого применяй квантификатор LIMIT
select * from emails_send where user='$user_id' order by id asc LIMIT 60,30
это запрос отдаст 30 из БД записей после полученной 60, как если бы квантификатора LIMIT не было
 
A

Alexygen

Для: SKI
Спасибо! А как теперь сделать, чтобы при выводе страниц (1,2,3,4, ...) после 25 он ставил br и сслыку следующие 25 и ссылку следующая (>>) и предыдущая (<<), а после перехода на последнюю или первую ссылки << и >> исчезали взависимости от страницы (первой или последней)?
 
J

j_man

Кстати, через LIMIT было бы удобнее. Я забыл, что он существует.

А ты не забыл с какой мы базой работаем? Это же новичек... Вот научишь его неправлинь мыслить и что потом?

Лимит в запросе обязателен :(

(mysql_num_rows($select)-1)/30+1

есть функция ceil, которая все это и делает :)
ceil(mysql_num_rows($select)/30) - тот же эффект дает



Спасибо! А как теперь сделать, чтобы при выводе страниц (1,2,3,4, ...) после 25 он ставил br и сслыку следующие 25 и ссылку следующая (>>) и предыдущая (<<), а после перехода на последнюю или первую ссылки << и >> исчезали взависимости от страницы (первой или последней)?

Ну и намутил... До "после 25 ставить <br>" все понятно.. А дальше... )) Вообщем, чтобы там ни было есть условный оператор "if" разработчики многих языков говорят что должен помочь.. ;)
 
S

SKI

А ты не забыл с какой мы базой работаем? Это же новичек... Вот научишь его неправлинь мыслить и что потом?

Лимит в запросе обязателен :(
есть функция ceil, которая все это и делает :)
ceil(mysql_num_rows($select)/30) - тот же эффект дает
Ну и намутил... До "после 25 ставить <br>" все понятно.. А дальше... )) Вообщем, чтобы там ни было есть условный оператор "if" разработчики многих языков говорят что должен помочь.. ;)

А с какой мы базой работаем?! Я ни чего не забывал. Все прекрасно понимаю. Учить ни кого не собирался. Код выдрал из своего старого фолио. Тогда я еще сам был новичком. Слегка поправил и все.
Сейчас, в данной ситуации, использовал бы LIMIT.

И что значит: "Вот научишь его неправлинь мыслить и что потом?". На самом деле, с логической точки зрения, код написан правильно, в нем нет ошибок. И разобравшись с ним, наверняка Alexygen узнал, что-то новое. Да и разбираться в нем, собственно, нечего, поэтому и учить было не чему.

Ну и намутил... До "после 25 ставить <br>" все понятно.. А дальше... ))

Наверное, имелось в виду, чтобы была возможность перемещаться постранично (назад, вперед), и возможность перемещаться на 25 страниц назад или вперед, и при переходе на последние 25 стр. ссылка "следующие 25" исчезла.

Будет время, напишу. А сейчас:
Работа - осуществление трудовой деятельности; совокупность задач и функций: - которые способен выполнять один человек; или - которые могут быть поручены одному человеку…
 
J

j_man

Для: SKI


Да уж, не поспоришь, код действительно дает нужный нам результат. Вот только надеюсь сам понимаешь, что было бы если бы тутбай забыл пор свои LIMIT в запросе на вывод новостей например. (если не понимаешь, могу цифры привести) Так что LIMIT в нашей жизни неотъемлемый элемент (про него просто нельзя забывать никогда)
 
S

SKI

Для: j_man
Так что LIMIT в нашей жизни неотъемлемый элемент (про него просто нельзя забывать никогда)
) данное утверждение будет действительно верным по отношению к порталам или к сайтам приблизительно такого же масштаба, где есть необходимость в страницах или в ограничении на вывод, но зачем же ставить LIMIT если в таблице пару полей и сотка записей, где нет необходимости (при выводе) ставить стр., например прайс-лист? : Здесь он не нужен. Поэтому, далеко не в каждом случае нужно ставить LIMIT. Тем более, что его можно обойти, хотя и не рекомендуется. Из-за скорости обработки запроса, если это важно. Для TUT это важно, спорить не буду.
Конечно, мы можем спорить до бесконечности. У каждого программиста свой опыт, свои знания, разные учителя, учебники и т.п. Но нужно помочь Alexygen, если есть возможно, помоги. Сейчас у меня ее нет.
 
A

Alexygen

Наверное, имелось в виду, чтобы была возможность перемещаться постранично (назад, вперед), и возможность перемещаться на 25 страниц назад или вперед, и при переходе на последние 25 стр. ссылка "следующие 25" исчезла.

Именно так, вот только я не знаю как это сделать! Помогите пожалуйста!!!
 
J

j_man

Я тебе помог бы, если не был настолько туп. Если ты мне обьяснишь что ты хочешь (а то я до сих пор это представить себе не могу), то я с удовольствием тебе помогу.

Вот как я это понял:

"Предыдущие 25 ...... 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 ...... Следующие 25"
Причем при нажатии на страницу происходит подгрузка этой страницы, а при нажати на "следующие/предыдущие" происходит всего лишь подгрузка ссылок на соответствующие страницы (те что циферками посредине :) ), но не переход на новую страницу (т.е. основное содержимое не меняется, текущая страница остается текущей). Насколько правильно я понял ?

ICQ: 337668625
 
S

SKI

Я тебе помог бы, если не был настолько туп. Если ты мне обьяснишь что ты хочешь (а то я до сих пор это представить себе не могу), то я с удовольствием тебе помогу.

Пример:

Только добавь "предыдущие 25" и "следующие 25" :)
 
A

Alexygen

Это должно выглядеть так:

<<предыдущие 25 <<предыдущая 1,2,3,4,5,6,7,8,9,10,....,25 следущая>> следующие 25>>

1. открываются предыдущие 25 стр.
2. открывается предыдущая стр.
3. открытие по № стр.
4. открывается следующая стр.
5. открываются следующие 25 стр.



Зарание ОГРОМНОЕ СПАСИБО за помощь!
 
J

j_man

Пусть у тебя в $page хранится номер текущей страницы и в $count кол-во всех страниц.

Код:
if ($page > 25)
{
echo '<a href="?page='.($page-25).'"><<предыдущие 25</a> ';
}

if ($page - 1 > 0) 
{
echo ' <a href="?page='.($page-1).'"><<предыдущая</a> ';
}

$start = intval(($page-1)/25)*25+1;
$stop = ($start+25 < $count)?$start+25:$count;

if ($start == $stop)
{
echo ' <b>'.$start.'</b> ';
}

for ($i = $start; $i < $stop; $i++)
{
if ($page != $i)
{
echo ' <a href="?page='.$i.'">'.$i.'</a> ';
}
else
{
echo ' <b>'.$i.'</b> ';
}
}

if ($page < $count)
{
echo ' <a href="?page='.($page+1).'">следущая>></a> ';
}


if (ceil($page/25)*25 < $count)
{
echo ' <a href="?page='.(($page+25 <= $count)?$page+25:$count).'">следующие 25>></a>';
}

число 25 советую заменить на константу или переменную.
 
A

Alexygen

Кто-нибудь ответьте пожалуйста на мой вопрос!!!
 
J

j_man

Почему?

А как подсчитать колличество всех страниц?

А ты хоть пробовал разобраться в том что тебе SKI написал... Если тебе просто нужен был скрипт, то попросил бы и не морочил голову тем, что якобы нужна помощь в написании

mysql_num_rows - почитай о ней в мануале (мануал - это спецификация)
могу выслать на мыло если сам не найдешь на

еще есть функции count(), size() и т.д. Читай о них также в документации.
 
A

Alexygen

$count_email=mysql_query("select email from emails where user='$user_id' and spam=''") or die ("Не верный путь. Не могу выбрать.");
$count_email_sum=@mysql_num_rows($count_email);


Это я и так понял, а вот как их разбить на страницы? Т.е. записей 3000 на каждой странице по 30, соответственно должно получиться 100 ссылок, вопрос как разбить вывод $count_email_sum?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!