Jump to content
  • 0

Прокомментировать пару непонятных мест


people2010
 Share

Question

Расшифруйте пож. пару мест непонятных из этого кода, я написал в комментариях.

А именно вот эти строки:

1)$result = mysql_query("SELECT * from $table ORDER by id desc");
Этоо означает выбрать из таблицы все строки сортируя их в обратном порядке, это зачем делать?

2)

 $num_rows = mysql_num_rows($result); Зачем считать кол-во записей в таблице,я так понял это кол-во строк

3)

 $num_rows = round($num_rows/$chislo);
Зачем здесь функция раунд? И у меня 20 записей, почему на первой странице выводит 5 записей, а на 2 и 3 по 10?

4)

($_GET['str'])) //Откуда взялась переменная str в глобальном массиве?

5)

 $nav = intval($nav); //Вот это место зачем писать?

6)

 for ($i=1; $i<$num_rows; $i++) { //А чему переменная num_rows равна,где она получает значения?
if ($i != $nav) { //А это что за проверка странная?
echo '<a href="'.$PHP_SELF.'?str='.$i.'">'.$i.'</a> ';//Вот этот кусок желательно растолкуйте понятней ?str и пхп_селф
}
else {
// АКТИВНУЮ СТРАНИЦУ ДЕЛАЕМ НЕ ГИПЕРССЫЛКОЙ
echo '<span>'.$i.'</span> '; //Что это за вывод переменной $i и чему эта переменная будет равна?
}
}

7)

if (!isset($_GET['str'])) { //Что это за проверка и откуда взялась переменная стр в глобальном массиве,что она делает?

8)Последнее,непонятное вот это растолкуйте пож. подробней

 '.substr($row['text'],0,100).'.. <a href="text.php?nomer='.$row['id'].'">>></a></p>';

<?

$server = 'localhost'; // ИМЯ СЕРВЕРА
$user = 'ptisa'; // ПОЛЬЗОВАТЕЛЬ
$pass = '12345'; // ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ

$db = 'video'; // БАЗА ДАННЫХ
$table = 'lessons'; // НАЗВАНИЕ ТАБЛИЦЫ

$chislo = 5; // ЧИСЛО СООБЩЕНИЙ НА СТРАНИЦЕ

// ДЛЯ УДОБСТВА ОБОЗНАЧИМ ПЕРЕМЕННУЮ С ТЕКСТОМ ОШИБКИ
$text_error = '<br />Ошибочка вышла!';

// СОЕДЕНИМСЯ С MySQL
$connect = mysql_connect ($server, $user, $pass);
if (!$connect) {
echo $text_error;
exit;
}

// СОЕДЕНИЯЕМСЯ С БАЗОЙ ДАННЫХ
$select = mysql_select_db($db);
if (!$select) {
echo $text_error;
exit;
}


// СОЗДАЁМ ЗАПРОС
$result = mysql_query("SELECT * from $table ORDER by id desc");
// СЧИТАЕМ КОЛЛИЧЕСТВО ЗАПИСЕЙ В ТАБЛИЦЕ - У МЕНЯ ИХ 20
$num_rows = mysql_num_rows($result); // Это подсчёт из скольки строк состоит табл. зачем это делать?

// А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО
$num_rows = round($num_rows/$chislo); //Зачем здесь функция round?


// ЗДЕСЬ МЫ ПРОВЕРЯЕМ НА КАКОЙ СТРАНИЦЕ СЕЙЧАС ПОЛЬЗОВАТЕЛЬ
if (isset($_GET['str'])) {
$nav = $_GET['str'];
}
else {
$nav = 0;
}
$nav = intval($nav); // Смысл этой строки, зачем? Что делает интвал с переменной nav?
echo 'Навигация: ';

// А ТЕПЕРЬ ВЫВОДИМ НОМЕРА СТРАНЦ
for ($i=1; $i<$num_rows; $i++) { //Если у меня 20 записей в базе значит здесь будет от 1 до 4?
if ($i != $nav) { ..Что это за проверка и зачем?
echo '<a href="'.$PHP_SELF.'?str='.$i.'">'.$i.'</a> '; //прокомментируйте вот это место подробнее
}
else {
// АКТИВНУЮ СТРАНИЦУ ДЕЛАЕМ НЕ ГИПЕРССЫЛКОЙ
echo '<span>'.$i.'</span> '; //Что это за вывод?
}
}

echo '<hr />'; // ОТДЕЛИМ НАВИГАЦЮ ОТ КОНТЕНТА ДЛЯ НАГЛЯДНОСТИ

