Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Функция intval()
 
 автор: Владимир55   (26.11.2006 в 13:40)   письмо автору
 
 

В теме 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']);

   
 
 автор: _Dreamer_   (26.11.2006 в 15:13)   письмо автору
 
   для: Владимир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. дальше по всей видимости отображется нужная страница, в данном случае вторая

   
 
 автор: Владимир55   (26.11.2006 в 18:38)   письмо автору
 
   для: _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>

   
 
 автор: _Dreamer_   (26.11.2006 в 18:45)   письмо автору
 
   для: Владимир55   (26.11.2006 в 18:38)
 

почему же нет.. вот как раз есть вывод страницы которая передана с помощью метода GET (то есть из url)


echo $pages[$page];

   
 
 автор: Владимир55   (26.11.2006 в 21:27)   письмо автору
 
   для: _Dreamer_   (26.11.2006 в 18:45)
 

Но как это работает?

Алгоритм-то какой?

Ведь операция

$page=intval($_GET['page']);

выполнена только один раз и в навигации она не участвует - как же происходит перебор страниц? И при чем здесь url? Чей url?

Можно сказать, что именно выполнила операция $page=intval($_GET['page']); ? Что она изменила? Какие переменные? Или что? Можно описать словами, что делает $page=intval($_GET['page']); ?

И по какому алгоритму в этом скрипте происходит перебор страниц?

   
 
 автор: Drago   (27.11.2006 в 00:06)   письмо автору
 
   для: Владимир55   (26.11.2006 в 21:27)
 

Функция intval() возвращает переменную типа integer. В этом коде, она применена для того, чтобы исключить некорректные данные переданные переменной $_GET['page']. То есть, после применения intval(), переменная $page всегда будет целым числом.

   
 
 автор: Владимир55   (27.11.2006 в 00:13)   письмо автору
 
   для: Drago   (27.11.2006 в 00:06)
 

Свойства integer - это единственное, что я и сам прекрасно знаю. Мои вопросы о другом - я их сформулировал выше.

   
 
 автор: XPraptor   (27.11.2006 в 00:30)   письмо автору
 
   для: Владимир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'.

[поправлено модератором]

   
 
 автор: Владимир55   (27.11.2006 в 01:10)   письмо автору
 
   для: XPraptor   (27.11.2006 в 00:30)
 

[поправлено модератором]

   
 
 автор: XPraptor   (27.11.2006 в 01:16)   письмо автору
 
   для: Владимир55   (27.11.2006 в 01:10)
 

[поправлено модератором]

   
 
 автор: Владимир55   (27.11.2006 в 12:05)   письмо автору
 
   для: XPraptor   (27.11.2006 в 01:16)
 

Вы читать умеете? Я спрашиваю: "И по какому алгоритму в этом скрипте происходит перебор страниц?".

Этот скрипт связан с разбиением текста на части, он стоит на моем домашнем компьютере и никаким хакерам недоступен, нет у него и урла. Я спрашиваю про алгоритм работы, а Вы рассказываете неизвестно про что. Так что еще неизвестно, кто из нас тупой.

   
 
 автор: Trianon   (27.11.2006 в 12:13)   письмо автору
 
   для: Владимир55   (27.11.2006 в 12:05)
 

Без вышеуказанной строки не работает строка

echo $pages[$page]; //выводим текущую страницу

поскольку переменная $page оказывается незаданной.
intval в данном контексте нужно рассматривать как нечто, что делает из строки число. Поскольку страницы в массиве проиндексированы числами, это вполне оправданно.

   
 
 автор: _Dreamer_   (27.11.2006 в 12:13)   письмо автору
 
   для: Владимир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]; //выводим текущую страницу

   
 
 автор: Владимир55   (27.11.2006 в 15:43)   письмо автору
 
   для: _Dreamer_   (27.11.2006 в 12:13)
 

А-а, вот оно что...

И при и клике "Вперед" выполняется "<a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\"</a>";

А здесь $_SERVER['PHP_SELF'] что делает?

   
 
 автор: Unkind   (27.11.2006 в 15:55)   письмо автору
 
   для: Владимир55   (27.11.2006 в 15:43)
 

$_SERVER['PHP_SELF'] - адрес текущей страницы...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования