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

Ваш аккаунт

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

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

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

Шаблон на PHP...

393
14 января 2004 года
Couger
128 / / 13.04.2003
Я только начинаю изучать PHP, поэтому, пожалуйста, подскажите ответы на парочку простых вопросов.
1. Главная страница сайта – шаблон, и содержит следующий код:

<HTML>
<HEAD>
</HEAD>
<BODY>
<?php function name($in) {
< !--происходит вставка вызываемого файла-->
if ($in != "") {$out=$in;}
< !-- если происходит вызов index.php без имени файла, то по умолчанию, вставляется файл main-->
else {$out="main";} return $out;}?>


<?php include (name($QUERY_STRING)); ?>

</BODY>
</HTML>

Код вроде рабочий, но, как только я что-нибудь хочу в нем поменять, он работать отказывается...
Сервак пишет
Parse error: parse error in /public_html/index.php on line 8
line 8 у меня отмечена жирным шрифтом.

Вот вопрос: что нужно дописать, чтобы вставлялись не просто файлы main и test, а main.html и test.html?
Т.е. при вызове http://domain.com/ вставлялся в шаблон main.html, а при вызове http://domain.com/?test вставлялся test.html

И еще вопрос: надо ли изменять права доступа к php файлам?
1.9K
14 января 2004 года
HabaHaba
172 / / 24.12.2003
Цитата:


<?php include (name($QUERY_STRING)); ?>


Где ты взял этот код? За это нужно вырывать руки с корнем.
Почему? Потому, что злобный хацкер может "заинклюдить" ЛЮБОЙ файл к которому имеет доступ процесс ввв-сервера.
Что бы избежать таких вещей, НИКОГДА нельзя передавать реальные имена файлов через что-нибуде где это можно безпроблемно поменять.
Как твою задачку можно реализовать:
Метод 1:

Код:
switch($_GET["page"]) {
     case 1:
          include("/includes/main.php");
     break;
     case 2:
          include("/includes/news.php");
     break;
    //И так далее
     default:
          include("/includes/main.php");
     break;
 }

То есть, это метод алиасов, когда ты заранее знаешь страницы которые у тебя будут запрашивать и инклюдишь их по псевдониму.
Метод 2:
Код:
$files = array();
$i=0;
if ($handle = opendir('/includes/')) {
   while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
           $files[$i]=$file;
           $i++;
       }
   }
   closedir($handle);
}
include("/includes/".$files[$_GET["pid"]);

Этот вариант подходит тогда, когда у тебя есть некое нефиговое кол-во однообразной инфы типа статей. Его можно легко расширить до считывания заголовка статей или вырезания какого-нибудь номера при формировании массива и последующего вывода списка.
Цитата:

Код вроде рабочий, но, как только я что-нибудь хочу в нем поменять, он работать отказывается...
Сервак пишет
Parse error: parse error in /public_html/index.php on line 8
line 8 у меня отмечена жирным шрифтом.


Покажи, что и как ты меняешь.

Цитата:

И еще вопрос: надо ли изменять права доступа к php файлам?


Да. Для файловой системы php файлы ничем не отличаются от любых других.

4
14 января 2004 года
mike
3.7K / / 01.10.2002
Про огрехи в безлрасности сказали, а я скажу про принцип работы PHP.

То что лежит между <?php и ?> - это PHP код. Комментарии в PHP - /* */, // и #, но не как не

Правильно так:

Код:
<HTML>
<HEAD>
</HEAD>
<BODY>
<?php
function name($in) {
  // происходит вставка вызываемого файла
  if ($in != "") $out=$in;
  // если происходит вызов index.php без имени
  // файла, то по умолчанию, вставляется файл main
  else $out="main";
  return $out;
}
?>


<?php
include (name($QUERY_STRING));
?>

</BODY>
</HTML>
393
14 января 2004 года
Couger
128 / / 13.04.2003
Исходный код был с какого-то сайта по веб дизайну взят (вместе с комментариями :) ).

Метод 1:
Код:
switch($_GET["page"]) {
     case 1:
          include("/includes/main.php");
     break;
     case 2:
          include("/includes/news.php");
     break;
    //И так далее
     default:
          include("/includes/main.php");
     break;
 }