// НАЧИНАЕМ ВЫВОДИТЬ САМУ ИНФОРМАЦИЮ ПОСТРАНИЧНО :)
if (!isset($_GET['str'])) {
$str = 0;
}
else {
$str = $_GET['str']*$chislo - $chislo;
}
$nomer = $str + 5;
// ФОРМИРУЕМ ЗАПРОС НУЖНОЙ НАМ ЧАСТИ ИНФОРМАЦИИ
$result = mysql_query("SELECT * from $table ORDER by id asc limit $str, $nomer");
// ИНАЧЕ ВЫВОДИМ ОШИБКУ
if (!$result) {
echo $text_error;
exit;
}

echo '<div style="width: 40%;">';
while ($row = mysql_fetch_array($result)) {
echo '<p>'.$row['id'].' - <strong>'.$row['page'].'</strong>
<br />
'.substr($row['text'],0,100).'.. <a href="text.php?nomer='.$row['id'].'">>></a></p>';
}
echo '</div>';

mysql_close($connect);

?>

Link to comment
Share on other sites

21 answers to this question

Recommended Posts

  • 0

Подключаем Капитана Очевидность.

1)$result = mysql_query("SELECT * from $table ORDER by id desc");

Этоо означает выбрать из таблицы все строки сортируя их в обратном порядке, это зачем делать?

Чтобы выбрать из таблицы все строки и отсортировать их в обратном порядке.

$num_rows = mysql_num_rows($result); Зачем считать кол-во записей в таблице,я так понял это кол-во строк

Количество записей в таблице необходимо в том случае, когда следует подсчитать количество записей в таблице.

($_GET['str'])) //Откуда взялась переменная str в глобальном массиве?

Наверное оттуда, что ее туда занесли.

$nav = intval($nav); //Вот это место зачем писать?

Не хочешь - не пиши.

if (!isset($_GET['str'])) { //Что это за проверка и откуда взялась переменная стр в глобальном массиве,что она делает?

Проверяем, что переменная str не передается по методу GET. Это же так очевидно.

Больше писать не смог, многа букав - ниасилил.

Link to comment
Share on other sites

  • 0

str - это не переменная, это элемент массива.

'.substr($row['text'],0,100).'.. <a href="text.php?nomer='.$row['id'].'">>></a></p>';
Берутся первые 100 символов, а потом идёт полная ересь с правыми скобками. Их там быть категорически не должно, только в виде &gt ; Но может быть это форум косячит.
почему на первой странице выводит 5 записей, а на 2 и 3 по 10
Ошибки реализации. Там и в самом деле должно быть не round, а ceil
$connect = mysql_connect ($server, $user, $pass);

if (!$connect) {

echo $text_error;

exit;

}

Всё это делается в одну строку: mysql_connect ($server, $user, $pass) or die ($etxt_error);
$result = mysql_query("SELECT * from $table ORDER by id desc");

$num_rows = mysql_num_rows($result);

УЖАСНО!!!!!!! А если бы их было 4000000? Тоже все их выбирал бы? А если sql-сервер на другом компьютере? select count(*) в руки и всё переписать.
for ($i=1; $i<$num_rows; $i++) { //Если у меня 20 записей в базе значит здесь будет от 1 до 4?
Да. Но если у тебя 16 страниц, то тут будет 3, а должно быть 4, я уже писал, нужно округление вверх.
if ($i != $nav) { ..Что это за проверка и зачем?
Проверяет, выводится ли номер текущей страницы или нет. Только обычно это не str, а page. Писал школьник.
echo '<a href="'.$PHP_SELF.'?str='.$i.'">'.$i.'</a> '; //прокомментируйте вот это место подробнее
Скрипт выводит ссылку на самого себя и добавляет номер i-й страницы к ней.

А вообще, почитай учебник. Через неделю сам всё понимать начнёшь.

Edited by Int
Link to comment
Share on other sites

  • 0

Cудя по всему код писал не people2010, поскольку первый же вопрос можно было бы трактовать как: «Я купил себе на обед кило соли и тюбик вазелина. Зачем я это сделал?» Отвечу на все по порядку.

1. Допустим, в таблице хранятся новости и нам надо получить их в пордке от новых к старым. Тогда такая сортировка и нужна.

2. Чтобы знать, сколько всего новостей (или чего там в таблице). Так делать нельзя. Делать надо через COUNT(). Хотя, если уж такой адский запрос прошёл, то можно и так.

3. Фиг знает. Бред какой-то.

4. Из адресной строки или из RewriteRule

5. Чтобы в этой переменной было точно число, а не «' UNION DROP DATABASE `database` --»

6. Читай про цикл for. Переменная num_rows у тебя присваивается выше. Ты про неё спрашивал во 2 и 3 вопросах

7. Это проверка существования переменной. Откуда она берётся, я ответил в 4 вопросе.

8. Я не знаю что это и разбираться не собираюсь.

Итак, делаем вывод: ты ничего не знаешь про PHP. Может, надо книжек посоветовать? Я знаю одну неплохую — её даже в интернетах скачать можно.

Link to comment
Share on other sites

  • 0
Итак, делаем вывод: ты ничего не знаешь про PHP. Может, надо книжек посоветовать? Я знаю одну неплохую — её даже в интернетах скачать можно.

Посоветуй. Я тоже от книжечки не откажусь :)

Link to comment
Share on other sites

  • 0

По-моему, она называется «PHP5 в подлиннике» — там не всё красиво и правильно (по моему мнению, может, это я неправильно всё делаю :) ). Но для того, чтобы понять какие-то основные принципы, узнать терминологию, по-моему, самое то. Как я понял, это не перевод, а книга русскоязычного автора, так что там написано всё относительно понятно и хорошо.

P.S. Судя по тому, что говорит гугль, автор этой книги и автор «Денвера» — один и тот же человек. Так что, возможно, стоит доверять — мне «Денвер» нравится, я достаточно долгое время его пользовал.

Link to comment
Share on other sites

  • 0

Аааа, автор Котеров или Костарев да? Кажись она у меня есть... неплохая конечно, но у меня есть и получше :)

