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

Форум PHP

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

 

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

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

тема: Смайлики
 
 автор: PITbulik   (18.01.2012 в 18:06)   письмо автору
 
 

Здраствуйте, хотел добавить поддержку смайлов в гостевую, из за htmlspecialchars запутался в какое место пихнуть код $text = str_replace(':-)','<img src="image/smile/ab.gif">',$text);


<? include('db.php'); 
  
// Переменная хранит число сообщений выводимых на станице  
$num 5;  
// Извлекаем из URL текущую страницу  
$page $_GET['page'];  
// Определяем общее число сообщений в базе данных  
$result mysql_query("SELECT COUNT(*) FROM gos_k");  
$posts mysql_result($result0);  
// Находим общее число страниц  
$total intval(($posts 1) / $num) + 1;  
// Определяем начало сообщений для текущей страницы  
$page intval($page);  
// Если значение $page меньше единицы или отрицательно  
// переходим на первую страницу  
// А если слишком большое, то переходим на последнюю  
if(empty($page) or $page 0$page 1;  
  if(
$page $total$page $total;  
// Вычисляем начиная к какого номера  
// следует выводить сообщения  
$start $page $num $num;  

/////////////////////////////////
$pr_chislo2 rand(00000,99999);
$pr_chislo_s_2 $pr_chislo2;

if(isset(
$_POST['name']) and strlen($_POST['name'])>=3) {$name $_POST['name'];} else {unset($name);}
if(isset(
$_POST['text']) and strlen($_POST['text'])>=3) {$text $_POST['text'];} else {unset($text);}
if(isset(
$_POST['data'])) {$data $_POST['data'];} else {unset($data);}
if(isset(
$_POST['time'])) {$time $_POST['time'];} else {unset($time);}

$data str_replace("January","января",$data);     //Руссифицируем месяца
$data str_replace("February","февраля",$data);
$data str_replace("March","марта",$data);
$data str_replace("April","апреля",$data);
$data str_replace("May","мая",$data);
$data str_replace("June","июня",$data);
$data str_replace("July","июля",$data);
$data str_replace("August","августа",$data);
$data str_replace("September","сентября",$data);
$data str_replace("October","октября",$data);
$data str_replace("November","ноября",$data);
$data str_replace("December","декабря",$data);

if(isset(
$_POST['pr_chislo']) and !empty($_POST['pr_chislo']) and is_numeric($_POST['pr_chislo']))   
{
$pr_chislo $_POST['pr_chislo'];}     else {unset($pr_chislo);}
if(isset(
$_POST['pr_chislo_s']) and !empty($_POST['pr_chislo_s']) and is_numeric($_POST['pr_chislo_s'])) 
{
$pr_chislo_s $_POST['pr_chislo_s'];} else {unset($pr_chislo_s);}

if(isset(
$pr_chislo) and isset($pr_chislo_s) and $pr_chislo == $pr_chislo_s) {unset($pr_chislo_s); $pr_chislo='true';} else {unset($pr_chislo_s); $pr_chislo='false';}

if(
$pr_chislo == 'true')
{
if(isset(
$name)) 
{
$name=stripslashes($name);
$name=htmlspecialchars($name);
}
if(isset(
$text)) 
{
$text=stripslashes($text);
$text=htmlspecialchars($text);
}
if(isset(
$name) and isset($text))
{
mysql_query("insert into `gos_k` (`name`,`text`,`data`,`time`) values ('$name','$text','$data','$time')");
}
}

?>
<table class="g_t">
  <tr>
    <td>        
        <?php 

// Выбираем $num сообщений начиная с номера $start  
$result mysql_query("SELECT * FROM gos_k LIMIT $start$num");  
// В цикле переносим результаты запроса в массив $postrow          
        
echo "<table class='g_t2'>"
while (
$postrow mysql_fetch_array($result))

 echo 

<tr> 
    <td class='n'>"
.$postrow['name']. " | " .$postrow['time'].  " | " .$postrow['data']."</td> 
</tr> 
<tr> 
    <td class='t'>"
.$postrow['text']."</td> 
</tr>"

}
echo 
"</table>";
        
        
        
// Проверяем нужны ли стрелки назад  
if ($page != 1$pervpage '<a href= ./index.php?page=1><<</a>  
                               <a href= ./index.php?page='
. ($page 1) .'><</a> ';  
// Проверяем нужны ли стрелки вперед  
if ($page != $total$nextpage ' <a href= ./index.php?page='. ($page 1) .'>></a>  
                                   <a href= ./index.php?page=' 
.$total'>>></a>';  

// Находим две ближайшие станицы с обоих краев, если они есть  
if($page 0$page2left ' <a href= ./index.php?page='. ($page 2) .'>'. ($page 2) .'</a> | ';  
if(
$page 0$page1left '<a href= ./index.php?page='. ($page 1) .'>'. ($page 1) .'</a> | ';  
if(
$page <= $total$page2right ' | <a href= ./index.php?page='. ($page 2) .'>'. ($page 2) .'</a>';  
if(
$page <= $total$page1right ' | <a href= ./index.php?page='. ($page 1) .'>'. ($page 1) .'</a>'
        
        
?>
    </td>
  </tr>
  <tr>
    <td>
        <?php // Вывод меню  
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage?>
    </td>
  </tr>
  <tr>
    <td>
        <form action="" method="post" name="form">
        <p><input name="name" type="text"></p>
        <p> <textarea name="text" cols="50" rows="5"></textarea> <br>
        <?
            
echo $pr_chislo_s_2;
         
?>
        <br>
        <input name="pr_chislo" type="text" size="12">
        <input name="data" type="hidden" value="<? echo date("d F, Y");?>">
        <input name="time" type="hidden" value="<? echo date("H:i:s");?>">
        <input name="pr_chislo_s" type="hidden" value="<? echo $pr_chislo_s_2;?>">
        <input name="submit" type="submit" value="Написать"></p>
        </form>

    </td>
  </tr>
</table>

  Ответить  
 
 автор: PITbulik   (18.01.2012 в 18:37)   письмо автору
 
   для: PITbulik   (18.01.2012 в 18:06)
 

Надеюсь суть вопроса ясень. Если нет спрашивайте.

  Ответить  
 
 автор: Igorek   (18.01.2012 в 20:00)   письмо автору
 
   для: PITbulik   (18.01.2012 в 18:06)
 

if(isset($text))  

$text=stripslashes($text); 
$text=htmlspecialchars($text); 


видимо в этом условии надо добавить ваш код. вопрос только встречный - зачем удалять экранирующие символы и преобразовывать спец. символы в HTML-сущности перед записью в БД?
по-моему логика использования этих функций "слегка" нарушена.

  Ответить  
 
 автор: PITbulik   (18.01.2012 в 22:56)   письмо автору
 
   для: Igorek   (18.01.2012 в 20:00)
 

Благодарю за помощь.
Хотел таким образом защититься от злого кода.
$text=stripslashes($text);
$text=htmlspecialchars($text);
Лучше при выводе с БД проверять?

  Ответить  
 
 автор: Igorek   (19.01.2012 в 07:38)   письмо автору
 
   для: PITbulik   (18.01.2012 в 22:56)
 

http://php.net/manual/ru/function.mysql-real-escape-string.php
читаем здесь про экранирование перед записью в MySQL (не забываем примечания)

что касается htmlspecialchars (http://php.net/manual/ru/function.htmlspecialchars.php):
>Эта функция полезна при отображении данных, введенных пользователем, которые могут содержать нежелательные HTML тэги, например в форуме или гостевой книге.

например, вывести тег <script> и его содержимое как оно есть, без выполнения кода

  Ответить  
 
 автор: PITbulik   (19.01.2012 в 13:50)   письмо автору
 
   для: Igorek   (19.01.2012 в 07:38)
 

Спасибо, все понял)

  Ответить  
 
 автор: PITbulik   (19.01.2012 в 15:28)   письмо автору
 
   для: Igorek   (19.01.2012 в 07:38)
 

Появились еще вопросики:
Такой код правильный?

<?
if(isset($name) and isset($text) and $pr_chislo=='true')
{
[
b]mysql_real_escape_string($text);[/b]
mysql_query("insert into `gos_k` (`name`,`text`,`data`,`time`) values ('$name','$text','$data','$time')");
}
?>


-----------------------------------------------------------
И еще когда я пытаюсь добавить ссылки

<a href='http://google.ru'>Link</a>
http://ya.ru
Проверка ссылок.

то в базу ничего не добавляется, в чем может быть причина?

  Ответить  
 
 автор: PITbulik   (19.01.2012 в 17:21)   письмо автору
 
   для: PITbulik   (19.01.2012 в 15:28)
 

Подскажите пожалуйста

  Ответить  
 
 автор: Igorek   (19.01.2012 в 19:20)   письмо автору
 
   для: PITbulik   (19.01.2012 в 15:28)
 

1. экранирование надо применять для всех потенциально опасных данных.
2. $pr_chislo - видимо предполагалось, что это будет boolean переменная? если да, то и используйте соответствующие значения TRUE, FALSE вместо строковых литералов.
3. для isset можно передавать переменное количество параметров. т.е.
isset($name, $text) == TRUE только если обе переменные установлены
4. Вам действительно нужно запоминать дату и время генерации страницы и потом записывать её в БД (судя потому, что вы их в hidden поля записываете). Или все же фактическую дату создания записи в БД?
5. Проще всего определить почему некорректно добавляются данные в базу (т.е. некорректно построен SQL запрос) - это вывести этот самый запрос перед выполнением и проанализировать его на предмет ошибок

  Ответить  
Rambler's Top100
вверх

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