Погода: 1 °C
22.11−6...−2переменная облачность, небольшой снег
23.11−12...−9пасмурно, без осадков
НГС.Форум /Компьютеры Интернет Связь / Программирование /

поле для комментариев с использованием php

  • Недавно возникла сложность с написанием скрипта поля для комментариев. Сложность в том что мне нужно чтобы все когда либо введенные тексты сохранялись отдельном текстовом файле, а у меня текст выводится просто в новой вкладке. Вот сам скрипт с формой отправки комментария (скажите пожалуйста что надо добавить или изменить):

    <?php
    if (isset($_GET['name'])) {
    echo '' . $_GET['name'];

    $name = fopen("comment.php", "w");
    fwrite($name, "");
    $var = fopen("comment.php", "r");
    echo fgets($name);
    fclose($name);
    }
    else {
    echo '<p>введите ваш отзыв</p><br>';
    echo '<form class="form1" action="' . $_SERVER['SCRIPT_NAME'] . '">';
    echo '<textarea name="name" ></textarea>';
    echo '<input type="submit" value="OK" >';
    echo '</form><br>';
    }
    ?>

  • В ответ на: $name = fopen("comment.php", "w");
    fwrite($name, "");
    Я не понял, вы хотите сохранять комментарии в файл comment.php??

  • Нет, я случайно написал "php". Вообще я хочу чтобы комментарии сохранялись в текстовом файле comment.txt

  • На сколько я понимаю, надо что-то вроде такого написать (в синтаксисе могу приврать, с php общаюсь редко)

    <?php
    if (isset($_GET['name'])) {
    $name = fopen("comment.txt", "w");
    fwrite($name, $_GET['name']);
    fclose($name);
    }
    else {

  • Спасибо за скрипт, очень помогло!

  • Я попробовал внедрить скрипт в сайт расположенный на моем компе (открываю с помощью денвера) - работает нормально. Но как только я выложил его на просторы интернета, то комментарии в отдельный файл начали сохраняться через раз, или вовсе, не сохраняться.

  • Пора смотреть на ошибки записи в файл, проставить верные атрибуты (доступен для записи) на comment.txt

  • А какого рода могут быть ошибки и к какому тегу атрибуты?

  • Ошибки дешевле смотреть по месту, зачем гадать?

  • вот сам скрипт (а сам а файл куда все должно сохраняться называется comment.txt):
    <?php
    if (isset($_GET['name'])) {
    $name = fopen("comment.txt", "w");
    fwrite($name, $_GET['name']);
    fclose($name);
    }
    else {

    echo '<form class="form1" action="' . $_SERVER['SCRIPT_NAME'] . '">';
    echo '<textarea name="name" placeholder="введите ваш отзыв о сайте"></textarea>';
    echo '<input type="submit" value="отправить" class="sub">';
    echo '</form>';}
    ?>

  • В гугле вбиваем:
    "как узнать ошибки записи файл php"
    "как включить отображение ошибок php"

  • Я попробовал добавить в скрипт несколько другой атрибут вместо:
    $name = fopen("comment.txt", "w");
    fwrite($name, $_GET['name']);
    я написал :
    $name = fopen("comment.txt", "a-");
    fwrite($name, $_GET['name']);
    и все равно не получается нормально сохранить коммент

  • Есть хороший анекдот на эту тему. И не один.
    Я вам уже посоветовал правильный путь, более мне, увы, сказать нечего.

  • Насчет проблемы по поводу сохранения - все решено! Только все сохраняется в php-файле. Одна проблема, как расположить каждый новый комментарий на новой строке (они располагаются все в одну строку)? Вот например
    в html это <br>, но в php я не знаю какой скрипт переносит текст на новою строку. Подскажите пожалуйста этот скрипт.

  • гугль "php перенос строки"
    Вы как вообще жить собираетесь при таком подходе? скоро деньги требовать начну, сугубо в воспитательных целях!

    fwrite($name, $_GET['name'] . "\n");

  • Спасибо! У меня комментарии хранятся в блоках (div), но каждый новый новый комментарий выводится под предыдущим. Что мне исправить в том скрипте чтобы каждый новый комментарий выводился над каждым предыдущим (то есть самы последний комментарий в самом верху, а самый первый комментарий внизу веб страницы). Или мне вообще мыслить в другом направлении? Подскажите пожалуйста, что мне надо сделать чтобы реализовать сказанное мной выше!

  • порядок вывода блоков в скрипте изменить следует.
    Ваш КО

    Зы
    Можете привести sql скрипт, которым выборка комментариев из базы осуществляется?

  • Sql к сожалению не знаю, поэтому решил проблему без баз данных.
    date_default_timezone_set('Asia/Almaty');
    $month = date("F");
    switch ($month) {
    case "January": $month = "Января"; break;
    case "February": $month = "Февраля"; break;
    case "March": $month = "Марта"; break;
    case "April": $month = "Апреля"; break;
    case "May": $month = "Мая"; break;
    case "June": $month = "Июня"; break;
    case "July": $month = "Июля"; break;
    case "August": $month = "Августа"; break;
    case "September": $month = "Сентября"; break;
    case "October": $month = "Октября"; break;
    case "November": $month = "Ноября"; break;
    case "December": $month = "Декабря"; break;
    }$date = date('j ') . $month . date(' Y ');

    $time = date(' H:i ');
    if (isset($_GET['name']).($_GET['family']).($_GET['text'])) {


    file_put_contents("comment.php", "<div><p>" . $date . "года" . $time . "<br>от:<span> </span>" . $_GET['name'] . "<span> </span>" . $_GET['family'] . "<br><br>" . $_GET['text'] . "</p></div>".file_get_contents("comment.php"));
    echo "<script>alert('Ваше сообщение отправлено!');</script><meta http-equiv='refresh' content='0; url=http://webdisaignmikhail.besaba.com/mishashni.php'>";
    }
    else {
    echo '<form class="form1" action="' . $_SERVER['SCRIPT_NAME'] . '">';
    echo '<p class="super">ваше имя:</p>';
    echo '<input type="name" name="name" placeholder="ввведите ваше имя" required>';
    echo '<br><br><br><br><p class="super">ваша фамилия:</p>';
    echo '<input type="name" name="family" placeholder="ввведите вашу фамилию" style="margin-top:2px;" required>';
    echo '<br><br><br><br><p class="super">текст сообщения:</p>';
    echo '<textarea name="text" id="js" style="word-wrap: break-word;z-index:2;" maxlength="1600" class="text" placeholder="введите ваш отзыв о сайте и заинтересовали ли вас мои услуги " required></textarea>';
    echo '<input type="submit" value="отправить" class="sub"">';

    echo '</form><br>';}
    ?>

    Исправлено пользователем Mihail2002 (09.01.15 15:03)

  • Скажите пожалуйста, что надо изменить в следещем скрипте, чтобы он нормально функционировал:
    $new_data = strip_tags($_POST['text'], '<ol><ul><li><em><u><b>');
    if(mb_strlen($_POST['text']) !== strlen($new_data)){
    return exit("<p class='links'><span style='color:red;'>Не используйте запрещенный html!</span><br>Можно использовать как теги только: <br> <b>, <u>, <em>, <ul>, <li>, <ol>. <br>Вернитесь и исправьте свою ошибку <a href='javascript:history.go(-1)'>здесь</a>.</p>");
    }

    function closing_html($html){
    preg_match_all('#<(?!meta|img|br|hr|input\b)\b([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result);
    $openedtags = $result[ 1 ];
    preg_match_all('#</([a-z]+)>#iU', $html, $result);
    $closedtags = $result[ 1 ];
    $lenOpened = count($openedtags);
    if (count($closedtags) == $lenOpened)
    return true;
    $openedtags = array_reverse($openedtags);
    $countTags = 0;
    for ($i = 0; $i < $lenOpened; $i++)
    if (!in_array($openedtags[$i], $closedtags))
    $countTags++;
    return ($countTags) ? false : true;
    }

    $html = $text;

    if (!closing_html($html)) {
    return exit("<p class='links'><span style='color:red;'>Вы не закрыли один или несколько html тегов!</span><br>Вернитесь и исправьте свою ошибку <a href='javascript:history.go(-1)'>здесь</a>.</p>");
    }

    function closing_html_html($html_html) {
    preg_match_all('#<(?!meta|img|br|hr|input\b)\b([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html_html, $result);
    $closedtags = $result[ 1 ];
    preg_match_all('#</([a-z]+)>#iU', $html_html, $result);
    $openedtags = $result[ 1 ];
    $lenOpened = count($openedtags);
    if (count($closedtags) == $lenOpened)
    return true;
    $openedtags = array_reverse($openedtags);
    $countTags = 0;
    for ($i = 0; $i < $lenOpened; $i++)
    if (!in_array($openedtags[$i], $closedtags))
    $countTags++;
    return ($countTags) ? false : true;
    }

    $html_html = $text;

    if (!closing_html_html($html_html)) {
    return exit("<p class='links'><span style='color:red;'>Вы не закрыли один или несколько html тегов!</span><br>Вернитесь и исправьте свою ошибку <a href='javascript:history.go(-1)'>здесь</a>.</p>");
    }
    Проблема в том, что пользователь откроет один тег, и закроет другим, и сообщение отправляется (то бишь откроет в textarea b, а закроет em). Скажите пожалуйста, в чем проблема, как ее исправить, или есть альтернатива функциям приведенным мной ниже.
    P.S. Метод не гет - как было раньше, а пост.

    Исправлено пользователем Mihail2002 (05.02.15 17:28)

  • попробуйте задать вопрос здесь http://www.cyberforum.ru/php-beginners/

    - обязательно используйте таг code, что бы код был форматированным и его можно было легко читать, иначе вам отвечать никто не будет.

Записей на странице:

Перейти в форум

Модератор: