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

Форум PHP

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

 

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

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

тема: мини-движок для сайта (попытка №2)
 
 автор: dedev   (30.10.2006 в 11:27)
 
 

Хотелось бы как-то автоматизировать и облегчить себе работу.
Опыта мало, имею код, но проблема с добавлением мета-тегов к каждой странице, страниц много, поэтому писать мета-теги в главной станице для всего сайта не удобно.

<?php        
if(isset($go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go)){      
$file=$go.'.htm';       
}       
else 
$file='main.htm'//страница main.htm если переменная       
                  // $go не задана, иначе файл типа .htm с именем $go        
if (file_exists($file)) //если файл существует        
include ($file); // добавляем страницу        
else        
echo 
'Файл '.$file.' не найден на сервере, обратитесь к администратору... ';        
?>

Если есть более элегантное решение и код безопасного мини-движка не засекречен, хотелось бы посмотреть, а по возможности и воспользоваться.

P.S. нужен мини-мини-движок
P.P.S. В приведенном коде мне импонирует то, что все находится в одном файле и оттуда происходит вызов всех остальных страниц. Да и с безопасностью в приведенном коде вроде все более-менее.

Спасибо.

   
 
 автор: DEM   (30.10.2006 в 12:18)   письмо автору
 
   для: dedev   (30.10.2006 в 11:27)
 

Возможно мне только так кажется, но вроде бы здесь используется РЕГИСТЕР_ГЛОБАЛ=ОН... а он сам по себе не безопасен

   
 
 автор: dedev   (30.10.2006 в 12:49)
 
   для: DEM   (30.10.2006 в 12:18)
 

>Возможно мне только так кажется, но вроде бы здесь используется РЕГИСТЕР_ГЛОБАЛ=ОН... а он сам по себе не безопасен

Знаний на большее пока не хватает, поэтому и обратился
С увеличением опыта и знаний будем изменять и улучшать, а пока имею то, что имею

   
 
 автор: cheops   (30.10.2006 в 12:29)   письмо автору
 
   для: dedev   (30.10.2006 в 11:27)
 

Ваш движок использует базу данных?

   
 
 автор: ЯR   (30.10.2006 в 12:31)   письмо автору
 
   для: cheops   (30.10.2006 в 12:29)
 

Если да, то делай как я говорил.

   
 
 автор: dedev   (30.10.2006 в 12:54)
 
   для: ЯR   (30.10.2006 в 12:31)
 

>Если да, то делай как я говорил.

<?php
$db 
sqlite_open("metadata.db");  
if (
$query sqlite_query($db"SELECT * FROM metadata WHERE page='".str_replace("'""`"$_SERVER['REQUEST_URI'])."'")) {  
        if (
sqlite_num_rows($query) > 0) {  
            
$meta_data sqlite_fetch_array($query);  
            
$title $meta_data;  

        }  
}  
print 
"<title>{$title}</title>";  
?>

Пишет переменная неопределенна

   
 
 автор: ЯR   (30.10.2006 в 13:14)   письмо автору
 
   для: dedev   (30.10.2006 в 12:54)
 

<?php 
$db 
sqlite_open("metadata.db");   
if (
$query sqlite_query($db"SELECT * FROM metadata WHERE page='".str_replace("'""`"$_SERVER['REQUEST_URI'])."'")) {   
        if (
sqlite_num_rows($query) > 0) {   
            
$meta_data sqlite_fetch_array($query);   
            
$title $meta_data['title'];  // наверное надо так

        
}   
}   
print 
"<title>{$title}</title>";   
?>

   
 
 автор: dedev   (30.10.2006 в 12:45)
 
   для: cheops   (30.10.2006 в 12:29)
 

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

Поэтому я в поиски достаточного простого, элегантного и безопасного движка

   
 
 автор: dedev   (30.10.2006 в 13:38)
 
   для: dedev   (30.10.2006 в 12:45)
 

Нельзя ли чуть подправить
При загрузки главной страницы заголовок title не отображается

<?php  
$titles
[] = 'Сайт';  
$titles['news'] = 'Новости';  
$titles['articles'] = 'Статьи';  
if(isset(
$go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go)){  
if(
preg_match('#^([a-z0-9_]+)/[a-z0-9_\.]+$#iU'$go$regs)) $dir_name $regs[1];  
else 
$dir_name 0;  

print 
"<title>{$titles[$dir_name]}</title>";  
// и т.д.  
}  
   
if(isset(
$go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go)){       
$file=$go.'.htm';        
}        
else 
$file='main.htm'//страница main.htm если переменная        
                  // $go не задана, иначе файл типа .htm с именем $go         
if (file_exists($file)) //если файл существует         
include ($file); // добавляем страницу         
else         
echo 
'Файл '.$file.' не найден на сервере, обратитесь к администратору... ';         
?>  

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

   
 
 автор: ЯR   (30.10.2006 в 14:49)   письмо автору
 
   для: dedev   (30.10.2006 в 13:38)
 


<?php   
$titles
['main'] = 'Сайт';   
$titles['news'] = 'Новости';   
$titles['articles'] = 'Статьи';   
if(isset(
$go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go)){   
if(
preg_match('#^([a-z0-9_]+)/[a-z0-9_\.]+$#iU'$go$regs)) $dir_name $regs[1];   
if(empty(
$dir_name)) $dir_name 'main';

print 
"<title>{$titles[$dir_name]}</title>";   
// и т.д.   
}   
    
if(isset(
$go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go)){        
$file=$go.'.htm';         
}         
else 
$file='main.htm'//страница main.htm если переменная         
                  // $go не задана, иначе файл типа .htm с именем $go          
if (file_exists($file)) //если файл существует          
include ($file); // добавляем страницу          
else          
echo 
'Файл '.$file.' не найден на сервере, обратитесь к администратору... ';          
?>  

   
 
 автор: dedev   (30.10.2006 в 15:57)
 
   для: ЯR   (30.10.2006 в 14:49)
 

сделал с базой

<?php 
  
// Создадим новую базу данных 
  
$db sqlite_open("metadata.db"); 
  
// Сделаем выборку данных 
  
$res sqlite_query($db"SELECT * FROM metadata WHERE page = '".@$go."';"); 
  
// В цикле выведем все полученные данные 
  
while ($array sqlite_fetch_array($res))  
  { 
    echo(
"<title>".@$array['title']."</title>"); 
  } 
?> 

вроде работает
как ды этот код оптимизировать, если возможно

   
 
 автор: ЯR   (30.10.2006 в 17:11)   письмо автору
 
   для: dedev   (30.10.2006 в 15:57)
 

А зачем в цикле выводить? Ведь для каждой странице только одна запись в таблице

   
 
 автор: dedev   (30.10.2006 в 18:14)
 
   для: ЯR   (30.10.2006 в 17:11)
 

>А зачем в цикле выводить? Ведь для каждой странице только одна запись в таблице

подскажите как лучше

   
 
 автор: ЯR   (30.10.2006 в 18:26)   письмо автору
 
   для: dedev   (30.10.2006 в 18:14)
 

без цикла:

$array = sqlite_fetch_array($res);
echo("<title>".@$array['title']."</title>");

   
 
 автор: dedev   (31.10.2006 в 23:07)   письмо автору
 
   для: ЯR   (30.10.2006 в 18:26)
 

Подскажите как сделать, чтобы вместо последней строчки “Файл не найден на сервере, обратитесь к администратору...”, вызывался другой файл методом include

<?php
//движок       
if(isset($go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go)){     
$file=$go.'.htm';      
}      
else 
$file='main.htm';  //страница main.htm если переменная      
                        // $go не задана, иначе файл типа .htm с именем $go       
if (file_exists($file)) //если файл существует       
include ($file);        // добавляем страницу       
else 
echo 
'Файл не найден на сервере, обратитесь к администратору... ';       
?>

   
 
 автор: DEM   (31.10.2006 в 23:10)   письмо автору
 
   для: dedev   (31.10.2006 в 23:07)
 


<?php 
//движок        
if(isset($go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go)){      
$file=$go.'.htm';       
}       
else 
$file='main.htm';  //страница main.htm если переменная       
                        // $go не задана, иначе файл типа .htm с именем $go        
if (file_exists($file)) //если файл существует        
include ($file);        // добавляем страницу        
else  
include (
$file2);       
?> 

   
 
 автор: dedev   (01.11.2006 в 10:30)   письмо автору
 
   для: DEM   (31.10.2006 в 23:10)
 

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

<html><head>
<link rel="stylesheet" type="text/css" href="/inc/stily.css">
<?php 
  
// Создадим новую базу данных 
  
$db sqlite_open("sity.db"); 
  
// Сделаем выборку данных 
  
$res sqlite_query($db"SELECT * FROM metadata WHERE page = '".@$go."';"); 
  
// В цикле выведем все полученные данные 
$array sqlite_fetch_array($res); 
echo(
"<title>".@$array['title']."</title>\n");
echo(
"<META content='".@$array['title']."' name=description>\n");
echo(
"<META content='".@$array['title']."' name=keywords>");
?> 

<center>шапка</center><br>

<?php    
// верхняя навигация
$titles['qqq'] = '<p align="right"><a href="/index.html">главная</a> / <a href="index.htm">новости</a></p>';    
$titles['test'] = '<p align="right"><a href="/index.html">главная</a> / <a href="index.htm">онлайн тесты</a></p>';
$titles['articles'] = 'Статьи ';    
if(isset(
$go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go)){    
if(
preg_match('#^([a-z0-9_]+)/[a-z0-9_\.]+$#iU'$go$regs)) $dir_name $regs[1];    

@print 
"{$titles[$dir_name]}";    
}     
?>

<table width="100%" border="0" cellpadding="10" cellspacing="0">
<tr><td width="150" class="cl" valign="top">
<a href="/index.html">Главная</a><br>
<a href="/test/1.htm">Онлайн тест</a><br>
<a href="/qqq/foto.htm">Мои фотки</a><br>
<a href="/gues.htm">Гостевая</a><br>
<a href="/qqq/tvor.htm">Мое творчество</a><br>
</td><td>

<?php  
//движок         
$file1 'error.htm';
if(isset(
$go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go)){       
$file=$go.'.htm';        
}        
else 
$file='main.htm';  //страница main.htm если переменная        
                        // $go не задана, иначе файл типа .htm с именем $go         
if (file_exists($file)) //если файл существует         
include ($file);        // добавляем страницу         
else   
include (
$file1);    //    если не найдена страница
?>  
 
</td></tr></table>
<br><center>подвал</center>
</body></html>

   
 
 автор: Panker   (02.11.2006 в 01:17)   письмо автору
 
   для: dedev   (01.11.2006 в 10:30)
 

рекламная пауза :) http://www.softtime.ru/info/homecms.php

   
 
 автор: ЯR   (02.11.2006 в 03:38)   письмо автору
 
   для: dedev   (01.11.2006 в 10:30)
 

1) надо переменную $go защищать примерно так (она ведь из URL берётся?):

<?php
if (get_magic_quotes_gpc()) $var stripslashes($var); // убираем обратные слэши
// а перед запрос в БД надо делать так (чтобы защититься от SQL-инъекции):
$res sqlite_query($db"SELECT * FROM metadata WHERE page = '".sqlite_escape_string(@$go)."';");


?>

2) А почему в title, keywords и description одна и таже переменная, так и надо?
3) Верхнюю навигацию можно так же, как и meta-данные занести в БД (будет удобнее ИМХО)
4)

<?php
if(isset($go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go)){     
if(
preg_match('#^([a-z0-9_]+)/[a-z0-9_\.]+$#iU'$go$regs)) $dir_name $regs[1];     

@print 
"{$titles[$dir_name]}";     
}
// ...
//движок          
$file1 'error.htm'
if(isset(
$go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go)){        
$file=$go.'.htm';         
}         
else 
$file='main.htm';  //страница main.htm если переменная         
                        // $go не задана, иначе файл типа .htm с именем $go

// тут лучше сразу сделать так:
$file1 'error.htm'
if(isset(
$go)  && preg_match('#^([a-z0-9_]+/)?[a-z0-9_\.]+$#iU'$go$regs)){     
$dir_name $regs[1];
$file=$go.'.htm';     

@print 
"{$titles[$dir_name]}";     
}else 
$file='main.htm';
?>


Вроде всё

   
Rambler's Top100
вверх

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