Метод 2:
Код:
$files = array();
$i=0;
if ($handle = opendir('/includes/')) {
   while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
           $files[$i]=$file;
           $i++;
       }
   }
   closedir($handle);
}
include("/includes/".$files[$_GET["pid"]);


Т.е. как теперь мне надо вызывать страницы в первом и во втором методе?

Если не сложно, приведи плз полный код страницы (как я писал).

P.S. А с комментариями я как-то ступил...
393
15 января 2004 года
Couger
128 / / 13.04.2003
Цитата:
Originally posted by Couger
Исходный код был с какого-то сайта по веб дизайну взят (вместе с комментариями :) ).

Метод 1:
Код:
switch($_GET["page"]) {
     case 1:
          include("/includes/main.php");
     break;
     case 2:
          include("/includes/news.php");
     break;
    //И так далее
     default:
          include("/includes/main.php");
     break;
 }


Метод 2:
Код:
$files = array();
$i=0;
if ($handle = opendir('/includes/')) {
   while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
           $files[$i]=$file;
           $i++;
       }
   }
   closedir($handle);
}
include("/includes/".$files[$_GET["pid"]);


Т.е. как теперь мне надо вызывать страницы в первом и во втором методе?

Если не сложно, приведи плз полный код страницы (как я писал).

P.S. А с комментариями я как-то ступил...



Мне не лень разобраться - немного позже, сейчас просто совсем нет времени, а решение нужно срочно!!!

1.9K
15 января 2004 года
HabaHaba
172 / / 24.12.2003
Цитата:
Originally posted by Couger


Мне не лень разобраться - немного позже, сейчас просто совсем нет времени, а решение нужно срочно!!!


Зато мне лень писать что то за тебя.
Одно дело помочь советом, помочь разобраться а другое делать за тебя твою работу за которую тебе наверное деньги платят :)
Так что ты уж сам. Если чего то конкретное не понятно -- спрашивай.

393
15 января 2004 года
Couger
128 / / 13.04.2003
Можно же взять и такой код:
Код:
<HTML>
<HEAD>
</HEAD>
<BODY>
<?php function name($in) {
if ($in == "" or "main") {$out="main.php";}
elseif ($in == "info") {$out="info.php";}
...
else {$out="error.php";}
return $out;}?>



<?php include (name($QUERY_STRING)); ?>


</BODY>
</HTML>


Что значит $_GET["page"]?

Конструкция switch ведь такая:
case (условие): блок
Что в данной конструкции значит 1?


Объясните мне пожалуйста значение этого слова: конкатенация. Как я понимаю – это если у нас есть 1я переменная со значением 1TR и 2я со значением 5G, то их конкатенация, это типо суммы и имеет значение: 1TR5G

Еще один вопросик:
Если у меня есть какая-либо переменная $page = "name", какое значение будет присвоено переменной $some = "$page.html"? Как я думаю: name.html
А если $some = '$page.html', то: $page.html. Правильно?
Какие символы надо экранировать (вроде ставится \)? И надо ли в значениях, заключенных в апострофы, а не в кавычки?



з.ы. за это мне не платят, пока... всё для себя!
1.9K
15 января 2004 года
HabaHaba
172 / / 24.12.2003
Вечер добрый.
Итак, по порядку:

Цитата:

...
Можно же взять и такой код:
...
<?php include (name($QUERY_STRING)); ?>
...


Концептуально, в принципе можно (если заменить строчку: "if ($in == "" || $in=="main") {$out="main.php";}"), но вот именно вот так делать не стоит. Фишка в том, что $QUERY_STRING, а точнее $_SERVER["QUERY_STRING"] это ВСЁ что содержится в строке переданой методом GET (ссылке) после "?". То есть, если в твой скрипт, написаный таким вот образом, обратиться вот так: test.php?main&eshe=1&eshe2=222 то он вернет error.php.
Как это обойти? Для обработки параметров пришедших методом GET (через ссылку) есть замечательный массив $_GET (который я и использовал в своих примерах).
$_GET это ассоциативный массив данные в котором раскладываются следующим образом: $_GET["имя_параметра"]="Значение_параметра";
Соответсвенно, если работать через $_GET, то можно передать и обработать сколько угодно параметров.

Цитата:

Что значит $_GET["page"]?


Исходя из того, что я написал выше это знечение параметра "page" переданного GET-ом. (test.php?page=1)

Цитата:

Конструкция switch ведь такая:
case (условие): блок
Что в данной конструкции значит 1?


В этом случае такая:
switch($переменная) {
case "значение переменной":
блок
break;
}
Еденицу и означает :)

Цитата:

Объясните мне пожалуйста значение этого слова: конкатенация. Как я понимаю – это если у нас есть 1я переменная со значением 1TR и 2я со значением 5G, то их конкатенация, это типо суммы и имеет значение: 1TR5G


Слово "конкатенация" пришло к нам из лексикона индейцев Майя. Оно дословно означает -- "Глупый белый человек объединяет две строки".
Понимаешь ты его абсолютно верно.
Hint: В PHP объединение строк делается с помощью "."
Пример:

 
Код:
$var = "Строка";
$var2 = 1;
$var3 = $var.$var2;
$var4 = $var."/".$var2;
//и.т.д.
print $var3."
"
;
print $var4;

Цитата:

Еще один вопросик:
....
Правильно?


Да.
А самому попробовать? ;)

Цитата:

Какие символы надо экранировать (вроде ставится \)? И надо ли в значениях, заключенных в апострофы, а не в кавычки?


В значениях заключенных в кавычки, нужно экранировать кавычки, в значениях заключенных в апострофы, соответственно, апострофы.

Цитата:

з.ы. за это мне не платят, пока... всё для себя!


Это пройдет ;)
Больше пробуй и читай ман (только обязательно с пользовательскими комментариями).
Удачи, надеюсь на вопросы ответил понятно :)

393
15 января 2004 года
Couger
128 / / 13.04.2003
Thanks, всё описано замечательно!

Цитата:
Originally posted by HabaHaba
Да.
А самому попробовать? ;)



Я совсем не против, но самому попробовать пока нет возможности. Или подскажи, пожалуйста, как настроить комп на запуск PHP.

Далее:

Как можно связать выполнение условия PHP с функцией JavaScript?
Т.е. надо при выполнении, например, elseif (...) {запустить функцию JS}

И сразу такой вопрос: Если функция PHP после выполнения возвращает переменную, которая используется в дальнейшем, а выполнится условие, в которой эта переменная не участвует, то что вернет функция?
(я понял, что если использовать
switch($переменная) {
case "значение переменной":
блок
break;
проблем с возвращаемым значением будет меньше)

И ещё:

Полный код выглядит, допустим, так:

Код:
<HTML>
<HEAD>
</HEAD>
<BODY>

<?php switch($_GET["page"]) {
     case 1:
          include("/includes/main.php");
     break;
     case 2:
          include("/includes/news.php");
     break;
     default:
          include("/includes/main.php");
     break;}?>

<?php switch($_GET["menu"]) {
     case 1:
          include("/includes/1.php");
     break;
     case 2:
          include("/includes/2.php");
     break;}?>
</BODY>
</HTML>

Т.е. при вызове страницы:
http://domain.com/?page=1&menu=2
Откроется шаблон со вставленными страницами main.php и 2.php

при вызове страницы:
http://domain.com/?page=1
Откроется шаблон со вставленной страницей main.php

А если открыть http://domain.com/?page=5&menu=3
Откроется шаблон со страницей main.php?

Можно же вместо цифры использовать буквенное выражение?


Как сделать так, чтобы открыть шаблон со вставленным в него файлом, в который в свою очередь вставляется другой определенный?

И все-таки самый важный вопрос, как настроить работу php на домашнем компьютере??? Сразу столько вопросов уберется...
1.9K
16 января 2004 года
HabaHaba
172 / / 24.12.2003
Цитата:
Originally posted by Couger
Я совсем не против, но самому попробовать пока нет возможности. Или подскажи, пожалуйста, как настроить комп на запуск PHP.


1. Скачать Апаче 1.3...
2. Скачать свежий PHP 4...
3. ВНИМАТЕЛЬНО следуя руководствам из install.txt и мануала всё это установить

Цитата:

...
Как можно связать выполнение условия PHP с функцией JavaScript?
Т.е. надо при выполнении, например, elseif (...) {запустить функцию JS}
...


Ты понимаешь как и ГДЕ работают PHP и JS?
Ок, тогда примерно так:

 
Код:
if ($var == 1) {
     echo "
     <script>
        alert('Hello world');
     </script>
     "
;
}

Цитата:

И сразу такой вопрос: Если функция PHP после выполнения возвращает переменную,
которая используется в дальнейшем, а выполнится условие,
в которой эта переменная не участвует, то что вернет функция?


Ничего не понял :)
Вот тебе примеры с использованием функций:

Код:
<?php
function BuildOptions($to,$from,$template){
     $i=0;
     $text = "";
     if (!trim($template)) {
         return "<option value=\"\">Нет значений</option>";
     }
     if ($from<=0 || $to<=0) {
         return "<option value=\"\">Нет значений</option>";
     }
     for ($i=$to;$i<=$from;$i++){
          $text.=preg_replace("/%i/i",$i,$template);
     }
     return $text;
}

function CheckMail($mail){
    if (preg_match("/([^@].*)@([^.]*)\.(.*)/i",$mail)==0) {
        return false;
    } else {
        return true;
    }
}
function ModifyVar(&$var){
    $var = intval($var);
    $var = $var+($var*5);
}



$mail = "test@test.ru";
if (CheckMail($mail)) {
    print "$mail ok
"
;
} else {
    print "Неверный формат email ($mail)
"
;
}

$mail = "test.test.ru";
if (CheckMail($mail)) {
    print "$mail ok
"
;
} else {
    print "Неверный формат email ($mail)
"
;
}
print "<hr>";
print "<form>";
print "День: <select name=day>".BuildOptions(1,31,"<option value='%i'>%i</option>\n")."</select>";
print "Месяц <select name=month>: ".BuildOptions(1,31,"<option value='%i'>%i</option>\n")."</select>";
print "Год: <select name=year>".BuildOptions(1995,2004,"<option value='%i'>%i</option>\n")."</select>";
print "Список: <select name=list>".BuildOptions(0,102,"<option value='%i'>%i</option>\n")."</select>";
print "</form>";

print "<hr>";
$var = 10;
print $var."
"
;
ModifyVar($var);
print $var;
?>


Цитата:

(я понял, что если использовать
switch($переменная) {
case "значение переменной":
блок
break;
проблем с возвращаемым значением будет меньше)


Просто нужно всё использовать к месту. Функции тут не к месту :)

Цитата:

И ещё:
Полный код выглядит, допустим, так:
....
А если открыть http://domain.com/?page=5&menu=3
Откроется шаблон со страницей main.php?


Ага, только нужно во второй свитч дефоултное значение тоже поставить.

Цитата:

Можно же вместо цифры использовать буквенное выражение?


Без проблем.

Цитата:

Как сделать так, чтобы открыть шаблон со вставленным в него файлом,
в который в свою очередь вставляется другой определенный?


Давай ты азы сначала постигнешь а потом мы к этому вернемся? :)

393
16 января 2004 года
Couger
128 / / 13.04.2003
Цитата:

1. Скачать Апаче 1.3...
2. Скачать свежий PHP 4...
3. ВНИМАТЕЛЬНО следуя руководствам из install.txt и мануала всё это установить

Где php скатать можно я знаю, а вот где взять апаче?

Цитата:

Ничего не понял :)
...


Понять-то понял, я не это имел ввиду. Вообщем уже не важно.

Цитата:

Давай ты азы сначала постигнешь а потом мы к этому вернемся? :)


Азы-то всегда успею. А вот ответ на этот вопрос знать очень хочется!!! Плз, если не сложно! С шаблоном-то всё понятно, а здесь я совсем не догоняю, как это можно осуществить.


Ты случайно не знаешь, как поисковики обрабатывают php шаблоны?
Что можно сделать, чтобы запретить отдельное открытие вставляемого в шаблон файла (или хотя бы чтобы он отдельно не индексировался)? Если в файле robots.txt запретить директорию с файлами (в данном случае /includes/), то поисковик же их вообще не найдет...

1.9K
19 января 2004 года
HabaHaba
172 / / 24.12.2003
Цитата:
Originally posted by Couger
Где php скатать можно я знаю, а вот где взять апаче?


Где-где... в гнезде :)

Цитата:

Азы-то всегда успею. А вот ответ на этот вопрос знать очень хочется!!! Плз, если не сложно! С шаблоном-то всё понятно, а здесь я совсем не догоняю, как это можно осуществить.


