Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2009, 21:22   #1
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
Радость Не работает htmlspecialchars()

Здравствуйте, уважаемые программисты!
Учился на сайте делать гостевую книгу. Вроде бы всё работает, но почему-то не хотят работать фишки для защиты текста от особо-умных.
Это htmlspecialchars(), stripslashes() и прочие. Они просто игнорируются!
Если у кого есть немного времени, то посмотрите, где может быть ошибка.
(скорее всего местоположение не то), сейчас находится в коде add.php

index.php
Код:
<html>
<head>
  <title>Гостевуха</title>
</head>
<body>
<?php include("read.php"); ?>
<br/>
<form name="" action="add.php" method="post">
Имя:<input name="data[0]" type="text" value=""><br/>
e-mail:<input name="data[1]" type="text" value=""> <br/>
<textarea name="data[2]" rows=5 cols=20 wrap="off"></textarea>
<br/>
<input type="submit" name="add" value="добавить"> <br/>
</form>
</body>
</html>
add.php
Код:
<?php
$url="data.txt";
$name = htmlspecialchars(substr($_POST['data']['0'],0,20)));
$mail = htmlspecialchars(substr($_POST['data']['1'],0,30)));
$text = htmlspecialchars(substr($_POST['data']['2'],0,300)));


if($_POST['add'] != '') {
    if($name != '') {
        if($mail !='') {
            if($text != '') {
            if(!file_exists($url)) {

   //Если файла не существует, создаем его, и записываем нулевое значение
$data = implode("::",$_POST['data']);

$handle = fopen($url,"a");
fwrite($handle,$data."\n");
fclose($handle);
 echo "<a href=\"index.php\">посмотреть комментарий</a>";
}
else {
 //Если файл существует, то работаем с ним
$data = implode("::",$_POST['data']);
$handle = fopen($url,"a");
fwrite($handle,$data."\n");
fclose($handle);
 echo "<a href=\"index.php\">посмотреть комментарий</a>";
 }
 }
 else {echo "Введите коментарий";}
 }
 else {echo "Введите мэйл";}
 }
 else { echo "Введите имя"; }
 }
 else {echo "<a href=\"index.php\">назад</a>";  };
?>
read.php
Код:
<?php

$url="data.txt"; //путь до файл
$content = file($url);//Получаем массив строк
$name=htmlspecialchars($name);
$mail=htmlspecialchars($mail);
$text=htmlspecialchars($text);
    for($i=0;$i<=count($content)-1;$i++) {//запускаем цикл
    list($name,$mail,$text) = explode("::",$content[$i]);//Разбиваем строку на нужные нам данные
    echo "<a href=\"mailto:$mail\">$name</a>
    <br/>$text<br/><br/>";//Выводим информацию в браузер
                                      }

?>
SwiP вне форума Ответить с цитированием
Старый 23.03.2009, 08:35   #2
Jensi
beneto.ru
Форумчанин
 
Регистрация: 09.03.2009
Сообщений: 174
Подмигивание

1) http://www.softtime.ru/bookphp/gl11_1.php
2)Что за...
PHP код:
$name htmlspecialchars(substr($_POST['data']['0'],0,20)));
$mail htmlspecialchars(substr($_POST['data']['1'],0,30)));
$text htmlspecialchars(substr($_POST['data']['2'],0,300))); 
и
PHP код:
$name=htmlspecialchars($name);
$mail=htmlspecialchars($mail);
$text=htmlspecialchars($text); 
В файле read.php не должно быть этого:
PHP код:
$name=htmlspecialchars($name);
$mail=htmlspecialchars($mail);
$text=htmlspecialchars($text); 
Проверка делается сразу после ввода(обычно),а потом происходит запись в файл,далее должен безопасно вытащить всю инфу.
Короче, вот ещё посмотри и переделай:
PHP код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
    <title>Fuck off, nigga!</title>
</head>
<body>

<h2>Добавить комментарий</h2>

<?

// считываем файл comments.txt и превращаем его в массив
$comments=unserialize(file_get_contents('comments.txt'));

// если файл битый или не существует, обнуляем массив
if(gettype($comments)!='array')$comments=array();

// если нажали "добавить коммент"
if($_POST['submit']=='1'){
    
// проверка формы на заполненность
    
if($_POST['name']==''||$_POST['mail']==''||$_POST['text']=='')
        echo 
'<div style="border: 1px solid red; padding: 10px; margin: 10px 0;">Пожалуйста, заполните форму.</div>';
    else{
        
// добавляем к массиву новую запись
        
$comments[]=array(
            
'name'=>base64_encode($_POST['name']),
            
'mail'=>base64_encode($_POST['mail']),
            
'comment'=>base64_encode($_POST['text'])
        );
        
        
// открываем файл для записи и записываем
        
$desc=@fopen('comments.txt','wt');
        @
fwrite($desc,serialize($comments));
        @
fclose($desc);
        
$_POST=array();
    }
}

?>
<form action="index.php" method="post" style="background: silver; padding: 5px;">
    <b>Ваше имя:</b><br/>
    <input type="text/" name="name" value="<?=htmlspecialchars($_POST['name'])?>"/><br/>
    <br/>
    <b>Ваше мыло:</b><br/>
    <input type="text/" name="mail" value="<?=htmlspecialchars($_POST['mail'])?>"/><br/>
    <br/>
    <b>Комментарий:</b><br/>
    <textarea cols="50" rows="10" name="text"><?=htmlspecialchars($_POST['text'])?></textarea>
    <br/>
    <button type="submit" name="submit" value="1">Добавить</button>
    <br/>
</form>

<h2>Комменты юзеров</h2>

<?

// вывод комментариев
foreach($comments as $v){
    
// base64_decode - функция, которая превращает строку в однородную симвользую строку,
    // удобную для хранения и передачи
    
$v['name']=base64_decode($v['name']);
    
$v['mail']=base64_decode($v['mail']);
    
$v['comment']=base64_decode($v['comment']);
    echo 
'
        <div style="margin: 10px 0; padding: 10px 0; border-bottom: 1px solid gray;">
            <b><a href="mailto:'
.htmlspecialchars($v['mail']).'">'.
            
htmlspecialchars($v['name']).'</a>:</b><br/>
            <blockquote>'
.nl2br(htmlspecialchars($v['comment'])).'</blockquote>
        </div>'
;
}


?>

</body>
</html>
Тот код просто фиговый и тяжело что-то толком понять,делай всё в одном файле,а не разбивай на 3 штуки аж)
А ещё лучше,пиши гостевую с БД,я раньше тоже такой фигнёй страдал,типо на файлах лучше всего и т.д.,а оказалось,что фиг меня заставишь писать скрипты,которые не " пользуются " БД

Последний раз редактировалось Jensi; 23.03.2009 в 08:37.
Jensi вне форума Ответить с цитированием
Старый 23.03.2009, 10:58   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

да.... много непоняток... много дублирования и непонятных шагов...

все ваши преобразования непонятно для чего, если потом пишете в файл

PHP код:
$data implode("::",$_POST['data']); 
то есть "сырые данные"
ADSoft вне форума Ответить с цитированием
Старый 23.03.2009, 12:33   #4
spein
Программист
Форумчанин
 
Аватар для spein
 
Регистрация: 27.02.2009
Сообщений: 505
По умолчанию

по моему Вам следует вернутся к началу т.е. к алгоритмам. Потом уже писать скрипті
there are no limits when you're software engineer
spein вне форума Ответить с цитированием
Старый 23.03.2009, 14:17   #5
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

Jensi
Я по тому учебнику и учился, что у тя в ссылке. Но почему-то ихний код гостевой у мя не работает. Пишет, что не введено имя и сообщение.
А твой код гостевой тож чё-то глючит, пишу сообщение, жму добавить, но ничего не происходит, и ничего в comments.txt не добавляется...
SwiP вне форума Ответить с цитированием
Старый 23.03.2009, 22:32   #6
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

Есть какие-нить идеи?
SwiP вне форума Ответить с цитированием
Старый 24.03.2009, 03:47   #7
Jensi
beneto.ru
Форумчанин
 
Регистрация: 09.03.2009
Сообщений: 174
Радость

может у тебя сервер тупит? У меня этот код отлично раньше работал,сейчас лень тестить)
Идеи:
1)Учи PHP по нормальным книгам
2)Как поймёшь работу с файлами,так учи массивы
3)Учишь ещё много всего
4)Берёшь свой|мой|любой другой скрипт и переделываешь его под себя
5)Удаляешь этот скрипт как можно дальше и на всегда и далее...
6)Учишь MySQL и делаешь за 120 мин нормальную гостевую и не паришься!

Собственно,что за сервер используешь?
Если денвер, то удаляй его,я сайт блин делал два месяца и потом поставил на сервер(хостинг),так блин пришлось всё переделывать и в итоге установил себе топсервер,всё отлично)

p.s.: всё,что я написал - на полном серьёзе и без приколов

Последний раз редактировалось SkyM@n; 24.03.2009 в 08:06.
Jensi вне форума Ответить с цитированием
Старый 24.03.2009, 08:08   #8
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Цитата:
Сообщение от Jensi Посмотреть сообщение
p.s.: всё,что я написал - на полном серьёзе и без приколов
все что ты написал - флуд и никому не нужный пост из-за свой коллосальной полезности.
SkyM@n вне форума Ответить с цитированием
Старый 24.03.2009, 15:36   #9
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
Подмигивание

Код:
Собственно,что за сервер используешь?
Apache 2.2 + PHP5. MySQL ещё не ставил, сначала хочу разобраться с ПХП.
SwiP вне форума Ответить с цитированием
Старый 25.03.2009, 15:25   #10
Jensi
beneto.ru
Форумчанин
 
Регистрация: 09.03.2009
Сообщений: 174
По умолчанию

Цитата:
сначала хочу разобраться с ПХП.
Переделай код на удобочитаемый, сразу после формы ставишь hamlspecialchars и огромная просьба,не инклудь во все стороны файлы,эту гостевую можно написать в одном файле
Jensi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает тег align=right?valign работает а align нет! aviv HTML и CSS 5 21.01.2009 17:46
Проблема с UserForm. То работает, то НЕ работает Maxx Microsoft Office Excel 6 19.11.2008 14:51
не работает! RECREATOR Общие вопросы Delphi 6 29.11.2007 12:42
Не работает try except!!! Radost БД в Delphi 17 03.06.2007 11:07