Пятница, 10.01.2025, 19:53
 
Начало Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 1504
 Дневник
Начало » 2014 » Февраль » 8 » php2
php2



1. Надо разбить html текст на: верх страницы и низ страницы, то есть создать шаблоны. В этом случае, будет меняться только центр странички, что немаловажно.

Следующий файл top.htm - верх странички
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>%title%</TITLE></HEAD><body>

Это файл zentr.htm
середина странички, которая будет меняться, то есть zentr.htm. 

Этот файл end.htm - низ странички
</body></html>

Сам сценарий будет такой


    // если нет файла top.htm, создаем его
$top_htm = "top.htm";
if (! @file_exists ($top_htm)){
@touch ($top_htm);
$fp = fopen ($top_htm, "w");
fwrite ($fp, '
%title%
');
fclose ($fp);
}

    // если нет файла zentr.htm, создаем его
$zentr_htm = "zentr.htm";
if (! @file_exists ($zentr_htm)){
@touch ($zentr_htm);
$fp = fopen ($zentr_htm, "w");
fwrite ($fp, 'середина странички, которая будет меняться, то есть zentr.htm.
');
fclose ($fp);
}

    // если нет файла end.htm, создаем его
$end_htm = "end.htm";
if (! @file_exists ($end_htm)){
@touch ($end_htm);
$fp = fopen ($end_htm, "w");
fwrite ($fp, '
');
fclose ($fp);
}

    // загружаем верхний шаблон в переменную $top
$top = implode ( "", file ( "top.htm" ) ); 
    // говорим, что Title равно Php-web-дизайн.
$title = "Php-web-дизайн";
    // меняем в верхнем шаблоне слово %title% на Php-web-дизайн.
$topstr_replace ( "%title%", $title$top );
    // печатаем верхний шаблон
print $top;
    // здесь вставляем центр странички
include ("zentr.htm");
    // вставляем низ странички
include ("end.htm");
?>



При обращении к этому сценарию сервер выдаст броузеру
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Php-web-дизайн</TITLE></HEAD><body>
середина странички, которая будет меняться, то есть zentr.htm.
</body></html>

Мы добились того, что в верхней части меняем title, выводим саму меняющуюся информацию (zentr.htm) в центр html кода и добавляем низ. Итог такой, мы будем менять только центральную часть, не заботясь о шаблонах. В этом простом примере мы научились разбивать текст странички, менять его и вставлять файлы. Теперь, один раз записав файл верх, мы спокойно изменим в нем title или что-нибудь еще, вставим центральную часть и закончим нижней. 

Усложним задачу: надо получить доступ к каждой части вот такой страницы и менять их.

Мой логотип

 

Моя реклама
Меню:
  • моя ссылка 1
  • моя ссылка 2
  • моя ссылка 3

Это мой текст, который я смогу постоянно менять. Посмотреть, как лучше организовать таблицы, можно здесь...

Это мой копирайт.

Чтобы получить такую страницу нужен такой html код:

<HTML>
<HEAD>
<TITLE>%TITLE%</TITLE>
</HEAD>
<!-- top.htm -->
<table border="1" width="100%">
 <tr>
 <td colspan="2">
 %LOGO%
 <p>&nbsp;</p>
 </td>
 <td rowspan="3" width="130" valign="top">
 %REKLAMA%
 </td>
 </tr>
<!-- end top.htm -->
<!-- menu.htm -->
 <tr>
 <td rowspan="2" width="150" valign="top">
 %MENU%
 </td>
<!-- end menu.htm -->
<!-- body.htm -->
 <td align="justify" valign="top">
 %TEXT%
 </td>
<!-- end body.htm -->
<!-- end.htm -->
 </tr>
 <tr>
 <td align="center">
 %COPY%
 </td>
 </tr>
</table>
</BODY>
</HTML>

Жирным обозначены части, которые будем менять. Чтобы правильно таблицу разделить на части, её сначала надо нарисовать, а потом делить как хотите, хоть на сто частей. В дальнейшем мы просто напечатаем её по частям. Вы видите, что мы разрезали страницу на четыре файла: top.htm, menu.htm, body.htm, end.htm. Сценарий будет такой:


    // если нет файла top.htm, создаем его
$top_htm = "top.htm";
if (! @file_exists ($top_htm)){
@touch ($top_htm);
$fp = fopen ($top_htm, "w");
fwrite ($fp, '


%TITLE%








');
fclose ($fp);
}


    // если нет файла menu.htm, создаем его
$menu_htm = "menu.htm";
if (! @file_exists ($menu_htm)){
@touch ($menu_htm);
$fp = fopen ($menu_htm, "w");
fwrite ($fp, '




');
fclose ($fp);
}

    // если нет файла body.htm, создаем его
$body_htm = "body.htm";
if (! @file_exists ($body_htm)){
@touch ($body_htm);
$fp = fopen ($body_htm, "w");
fwrite ($fp, '



');
fclose ($fp);
}

    // если нет файла end.htm, создаем его 
$end_htm = "end.htm";
if (! @file_exists ($end_htm)){
$fp = fopen ($end_htm, "w");
fwrite ($fp, '






%LOGO%

 



%REKLAMA%

%MENU%

%TEXT%

%COPY%



');
fclose ($fp);
}

    // загружаем "top.htm" в переменную $top
$top = implode ( "", file ( "top.htm" ) ); 

    // говорим, что переменная $TITLE равна "Моя страница"
$TITLE = "Моя страница";

    // говорим, что переменная $LOGO равна "Мой логотип"
$LOGO = "Мой логотип";

    // говорим, что переменная $REKLAMA равна "Моя реклама"
$REKLAMA = "Моя реклама";

    //изменяем переменную $top, на новые значения $TITLE$LOGO$REKLAMA
$top = str_replace ( "%TITLE%", $TITLE$top );
$top = str_replace ( "%LOGO%", $LOGO$top );
$top = str_replace ( "%REKLAMA%", $REKLAMA$top );

    // загружаем "menu.htm" в переменную $_menu
$_menu = implode ( "", file ( "menu.htm" ) ); 
    // формируем своё меню
$MENU = "
Меню:

  • моя ссылка 1

  • моя ссылка 2

  • моя ссылка 3


";
    // изменяем переменную $_menu, на новые значения $MENU
$_menu = str_replace ( "%MENU%", $MENU$_menu );

    // загружаем "body.htm" в переменную $body
$body = implode ( "", file ( "body.htm" ) ); 
    // формируем свой текст
$TEXT = "


Это мой текст, который я смогу постоянно менять.
Посмотреть, как лучше организовать таблицы, можно 
здесь... 


";
    //изменяем переменную $body, на новые значения $TEXT
$body = str_replace ( "%TEXT%", $TEXT$body );

    // загружаем "end.htm" в переменную $end
$end = implode ( "", file ( "end.htm" ) ); 
    // формируем свой копирайт
$COPY = "Это мой копирайт.";
    //изменяем переменную $end, на новые значения $COPY
$end = str_replace ( "%COPY%", $COPY$end );

    // печатаем все части html страницы
print $top . $_menu . $body . $end;
?>

zip архив здесь...


У нас на сайте переписывается в верху: title, статистика (левый нижний угол), затем мы вставляем сам текст в центр, а в нижней части переписывается время генерации странички сервером. В итоге, странички получаются всегда разные, хотя мы используем всего два html файла (верх и низ), центр странички разный. То же самое относится и к центральной части, в которой тоже можно создать шаблон, а сервер сам будет менять в нем данные, что придаст сайту больше интерактивности.

 

2. Как организовать php-ссылки. Очень просто, например, у нас весь скрипт записан в одном файле all.php. Ссылки в html коде выглядят так"all.php?act=omsk&fon=velikie". Все что стоит за знаком вопроса это и есть ссылка. Если нажать на эту ссылку, скрипту all.php автоматически методом Get будут переданы две переменные: "$act=omsk" и "$fon=velikie". Программа начнет движение по срипту сверху вниз и когда достигнет того места, где мы будем спрашивать о этих двух переменных срипт исполнится. 


    //если переменная $act равна "omsk" и $fon не пусто, то есть существует
    //выводим одну страничку в броузер
    //ссылка выглядит так: "all.php?act=omsk&fon=velikie"
if ($act == "omsk" and $fon != ""{ include ("one.htm"); }
    //если переменная $act равна "omsk" и $fon пусто, то есть не существует
    //выводим другую страничку в броузер
    //ссылка выглядит так: "all.php?act=omsk"
if ($act == "omsk" and $fon == ""{ include ("too.htm"); }
?>


То есть, все очень просто.

 

3. Как работают формы? Из формы переменные передаются скрипту методом Get или Post, если мы в форме что-то пропишем и активизируем кнопку submit. Если будет использоваться метод Get, то все переменные, которые передаются скрипту будут прописаны в командной строке: all.php?1_переменная=значение&2_переменная=значение. Если будет использован метод Post, то эти же переменные будут переданы скрипту скрыто вне командной строки. То есть, метод Get нельзя использовать, если переменная большого объема, то есть в ней много букв. Например, когда вы направляете нам письмо с сайта, скрипту будут преданы три переменные: имя, email пользователя и сам текст письма. Две первые переменные маленькие, а вот последняя большая, поэтому программа будет виснуть, если в форме отсылки применить метод Get. Формы Php передают скрипту переменные, только после активации, в этом отличие от Javascript, который исполняется при загрузке, самого текста html, в броузер.

 

4. Как организовать Администрирование? Создаем файл, например, administr.php. Он должен быть закрыт паролем.


    // если нет файла admin.log, то создаем его
$admin_log = "admin.log";
if (! @file_exists ($admin_log)){ @touch ($admin_log); }

    // послали ли пароль из формы
if ( !empty ($_POST['p'])) {$p = $_POST['p'];} else $p = '';

    // чему равен пароль
$password = "pass";

    // функция форма пароля
function form(){
echo "


Админ





Введите пароль (правильный пароль 'pass')

";
}

    // если пароль правильный скрипт исполняется
if ($p == $password){
print "зашли в админ - файл
\n";
    // смотрим файл с нарушителями "admin.log"
$fp = fopen ( "admin.log", "a+" );
$content = fread ( $fpfilesize ( "admin.log" ) ); 
print str_replace ( "\n", "
\n", $content);
    // здесь текст нашего скрипта
echo "";
exit ;
} 
    // если пароль неправильный скрипт не исполняется, записываем нарушителя в базу
if ($p != $password){ 
    // определяем ip нарушителя, записываем в лог файл и выводим форму для пароля
if ( empty ($log_ip) ){ 
if ( getenv ("HTTP_X_FORWARDED_FOR")) { $log_ip = getenv ("HTTP_X_FORWARDED_FOR"); }
else { $log_ip = getenv ("REMOTE_ADDR"); }
}

$log_host = @gethostbyaddr ($log_ip);
$log_date = @date ("d\.m\.Y, H:i:s");
$fp = fopen ( $admin_log, "a+" );
if ($p == "") { $p = "не вводил"; }
fwrite ( $fp, "$log_ip<>$log_host<>$log_date<>$p<>\n");
fclose ($fp);
form();
}
    // если пароль совпал, то выводим что записано в лог файле
else {
$fp = fopen ($admin_log, "r");
$content = fread ($fpfilesize () );
fclose ($fp);
print "
";
print $content;
print "
";
} 


echo "";
?>


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

 

5. Что такое цикл и зачем он нужен?
функция for - цикл, очень важная для привязки баз данных, которые лежат в текстовых файлах. В нашем базовом файле данные лежат построчно и разделяются каким-то разделителем, в нашем случае разделитель - "::". То есть, база данных выглядит так: 
1 строка - Иванов::директор::40 лет::в/о:: 
2 строка - Петров::зам.директора::35 лет::в/о:: 
3 строка - Сидоров::нач.отдела::45 лет::в/о:: 

Чтобы произвести манипуляции с этой базой (добавить, удалить, изменить данные), и, требуется цикл for. Сначала мы считаем всю базу в массив строк, причем каждая строка в этом массиве будет иметь свой номер, ф-ия file , затем мы посчитаем сколько строк в считанном массиве, откроем файл базу на запись, полностью стирая ее и запустим цикл, в котором, в данном случае будем удалять ненужные нам строки, при этом нужные записывая в ту же базу данных. Далее по тексту, $base - база данных, в которой лежат наши данные. 

 
    // считываем всю базу в переменную $general 
    // Тогда $general - это массив строк из базы, выглядит так: 
    // $general[0] - все, что в 1 строке базы 
    // $general[1] - все, что во 2 строке базы 
    // $general[2] - все, что в 3 строке базы 
    // итд, до последней строки, то есть функция 
    // file дает нам возможность считать базу построчно 
    // в массив строк со своим номером по порядку 
$general = file ("$base"); 
    // стираем всю базу и открываем ее на запись 
    // функция fopen , если "w", то вся база стирается, 
    // ну и пусть, ранее мы считали ее в переменную $general
    // а потом из $general перезапишем 
$fp = fopen ("$base","w"); 
    // count ($general) - количество строк в считанной базе, 
    // то есть в переменной $general. Назначаем цикл от 
    // нулевой строки, до последней в базе: $j = 0 до $j < count ($general
for ($j = 0; $j < count ($general); $j++) { 
    // запускаем цикл, в первый проход цикла, 
    // $general[$j] - это все, что записано в 1 строке $general[0] 
    // во второй проход $general[$j] - все, что записано 
    // во 2 строке $general[1]. счет идет не с 1, а с 0. 
    // В последний проход, все что записано в поледней строке. 
    // Так продолжается пока $j < count ($general), то есть 
    // счетчик - переменная $j не станет больше количества строк в базе, 
    // тогда цикл прекращается. С каждым проходом цикла $j++, то есть эта 
    // переменная увеличивается на один, а в самом начале она равна 0. 
    // Если номер строки и номер для стирания той строки, что хотим удалить 
    // совпадают игнорируем, то есть не записываем в базу, 
    // остальные строки пишем в файл-базу fputs ($fp,$general[$j]
    // то есть записываем по новому все строки $general[$j]
    // в том же порядке, кроме той, которую хотим стереть 
   if ($j != ($del)){ $erg = fputs ($fp,$general[$j]); } 
  } 
    // цикл будет крутиться пока $j < count ($general), потом он закончится 
    // и программа придет к этой отметке. Здесь мы закрываем файл-базу 
fclose ($fp); 
?>


В этом очень простом примере мы научились использовать file , count , for , fopen , fclose. Более подробно как добавить-удалить строки из базы прочитайте здесь в нашем форуме

Просмотров: 1643 | Добавил: mosentesh2 | Рейтинг: 0.0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Конструктор сайтов - uCoz
Календарь
«  Февраль 2014  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
2425262728
Форма входа
Поиск по дневнику
Друзья сайта
Статистика