В том то и дело, что как только ты разберешься с тем как PHP работает, что такое include/require,
твои вопросы отпадут сами сабой. Скажу просто -- PHP абсолютно не важно, сколько ты сделал вложеных инклюдов и они будут обрабатываться так, как если бы это был один цельный код написаный в одном файле.

Цитата:

Ты случайно не знаешь, как поисковики обрабатывают php шаблоны?
Что можно сделать, чтобы запретить отдельное открытие вставляемого в шаблон файла (или хотя бы чтобы он отдельно не индексировался)? Если в файле robots.txt запретить директорию с файлами (в данном случае /includes/), то поисковик же их вообще не найдет...


Слушай, почему ты упорно называешь программы шаблонами? Это не верно!
Шаблоны, это шаблоны. Они не PHP, они HTML.
Для управления индексированием достаточно тех средств которые ты описал + отключение листинга (тогда поисковик будет ходить только по ссылкам которые ты ему сам разрешишь).

393
20 января 2004 года
Couger
128 / / 13.04.2003
Цитата:

Где-где... в гнезде :)



Спасибо за ссылочку! То, что надо!

Цитата:

В том то и дело, что как только ты разберешься с тем как PHP работает, что такое include/require,
твои вопросы отпадут сами сабой. Скажу просто -- PHP абсолютно не важно, сколько ты сделал вложеных инклюдов и они будут обрабатываться так, как если бы это был один цельный код написаный в одном файле.


Т.е. если один свич в первом файле, а другой во втором, то, всё равно оба обработают одну строку?

Если страница вставляется includом, то в каком виде она должна быть, или какая часть её вставляется (я имею ввиду, например, только то что в <body></body>)?

Цитата:

Для управления индексированием достаточно тех средств которые ты описал + отключение листинга (тогда поисковик будет ходить только по ссылкам которые ты ему сам разрешишь).


Мне же надо, чтобы поисковик нашел инфу, а ведь вся инфа находится в включаемых файлах, если запретить к ним доступ, то их вообще никто не найдет!
Как поисковик обрабатывает php? Как любой док-т или он пойдет по ссылке в include? Если пойдет, а я в robots.txt я запретил дирректорию с включаимыми файлами?
Вообще, можно как-нибудь сделать, чтобы файлы по отдельности нельзя было найти, а только если они включенны в основной док-т.

1.9K
20 января 2004 года
HabaHaba
172 / / 24.12.2003
Цитата:

.....
Как поисковик обрабатывает php? Как любой док-т или он пойдет по ссылке в include?
.....


Я тебе ещё раз говорю - ЧИТАЙ ОСНОВЫ. Все твои вопросы от незнания и/или непонимания элементарных вещей.
Прочитай пожалуйста вот это, а потом, если всё ещё будет не понятно -- скажи, какие пробелы в знаниях остались.
Без понимания того, как и где работает PHP, что получает броузер/поисковик когда обращается к PHP файлу -- нечего даже за "Hello World!" браться.

1.3K
20 января 2004 года
view
148 / / 14.10.2003
Цитата:
Originally posted by Couger


Т.е. если один свич в первом файле, а другой во втором, то, всё равно оба обработают одну строку?

Если страница вставляется includом, то в каком виде она должна быть, или какая часть её вставляется (я имею ввиду, например, только то что в <body></body>)?


Мне же надо, чтобы поисковик нашел инфу, а ведь вся инфа находится в включаемых файлах, если запретить к ним доступ, то их вообще никто не найдет!
Как поисковик обрабатывает php? Как любой док-т или он пойдет по ссылке в include? Если пойдет, а я в robots.txt я запретил дирректорию с включаимыми файлами?
Вообще, можно как-нибудь сделать, чтобы файлы по отдельности нельзя было найти, а только если они включенны в основной док-т.



Поисковик видит только то, что выводит php и что написано за пределами тегов <?php ?>.

Ты на чем нибудь раньше программировал? Если хоть чуть-чуть знаешь "C" - нужно понять только одно: php - это "С", только со своими особенностями, облегчающими жизнь программисту. Про это надо читать документацию по php. (Кстати, она содержит очень много примеров)
Еще немного надо знать про методы передачи данных с использованием CGI. Про это написано в любой книжке по HTML.

393
20 января 2004 года
Couger
128 / / 13.04.2003
Всем огромный thanks! Почитаю, и обращусь!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог