|
|
|
| Я попробовал улучшить php скрипт для написания отзывов, но он меня не слушает.
Сам скрипт рабочий и очень простой - не требует базы данных и сидит в теле страницы.
Вопрос, как добавить в php скрипт дату заполнения - год, месяц и число, а если можно то функцию отсылки сообщений о новых заполнениях с указанием страницы?
скрипт:
<?
// считываем файл comments.txt и превращаем его в массив
$comments=unserialize(file_get_contents('comments/comments.txt'));
// если файл битый или не существует, обнуляем массив
if(gettype($comments)!='array')$comments=array();
// если нажали "добавить коммент"
if($_POST['submit']=='1'){
if($_POST['date']=='d.m.Y - H:i');
// проверка формы на заполненность
if($_POST['name']==''||$_POST['tema']==''||$_POST['text']=='')
echo '<div style="COLOR: #ff0000; border: 1px solid red; padding: 10px; margin: 10px 0;">Пожалуйста, заполните форму.</div>';
else{
// добавляем к массиву новую запись
$comments[]=array(
'date'=>base64_encode($_POST['date']),
'name'=>base64_encode($_POST['name']),
'tema'=>base64_encode($_POST['tema']),
'comment'=>base64_encode($_POST['text'])
);
// base64_encode - функция, которая превращает строку в однородную символьную строку,
// удобную для хранения и передачи
// открываем файл для записи и записываем
$desc=@fopen('comments/comments.txt','wt');
@fwrite($desc,serialize($comments));
@fclose($desc);
$_POST=array();
}
}
?>
<form action="index.php" method="post" style="background: #d3e7ff; padding: 5px;">
<table width="100%" border="0" cellspacing="3" cellpadding="0" bgcolor="#93B0D2">
<tr>
<td width="120" class="commentar">Ваше имя:</td>
<td><input type="text/" name="name" value="<?=htmlspecialchars($_POST['name'])?>"/></td>
</tr>
<tr>
<td class="commentar">Тема:</td>
<td><input type="text/" name="tema" value="<?=htmlspecialchars($_POST['tema'])?>"/></td>
</tr>
<tr>
<td colspan="2" class="commentar">Комментарий:</td>
</tr>
<tr>
<td colspan="2"><textarea cols="120" rows="10" name="text"><?=htmlspecialchars($_POST['text'])?>
</textarea></td>
</tr>
<tr>
<td><button type="submit" name="submit" value="1" class="com_button">Добавить</button></td>
<td><input type="reset" name="Reset" value="Убрать" class="com_button" /></td>
</tr>
</form>
</td>
</tr>
<tr>
<td colspan="2" class="commentar">Благодарим Вас за высказанное мнение!</td>
</tr>
</table>
<h2>Ваши комментарии:</h2>
<?
// вывод комментариев
foreach($comments as $v)
{
$v['date']=base64_decode($v['date']);
$v['name']=base64_decode($v['name']);
$v['tema']=base64_decode($v['tema']);
$v['comment']=base64_decode($v['comment']);
echo '
<div id="commentar">
<b>'.htmlspecialchars($v['date']).' '.htmlspecialchars($v['name']).' /
'.htmlspecialchars($v['tema']).'</b><br/>
<blockquote>'.nl2br(htmlspecialchars($v['comment'])).'</blockquote>
</div>';
}
?>
|
| |
|
|
|
|
|
|
|
для: Mister_X
(06.09.2010 в 20:20)
| | if($_POST['date']=='d.m.Y - H:i'); - убрать
'date'=>base64_encode($_POST['date']), изменить так 'date'=>base64_encode(date("d - m - Y")),, будет показывать дату в формате "день - месяц - год"
функцию отправки сообщения можно дописать после @fclose($desc);, воспользуйтесь поиском по форуму, тут есть подобное. | |
|
|
|
|
|
|
|
для: Slo_Nik
(06.09.2010 в 23:10)
| | Спасибо, всё классно получилось | |
|
|
|
|
|
|
|
для: Mister_X
(06.09.2010 в 20:20)
| | >// base64_encode - функция, которая превращает строку в однородную символьную строку,
>// удобную для хранения и передачи
И где же тут удобства? | |
|
|
|
|
|
|
|
для: sim5
(06.09.2010 в 23:31)
| | Ну типа эскейпить не надо и заебись. | |
|
|
|
|
|
|
|
для: nikita2206
(07.09.2010 в 14:31)
| | Вам тоже что ли рот с мылом мыть?!! | |
|
|
|
|
|
|
|
для: Trianon
(07.09.2010 в 15:03)
| | Это была игра. Ну или шутка, не знаю как это называется. | |
|
|
|
|
|
|
|
для: nikita2206
(07.09.2010 в 15:15)
| | Это называется дуростью, и высказывание про "эскейпить", и мат неуместный.
Пропускать все что непопадя через вышеуказанное, что ничем не оправдано в данном случае, это даже и не знаю как и назвать. Интересно, и где это они все вычитывают.... | |
|
|
|
|
|
|
|
для: sim5
(07.09.2010 в 16:25)
| | Блин, ну сарказм то не уловить... Мат как мат, тут все-равно модератор появляется раз в месяц. Вот пусть отгребет. | |
|
|
|
|
|
|
|
для: nikita2206
(07.09.2010 в 16:29)
| | Да, а мат таки прямо для сарказма и создан? | |
|
|
|
|
|
|
|
для: sim5
(07.09.2010 в 16:31)
| | > Пропускать все что непопадя через вышеуказанное
На это я ответил, что это был сарказм. Причем тут мат
Хватит уже. | |
|
|
|
|
|
|
|
для: nikita2206
(07.09.2010 в 16:29)
| | Мат как мат, тут все-равно модератор появляется раз в месяц. Вот пусть отгребет.
Я тут появляюсь куда чаще.
Это не нравится мне.
Кроме того, сходу могу назвать еще двух человек, которые тоже тут ежедневно тусят, и которым мат тоже поперек горла. | |
|
|
|
|
|
|
|
для: Trianon
(07.09.2010 в 16:33)
| | ок, постараюсь без него | |
|
|
|
|
|
|
|
для: nikita2206
(07.09.2010 в 14:31)
| | нет почему с функцией отправки сообщения пока не получилось, но дата пишется.
Если чем-нибудь поможешь, то от радости сниму шляпу | |
|
|
|
|
|
|
|
для: Mister_X
(07.09.2010 в 15:07)
| | что не получилось? показывайте | |
|
|
|
|
|
|
|
для: Slo_Nik
(07.09.2010 в 15:13)
| | вот пожалуйста - комментарий записывается, а сообщение о нём на почтовый ящик не приходит. Спасибо!!!
<?
// считываем файл comments.txt и превращаем его в массив
$comments=unserialize(file_get_contents('test_comments.txt'));
// если файл битый или не существует, обнуляем массив
if(gettype($comments)!='array')$comments=array();
// если нажали "добавить коммент"
if($_POST['submit']=='1'){
// проверка формы на заполненность
if($_POST['name']==''||$_POST['tema']==''||$_POST['text']=='')
echo '<div style="COLOR: #ff0000; border: 1px solid red; padding: 10px; margin: 10px 0;">Пожалуйста, заполните форму.</div>';
else{
// добавляем к массиву новую запись
$comments[]=array(
'date'=>base64_encode(date("d.m.Y - H:i")),
'name'=>base64_encode($_POST['name']),
'tema'=>base64_encode($_POST['tema']),
'comment'=>base64_encode($_POST['text'])
);
// base64_encode - функция, которая превращает строку в однородную символьную строку,
// удобную для хранения и передачи
// открываем файл для записи и записываем
$desc=@fopen('test_comments.txt','wt');
@fwrite($desc,serialize($comments));
@fclose($desc);
$_POST=array();
}
}
?>
<form action="comments.php" method="post" style="background: #d3e7ff; padding: 5px;">
<table width="100%" border="0" cellspacing="3" cellpadding="0" bgcolor="#93B0D2">
<input type=hidden name=session_id value='<?= session_id();?>'>
<tr>
<td width="120" class="commentar">Ваше имя:</td>
<td><input type="text/" name="name" value="<?=htmlspecialchars($_POST['name'])?>"/></td>
</tr>
<tr>
<td class="commentar">Тема:</td>
<td><input type="text/" name="tema" value="<?=htmlspecialchars($_POST['tema'])?>"/></td>
</tr>
<tr>
<td colspan="2" class="commentar">Комментарий:</td>
</tr>
<tr>
<td colspan="2"><textarea cols="120" rows="10" name="text"><?=htmlspecialchars($_POST['text'])?>
</textarea></td>
</tr>
<tr>
<td><button type="submit" name="submit" value="1" class="com_button">Добавить</button></td>
<td><input type="reset" name="Reset" value="Убрать" class="com_button" /></td>
</tr>
</form>
</td>
</tr>
<tr>
<td colspan="2" class="commentar">Благодарим Вас за высказанное мнение!</td>
</tr>
</table>
<h2>Ваши комментарии:</h2>
<?
// вывод комментариев
foreach($comments as $v)
{
$v['date']=base64_decode($v['date']);
$v['name']=base64_decode($v['name']);
$v['tema']=base64_decode($v['tema']);
$v['comment']=base64_decode($v['comment']);
echo '
<div id="commentar">
<b><font color=#6f8bae>Дата:</font> '.htmlspecialchars($v['date']).' <font color=#6f8bae> / Имя:</font> '.htmlspecialchars($v['name']).' <font color=#6f8bae> /
Тема:</font> '.htmlspecialchars($v['tema']).'</b><br/>
<blockquote><font color=#6f8bae>Комментарий: </font>'.nl2br(htmlspecialchars($v['comment'])).'</blockquote>
</div>';
}
// если была нажата кнопка "Отправить"
if($_POST['submit']) {
$date = substr(htmlspecialchars(trim($_POST['date'])));
$tema= substr(htmlspecialchars(trim($_POST['tema'])), 0, 100);
// $to - кому отправляем
$to = '111@111.ru';
// $from - от кого
$from='comments_test_1';
// функция, которая отправляет наше письмо.
mail($to, $date, "\r\n".$tema, 'From:'.$from. "\r\n" . "MIME-Version: 1.0\r\nContent-type: text/html; charset=utf-8");
echo 'comments_test_1';
}
?>
|
| |
|
|
|
|
|
|
|
для: Mister_X
(08.09.2010 в 21:46)
| | что то тут Вы накрутили....
Во-первых, запарился писать об этом, но где error_reporting(E_ALL);, должно быть самой первой строкой во всех скриптах, на момент написания и отладки .
Во-вторых, зачем Вы пытаетесь отправить письмо аж в самом низу скрипта?
не лучше ли будет отправлять письмо после успешной записи комментария в файл?
вот после этого
<?php
$desc=@fopen('test_comments.txt','wt');
@fwrite($desc,serialize($comments));
@fclose($desc);
?>
|
Да и обработка $_POST['date'] и $_POST['tema'] очень уж какая то странная, особенно $_POST['date']
по поводу самой отправки, то может все заголовки оформить до mail() ? | |
|
|
|
|
|
|
|
для: Slo_Nik
(08.09.2010 в 22:00)
| | от перестановки мест - результат не изменился. | |
|
|
|
|
|
|
|
для: Mister_X
(08.09.2010 в 22:35)
| | а я и не говорил, что он изменится...
ошибки какие есть, в браузер php что то говорит? | |
|
|
|
|
|
|
|
для: Slo_Nik
(08.09.2010 в 23:15)
| | он ни чего не говорит, скрипт просто не отправляет сообщение.
А я в этом профан и не знаю где ошибка. | |
|
|
|
|
|
|
|
для: Mister_X
(09.09.2010 в 00:05)
| | выставьте уровень ошибок на полную, я уверен, что Вам будут выданы предупреждения, а уж от этого и надо будет отталкиваться | |
|
|
|
|
|
|
|
для: Slo_Nik
(09.09.2010 в 00:45)
| | ....выставьте уровень ошибок на полную...
Простите, а что и если можно, то куда. | |
|
|
|
|
|
|
|
для: Mister_X
(09.09.2010 в 17:18)
| | а я Вам уже писал об этом
Во-первых, запарился писать об этом, но где error_reporting(E_ALL);, должно быть самой первой строкой во всех скриптах, на момент написания и отладки . | |
|
|
|
|
|
|
|
для: Slo_Nik
(09.09.2010 в 17:24)
| | Я вставил в начало кода:
<? ini_set('display_errors',1);
error_reporting(E_ALL);?>
и получил:
Notice: Undefined index: submit in /home/web194/06/ftproot/111.ru/1/comments.php on line 50
в коде с 50ой строчки идёт:
[code]<?
// если была нажата кнопка "Отправить"
if($_POST['submit']) {
$date = substr(htmlspecialchars(trim($_POST['date'])));
$tema = substr(htmlspecialchars(trim($_POST['tema'])), 0, 100);
$v = substr(htmlspecialchars(trim($_POST['comment'])), 0, 1000);
// $to - кому отправляем
$to = '111@111.ru';
// $from - от кого
$from='comments_09_15-50a';
// функция, которая отправляет наше письмо.
mail($to, $date, $tema, 'From:'.$from. "MIME-Version: 1.0\r\nContent-type: text/html; charset=utf-8");
echo 'comments_09';
}?>
|
| |
|
|
|
|
|
|
|
для: Mister_X
(09.09.2010 в 17:52)
| | вот и начинайте исправлять эти ошибки, когда всё исправите, то посмотрите, будет у Вас отправляться письмо или нет
для начала Вам надо проверить существует ли $_POST['submit'] и если да, то продолжить выполнение кода.
Если Вы сейчас нажмёте кнопку добавить с своей форме, то это предупреждение исчезнет, так как пойдёт отправка данных методом $_POST и естественно появится элемент этого массива с индексом submit
Проверить существование данного элемента массива можно при помощи isset();
для удобства, после error_reporting() допишите print_r($_POST); , что бы было удобно контролировать, что пришло в массив, а что нет | |
|
|
|
|
 5 Кб |
|
|
для: Slo_Nik
(09.09.2010 в 17:24)
| | а самое интересное, что когда я убрал
<? ini_set('display_errors',1);
error_reporting(E_ALL);?>
| , то скрипт хоть писать комментарии стал, а только про ошибку да про ошибку. Я редактировал его в Adobe Dreamweaver CS5 и небыло синтаксических ошибок.
пока для меня PHP как лес, чем дальше, тем темнее...
Я прикрепил comments.php | |
|
|
|
|
|
|
|
для: Mister_X
(09.09.2010 в 18:20)
| | да, выводить ошибки в браузер перестало, но они то остались :) и исправлять их надо, а что бы не гадать где и как, при помощи этой функции и отлавливаете их. | |
|
|
|