поле для комментариев с использованием php
7958
19
Mihail2002
junior
Недавно возникла сложность с написанием скрипта поля для комментариев. Сложность в том что мне нужно чтобы все когда либо введенные тексты сохранялись отдельном текстовом файле, а у меня текст выводится просто в новой вкладке. Вот сам скрипт с формой отправки комментария (скажите пожалуйста что надо добавить или изменить):
<?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>';
}
?>
<?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>';
}
?>
KSergey
guru
$name = fopen("comment.php", "w");Я не понял, вы хотите сохранять комментарии в файл comment.php??
fwrite($name, "");
Mihail2002
junior
Нет, я случайно написал "php". Вообще я хочу чтобы комментарии сохранялись в текстовом файле comment.txt
KSergey
guru
На сколько я понимаю, надо что-то вроде такого написать (в синтаксисе могу приврать, с php общаюсь редко)
<?php
if (isset($_GET['name'])) {
$name = fopen("comment.txt", "w");
fwrite($name, $_GET['name']);
fclose($name);
}
else {
<?php
if (isset($_GET['name'])) {
$name = fopen("comment.txt", "w");
fwrite($name, $_GET['name']);
fclose($name);
}
else {
Mihail2002
junior
Спасибо за скрипт, очень помогло!
Mihail2002
junior
Я попробовал внедрить скрипт в сайт расположенный на моем компе (открываю с помощью денвера) - работает нормально. Но как только я выложил его на просторы интернета, то комментарии в отдельный файл начали сохраняться через раз, или вовсе, не сохраняться.
KSergey
guru
Пора смотреть на ошибки записи в файл, проставить верные атрибуты (доступен для записи) на comment.txt
Сейчас читают
Красота и беременность (часть 40)
180346
1000
Кот Гога. Очень нужна помощь
44823
261
Дневной дозор
60770
1000
Mihail2002
junior
А какого рода могут быть ошибки и к какому тегу атрибуты?
KSergey
guru
Ошибки дешевле смотреть по месту, зачем гадать?
Mihail2002
junior
вот сам скрипт (а сам а файл куда все должно сохраняться называется 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
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>';}
?>
KSergey
guru
В гугле вбиваем:
"как узнать ошибки записи файл php"
"как включить отображение ошибок php"
"как узнать ошибки записи файл php"
"как включить отображение ошибок php"
Mihail2002
junior
Я попробовал добавить в скрипт несколько другой атрибут вместо:
$name = fopen("comment.txt", "w");
fwrite($name, $_GET['name']);
я написал :
$name = fopen("comment.txt", "a-");
fwrite($name, $_GET['name']);
и все равно не получается нормально сохранить коммент
$name = fopen("comment.txt", "w");
fwrite($name, $_GET['name']);
я написал :
$name = fopen("comment.txt", "a-");
fwrite($name, $_GET['name']);
и все равно не получается нормально сохранить коммент
KSergey
guru
Есть хороший анекдот на эту тему. И не один.
Я вам уже посоветовал правильный путь, более мне, увы, сказать нечего.
Я вам уже посоветовал правильный путь, более мне, увы, сказать нечего.
Mihail2002
junior
Насчет проблемы по поводу сохранения - все решено! Только все сохраняется в php-файле. Одна проблема, как расположить каждый новый комментарий на новой строке (они располагаются все в одну строку)? Вот например
в html это <br>, но в php я не знаю какой скрипт переносит текст на новою строку. Подскажите пожалуйста этот скрипт.
в html это <br>, но в php я не знаю какой скрипт переносит текст на новою строку. Подскажите пожалуйста этот скрипт.
KSergey
guru
гугль "php перенос строки"
Вы как вообще жить собираетесь при таком подходе? скоро деньги требовать начну, сугубо в воспитательных целях!
fwrite($name, $_GET['name'] . "\n");
Вы как вообще жить собираетесь при таком подходе? скоро деньги требовать начну, сугубо в воспитательных целях!
fwrite($name, $_GET['name'] . "\n");
Mihail2002
junior
Спасибо! У меня комментарии хранятся в блоках (div), но каждый новый новый комментарий выводится под предыдущим. Что мне исправить в том скрипте чтобы каждый новый комментарий выводился над каждым предыдущим (то есть самы последний комментарий в самом верху, а самый первый комментарий внизу веб страницы). Или мне вообще мыслить в другом направлении? Подскажите пожалуйста, что мне надо сделать чтобы реализовать сказанное мной выше!
KSergey
guru
порядок вывода блоков в скрипте изменить следует.
Ваш КО
Зы
Можете привести sql скрипт, которым выборка комментариев из базы осуществляется?
Ваш КО
Зы
Можете привести sql скрипт, которым выборка комментариев из базы осуществляется?
Mihail2002
junior
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>';}
?>
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
junior
Скажите пожалуйста, что надо изменить в следещем скрипте, чтобы он нормально функционировал:
$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. Метод не гет - как было раньше, а пост.
$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. Метод не гет - как было раньше, а пост.
lenchik_
activist
попробуйте задать вопрос здесь http://www.cyberforum.ru/php-beginners/
- обязательно используйте таг code, что бы код был форматированным и его можно было легко читать, иначе вам отвечать никто не будет.
- обязательно используйте таг code, что бы код был форматированным и его можно было легко читать, иначе вам отвечать никто не будет.
ТОП 5
1
2
3
4