| |
|
|
| | В теме http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=27734&page=1 описан скрипт вывода текста, содержащий вот такие операторы:
$len=2000; //символов на странице
$book="book.txt"; //файл с книгой
$page=intval($_GET['page']); //номер текущей страницы получаем из url
$text=file_get_contents($book); //считываем файл целиком
$pages=explode("----##----", chunk_split($text, $len, "----##----")); //разбиваем книгу на страницы
Все там работает, но функцию третьей сверху строки я понять не могу. Мой принцип – не применять в своих кодах то, чего я не понимаю, даже если оно и функционирует нормально. Поэтому эту часть кода я переделал, обойдясь без оператора intval($_GET['page']); , но это получилось громоздко. Да и вообще, эта непонятка мне не дает покоя! Какой здесь может быть url, если скрипт работает внутри сайта? Изучение двух справочников и Самоучителя не прояснило проблему, а только запутало…
Можете ли мне пояснить роль этой загадочной строки?
====================
Модератор скорректировал название этой темы. Причем скорректировал неверно. intval - это не вопрос. Вопрос о строке вцелом, и прежде всего об ($_GET['page']); | |
| |
|
|
| |
|
|
| |
для: Владимир55
(26.11.2006 в 13:40)
| | | "Изучение двух справочников и Самоучителя..."
http://ua2.php.net/manual/ru/function.intval.php
а здесь смотрели?
Какой здесь может быть url, если скрипт работает внутри сайта
очень просто...
1. передаем скрипту название страницы с помощью перменной page через URL
например так... some_script.php?page=2..
2. инициализируем переменную $page как номер страницы переданный из url
$page=intval($_GET['page']);
|
3. дальше по всей видимости отображется нужная страница, в данном случае вторая | |
| |
|
|
| |
|
|
| |
для: _Dreamer_
(26.11.2006 в 15:13)
| | | Видимо, мне следовало бы сразу привести весь код. Вот он, внизу. И нет там ничего подобного.
===========
?
$len=2000; //символов на странице
$book="book.txt"; //файл с книгой
$page=intval($_GET['page']); //номер текущей страницы получаем из url
$text=file_get_contents($book); //считываем файл целиком
$pages=explode("----##----", chunk_split($text, $len, "----##----")); //разбиваем книгу на страницы
?>
<html>
<head>
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Книга. Часть <?=$page+1 ?></title>
</head>
<body>
<p><a href="http://www.site.ru">На главную страницу сайта</a></p>
<p>Часть <span lang="en-us"><?=$page+1 ?></span></p>
<p align="left">
<?
echo $pages[$page]; //выводим текущую страницу
?>
</p>
<p align="left">
<?
//а тут у нас навигация
if ($page) echo "<a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\">назад</a>"; //если страница не первая, то выводим ссылку на предыдущую
if ($page!=count($pages)-1) echo "<a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\"> вперед</a>"; //если страница не последняя, то выводим ссылку на cледующую.
?>
</p>
</body>
</html> | |
| |
|
|
| |
|
|
| |
для: Владимир55
(26.11.2006 в 18:38)
| | | почему же нет.. вот как раз есть вывод страницы которая передана с помощью метода GET (то есть из url)
| |
| |
|
|
| |
|
|
| |
для: _Dreamer_
(26.11.2006 в 18:45)
| | | Но как это работает?
Алгоритм-то какой?
Ведь операция
$page=intval($_GET['page']);
выполнена только один раз и в навигации она не участвует - как же происходит перебор страниц? И при чем здесь url? Чей url?
Можно сказать, что именно выполнила операция $page=intval($_GET['page']); ? Что она изменила? Какие переменные? Или что? Можно описать словами, что делает $page=intval($_GET['page']); ?
И по какому алгоритму в этом скрипте происходит перебор страниц? | |
| |
|
|
| |
|
|
| |
для: Владимир55
(26.11.2006 в 21:27)
| | | Функция intval() возвращает переменную типа integer. В этом коде, она применена для того, чтобы исключить некорректные данные переданные переменной $_GET['page']. То есть, после применения intval(), переменная $page всегда будет целым числом. | |
| |
|
|
| |
|
|
| |
для: Drago
(27.11.2006 в 00:06)
| | | Свойства integer - это единственное, что я и сам прекрасно знаю. Мои вопросы о другом - я их сформулировал выше. | |
| |
|
|
| |
|
|
| |
для: Владимир55
(27.11.2006 в 00:13)
| | | Суперглобальный массив $_GET содержит все переменные, переданные в строке URL после символа ? (вопросительного знака).
В коде передается номер страницы в url http://www.site.ru/index.php?page=1, так вот $_GET["page"] это и есть значение переменной page которое в моем примере рано 1.
Но хакер тоже не лыком шит и что ему мешает передать в переменную page текст http://www.site.ru/index.php?page='delete from users' а ты возмешь да неглядя выполниш переменную где нить. поэтому и применяется функция intval() которая оставит только целое число от переменной, в результате примера с запросом от хакера, переменная будет равна 0, потому что никаких цифр нет в строке 'delete from users'.
[поправлено модератором] | |
| |
|
|
| |
|
|
| |
для: XPraptor
(27.11.2006 в 00:30)
| | | [поправлено модератором] | |
| |
|
|
| |
|
|
| |
для: Владимир55
(27.11.2006 в 01:10)
| | | [поправлено модератором] | |
| |
|
|
| |
|
|
| |
для: XPraptor
(27.11.2006 в 01:16)
| | | Вы читать умеете? Я спрашиваю: "И по какому алгоритму в этом скрипте происходит перебор страниц?".
Этот скрипт связан с разбиением текста на части, он стоит на моем домашнем компьютере и никаким хакерам недоступен, нет у него и урла. Я спрашиваю про алгоритм работы, а Вы рассказываете неизвестно про что. Так что еще неизвестно, кто из нас тупой. | |
| |
|
|
| |
|
|
| |
для: Владимир55
(27.11.2006 в 12:05)
| | | Без вышеуказанной строки не работает строка
echo $pages[$page]; //выводим текущую страницу
|
поскольку переменная $page оказывается незаданной.
intval в данном контексте нужно рассматривать как нечто, что делает из строки число. Поскольку страницы в массиве проиндексированы числами, это вполне оправданно. | |
| |
|
|
| |
|
|
| |
для: Владимир55
(27.11.2006 в 12:05)
| | | вы ошибаетесь, url есть всегда, на вашем домашнем компьютере стоит локальный сервер, вы заходите в браузер пишите что то вроде http://localhost/showbook.php?page=2, это как раз и есть url, где передается номер страницы (page=2)..
насчет алгоритма работы я писал во втором посте, только между вторым и третим пнктом для большей ясности можно добавить ещё один
3.1 $pages=explode("----##----", chunk_split($text, $len, "----##----"));
в это строке весь текст книги который находится в переменной текст разбивается на массив, каждым элементом которого является страница.. как я понял странички отделяются с помощью контрукции "----##----" в тексте... таким образом на выходе мы имеем массив $pages каждый элемент которого -- отдельная страница... эту страницу выводим с помощью
echo $pages[$page]; //выводим текущую страницу | |
| |
|
|
| |
|
|
| |
для: _Dreamer_
(27.11.2006 в 12:13)
| | | А-а, вот оно что...
И при и клике "Вперед" выполняется "<a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\"</a>";
А здесь $_SERVER['PHP_SELF'] что делает? | |
| |
|
|
| |
|
|
| |
для: Владимир55
(27.11.2006 в 15:43)
| | | $_SERVER['PHP_SELF'] - адрес текущей страницы... | |
| |
|
|