Если не забуду то вечером тоже напишу название.

P.S. Автора два и Котеров и Костарев :)Нашел на озоне...

P.P.S. Нашел какая еще у меня - вот. Книга опупенная! Рекомендую, сейчас учусь по ней.

Link to comment
Share on other sites

  • 0

people2010, есть прекрасный справочник по php: php.su Там все функции описаны, почитайте сначала, чтобы меньше вопросов было.

Ну еще и математику с логикой надо бы вам изучить...

Link to comment
Share on other sites

  • 0

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

$result = mysql_query("SELECT * from $table ORDER by id asc limit $str, $nomer");
Вот и ошибка
$result = mysql_query("SELECT * from $table ORDER by id asc limit $str, $chislo");

Переменную $nomer вообще исключи, не нужна она

Вообще, неплохо бы, чтобы по переменным было понятно, что они обозначают. В противном случае гораздо красивее обзывать их $_, $__ и $___

Edited by Int
Link to comment
Share on other sites

  • 0

Решил опробовать другой,более правильный вариант, но он у меня не сработал.

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

Таблица lessons.php

id	 cat					   text
1 1 Петя
2 1 Фрося
3 1 Борис
4 1 Анатолий
5 1 Банан
6 1 Тарзан
7 1 Макс
8 1 Министр
9 1 Факел
10 1 Природа
11 1 Листья
12 1 Друзья
13 1 Морковь
14 1 Титаник
15 1 Мел
16 1 Натрий
17 1 Вуглевод
18 1 Кислород
19 1 Дартаньян
20 1 Поезд

Таблица options.php

d	 str
1 3

Файл database.php

<?php
$server = 'localhost'; //Имя сервера
$user = 'privet'; //Логин
$password = '12345'; //Пароль
$db = 'video';
$table = 'lessons'; //Название таблицы
$error_database = '<h2>Произошла ошибка в базе данных,<br/>
в ближайшее время она будет устранена!</h2>';
$connect = mysql_connect($server,$user,$password);
if(!$connect){
echo $error_database;
exit;
};
//$connect по какому соединению мы работаем
$select = mysql_select_db($db,$connect);
if(!$select){
echo $error_database;
exit;
};
?>

Код самой постраничной навигации, файл cat_view.php

<?php
include '../blocks/database.php'; /*Соединяемся с Базой Данных*/
$result77 = mysql_query("SELECT str FROM options", $connect);
$myrow77 = mysql_fetch_array($result77);
$num = $myrow77["str"];
// Извлекаем из URL текущую страницу
@$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM data WHERE cat='$cat'");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total = intval($total);
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная с какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start

$result = mysql_query("SELECT id,text FROM lessons WHERE
cat='$cat' ORDER BY id LIMIT $start, $num",$connect);

// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href=view_cat.php?cat='.$cat.'&page=1>Первая
</a> | <a href=view_cat.php?cat='.$cat.'&page='. ($page - 1) .'>Предыдущая</a> | ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' | <a href=view_cat.php?cat=
'.$cat.'&page='. ($page + 1) .'>Следующая</a> | <a href=view_cat.php?cat=
'.$cat.'&page=' .$total. '>Последняя</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) $page5left = ' <a href=view_cat.php?cat=
'.$cat.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
if($page - 4 > 0) $page4left = ' <a href=view_cat.php?cat='.$cat.'&page=
'. ($page - 4) .'>'. ($page - 4) .'</a> | ';
if($page - 3 > 0) $page3left = ' <a href=view_cat.php?cat='.$cat.'&page=
'. ($page - 3) .'>'. ($page - 3) .'</a> | ';
if($page - 2 > 0) $page2left = ' <a href=view_cat.php?cat='.$cat.'&page=
'. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href=view_cat.php?cat='.$cat.'&page=
'. ($page - 1) .'>'. ($page - 1) .'</a> | ';

if($page + 5 <= $total) $page5right = ' | <a href=view_cat.php?cat=
'.$cat.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';
if($page + 4 <= $total) $page4right = ' | <a href=view_cat.php?cat=
'.$cat.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>';
if($page + 3 <= $total) $page3right = ' | <a href=view_cat.php?cat=
'.$cat.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>';
if($page + 2 <= $total) $page2right = ' | <a href=view_cat.php?cat=
'.$cat.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href=view_cat.php?cat=
'.$cat.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';

// Вывод меню если страниц больше одной

if ($total > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pstrnav\">";
echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.
'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo "</div>";
}

?>

Выдаёт ошибки:

Notice: Undefined variable: cat in z:\home\sitik.ru\www\blocks\view_cat.php on line 9
[Денвер: показать возможную причину ошибки]
Warning: mysql_fetch_array(): supplied argument is
not a valid MySQL result resource in z:\home\sitik.ru\www\blocks\view_cat.php on line 10

Notice: Undefined variable: cat in z:\home\sitik.ru\www\blocks\view_cat.php on line 27

Notice: Undefined variable: cat in z:\home\sitik.ru\www\blocks\view_cat.php on line 30

Notice: Undefined variable: cat in z:\home\sitik.ru\www\blocks\view_cat.php on line 30

Хотя я всё сделал по инструкции,как говорилось в видеоуроке.

Подскажите пож, что сделать чтоб сработало?

Edited by people2010
Link to comment
Share on other sites

  • 0

попробовал дописать так выше до 10 строки.

$cat = 1;

Странно но выдало такое:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in z:\home\sitik.ru\www\blocks\view_cat.php on line 11

А в 11 строке такая строка:

$result00 = mysql_query("SELECT COUNT(*) FROM data WHERE cat='$cat'");

Да, точно, я не правильно сделал запрос sqlне с той таблицы выбираю, написал так:

$result00 = mysql_query("SELECT COUNT(*) FROM lessons WHERE cat='$cat'");

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

Что делать?

Link to comment
Share on other sites

  • 0
$total = (($posts - 1) / $num) + 1;
Класс!!

Кто такой видеоурок писал?

if($page - 5 > 0) $page5left = ' <a href=view_cat.php?cat=

'.$cat.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';

if($page - 4 > 0) $page4left = ' <a href=view_cat.php?cat='.$cat.'&page=

'. ($page - 4) .'>'. ($page - 4) .'</a> | ';

if($page - 3 > 0) $page3left = ' <a href=view_cat.php?cat='.$cat.'&page=

'. ($page - 3) .'>'. ($page - 3) .'</a> | ';

if($page - 2 > 0) $page2left = ' <a href=view_cat.php?cat='.$cat.'&page=

'. ($page - 2) .'>'. ($page - 2) .'</a> | ';

if($page - 1 > 0) $page1left = '<a href=view_cat.php?cat='.$cat.'&page=

'. ($page - 1) .'>'. ($page - 1) .'</a> | ';

Браво! Советую заранее ознакомиться с ресурсом http://govnokod.ru. Чувствую, скоро там будет пополнение.

Edited by Int
Link to comment
Share on other sites

  • 0

Ещё раз? о_О

Выводиться и отображаться - это разные вещи?

Разобрался хоть, почему он тебе ошибки пишет об отсутствующей переменной $cat?

А я придумал ещё одну замену ceil

$CountOfPage=(int)($posts % $num > 0)+(int)($posts/$num);

Edited by Int
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy