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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

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

Сообщения:  [1-10]   [11-19] 

 
 автор: Я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';
?>


Вроде всё

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

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

   
 
 автор: 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>

   
 
 автор: 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   (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 
'Файл не найден на сервере, обратитесь к администратору... ';       
?>

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

без цикла:

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

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

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

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

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

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

   
 
 автор: 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 в 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.' не найден на сервере, обратитесь к администратору... ';          
?>  

   

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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