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

Форум PHP

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

 

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

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

тема: как добавить в php скрипт дату заполнения
 
 автор: Mister_X   (06.09.2010 в 20:20)   письмо автору
 
 

Я попробовал улучшить 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>'
;
}
?>

  Ответить  
 
 автор: Slo_Nik   (06.09.2010 в 23:10)   письмо автору
 
   для: 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);, воспользуйтесь поиском по форуму, тут есть подобное.

  Ответить  
 
 автор: Mister_X   (07.09.2010 в 02:03)   письмо автору
 
   для: Slo_Nik   (06.09.2010 в 23:10)
 

Спасибо, всё классно получилось

  Ответить  
 
 автор: sim5   (06.09.2010 в 23:31)   письмо автору
 
   для: Mister_X   (06.09.2010 в 20:20)
 

>// base64_encode - функция, которая превращает строку в однородную символьную строку,
>// удобную для хранения и передачи

И где же тут удобства?

  Ответить  
 
 автор: nikita2206   (07.09.2010 в 14:31)   письмо автору
 
   для: sim5   (06.09.2010 в 23:31)
 

Ну типа эскейпить не надо и заебись.

  Ответить  
 
 автор: Trianon   (07.09.2010 в 15:03)   письмо автору
 
   для: nikita2206   (07.09.2010 в 14:31)
 

Вам тоже что ли рот с мылом мыть?!!

  Ответить  
 
 автор: nikita2206   (07.09.2010 в 15:15)   письмо автору
 
   для: Trianon   (07.09.2010 в 15:03)
 

Это была игра. Ну или шутка, не знаю как это называется.

  Ответить  
 
 автор: sim5   (07.09.2010 в 16:25)   письмо автору
 
   для: nikita2206   (07.09.2010 в 15:15)
 

Это называется дуростью, и высказывание про "эскейпить", и мат неуместный.

Пропускать все что непопадя через вышеуказанное, что ничем не оправдано в данном случае, это даже и не знаю как и назвать. Интересно, и где это они все вычитывают....

  Ответить  
 
 автор: nikita2206   (07.09.2010 в 16:29)   письмо автору
 
   для: sim5   (07.09.2010 в 16:25)
 

Блин, ну сарказм то не уловить... Мат как мат, тут все-равно модератор появляется раз в месяц. Вот пусть отгребет.

  Ответить  
 
 автор: sim5   (07.09.2010 в 16:31)   письмо автору
 
   для: nikita2206   (07.09.2010 в 16:29)
 

Да, а мат таки прямо для сарказма и создан?

  Ответить  
 
 автор: nikita2206   (07.09.2010 в 16:34)   письмо автору
 
   для: sim5   (07.09.2010 в 16:31)
 

> Пропускать все что непопадя через вышеуказанное
На это я ответил, что это был сарказм. Причем тут мат

Хватит уже.

  Ответить  
 
 автор: Trianon   (07.09.2010 в 16:33)   письмо автору
 
   для: nikita2206   (07.09.2010 в 16:29)
 

Мат как мат, тут все-равно модератор появляется раз в месяц. Вот пусть отгребет.

Я тут появляюсь куда чаще.
Это не нравится мне.
Кроме того, сходу могу назвать еще двух человек, которые тоже тут ежедневно тусят, и которым мат тоже поперек горла.

  Ответить  
 
 автор: nikita2206   (07.09.2010 в 16:35)   письмо автору
 
   для: Trianon   (07.09.2010 в 16:33)
 

ок, постараюсь без него

  Ответить  
 
 автор: Mister_X   (07.09.2010 в 15:07)   письмо автору
 
   для: nikita2206   (07.09.2010 в 14:31)
 

нет почему с функцией отправки сообщения пока не получилось, но дата пишется.
Если чем-нибудь поможешь, то от радости сниму шляпу

  Ответить  
 
 автор: Slo_Nik   (07.09.2010 в 15:13)   письмо автору
 
   для: Mister_X   (07.09.2010 в 15:07)
 

что не получилось? показывайте

  Ответить  
 
 автор: Mister_X   (08.09.2010 в 21:46)   письмо автору
 
   для: 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']).' &nbsp;<font color=#6f8bae> /  &nbsp; Имя:</font> '.htmlspecialchars($v['name']).' <font color=#6f8bae> &nbsp; / &nbsp; 
            Тема:</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'])), 0100);
        
// $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'
}
?> 

  Ответить  
 
 автор: Slo_Nik   (08.09.2010 в 22:00)   письмо автору
 
   для: 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() ?

  Ответить  
 
 автор: Mister_X   (08.09.2010 в 22:35)   письмо автору
 
   для: Slo_Nik   (08.09.2010 в 22:00)
 

от перестановки мест - результат не изменился.

  Ответить  
 
 автор: Slo_Nik   (08.09.2010 в 23:15)   письмо автору
 
   для: Mister_X   (08.09.2010 в 22:35)
 

а я и не говорил, что он изменится...
ошибки какие есть, в браузер php что то говорит?

  Ответить  
 
 автор: Mister_X   (09.09.2010 в 00:05)   письмо автору
 
   для: Slo_Nik   (08.09.2010 в 23:15)
 

он ни чего не говорит, скрипт просто не отправляет сообщение.
А я в этом профан и не знаю где ошибка.

  Ответить  
 
 автор: Slo_Nik   (09.09.2010 в 00:45)   письмо автору
 
   для: Mister_X   (09.09.2010 в 00:05)
 

выставьте уровень ошибок на полную, я уверен, что Вам будут выданы предупреждения, а уж от этого и надо будет отталкиваться

  Ответить  
 
 автор: Mister_X   (09.09.2010 в 17:18)   письмо автору
 
   для: Slo_Nik   (09.09.2010 в 00:45)
 

....выставьте уровень ошибок на полную...
Простите, а что и если можно, то куда.

  Ответить  
 
 автор: Slo_Nik   (09.09.2010 в 17:24)   письмо автору
 
   для: Mister_X   (09.09.2010 в 17:18)
 

а я Вам уже писал об этом
Во-первых, запарился писать об этом, но где error_reporting(E_ALL);, должно быть самой первой строкой во всех скриптах, на момент написания и отладки .

  Ответить  
 
 автор: Mister_X   (09.09.2010 в 17:52)   письмо автору
 
   для: 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'])), 0100);
        
$v =  substr(htmlspecialchars(trim($_POST['comment'])), 01000);
        
// $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'
}
?>

  Ответить  
 
 автор: Slo_Nik   (09.09.2010 в 18:20)   письмо автору
 
   для: Mister_X   (09.09.2010 в 17:52)
 

вот и начинайте исправлять эти ошибки, когда всё исправите, то посмотрите, будет у Вас отправляться письмо или нет
для начала Вам надо проверить существует ли $_POST['submit'] и если да, то продолжить выполнение кода.
Если Вы сейчас нажмёте кнопку добавить с своей форме, то это предупреждение исчезнет, так как пойдёт отправка данных методом $_POST и естественно появится элемент этого массива с индексом submit
Проверить существование данного элемента массива можно при помощи isset();
для удобства, после error_reporting() допишите print_r($_POST); , что бы было удобно контролировать, что пришло в массив, а что нет

  Ответить  
 
 автор: Mister_X   (09.09.2010 в 18:20)   письмо автору
5 Кб
 
   для: Slo_Nik   (09.09.2010 в 17:24)
 

а самое интересное, что когда я убрал
<? ini_set('display_errors',1);
error_reporting(E_ALL);?>
, то скрипт хоть писать комментарии стал, а только про ошибку да про ошибку. Я редактировал его в Adobe Dreamweaver CS5 и небыло синтаксических ошибок.
пока для меня PHP как лес, чем дальше, тем темнее...
Я прикрепил comments.php

  Ответить  
 
 автор: Slo_Nik   (09.09.2010 в 18:23)   письмо автору
 
   для: Mister_X   (09.09.2010 в 18:20)
 

да, выводить ошибки в браузер перестало, но они то остались :) и исправлять их надо, а что бы не гадать где и как, при помощи этой функции и отлавливаете их.

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

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