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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 28.07.2010, 20:06   #1
erwerwe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 47
По умолчанию Помогите составить скрипт PHP/SQL

Помогите исправить/дополнить скрипт.
Надо выбрать из бд. только те параметры, у которых поля date+time совпадают с текущими и если date+time совпадают, то отправить письмо на соответствующий email с текстом.

Код скрипта scripts.php
PHP код:
 <?php 
 
include "config.php"
 
$SelectQuery="SELECT * FROM `anketa` WHERE `date` = date(NOW()) AND DATE_FORMAT(time,'%H%i') = DATE_FORMAT(NOW(),'%H%i')" 
  
$SelectReslut mysql_query($SelectQuery); 
  
//сколько записей получили
  
$Count mysql_num_rows($SelectReslut); 
  for (
$i=1$i<=$Count$i++) { 
    
//получаем очередную строку
    
$Fetch mysql_fetch_array($SelectReslut); 
    
//выводим результат
    
echo $Fetch['text']." : ".$Fetch['email']." : ".$Fetch['time']." : ".$Fetch['date']; 
  
// $date - заведомо известная переменная
  // $time - заведомо известная переменная
//(взято из базы в формате ГГГГ-ММ-ДД)
//(взято из базы в формате ч-м-с)

$current_date date("Y-m-d");   
$current_time time("H:i");
if (
$current_date $data)  {
    echo endif;
}  else 
if (
$current_date $data) {
    echo endif;
}  
if (
$current_time $time)  {
    echo endif;
}  else  
if (
$current_time $time){
    echo endif;
}  else
if (
$current_date $data) and ($current_time $time)
else  {
    echo 
"Отправка";
}    else echo 
"Нечего отправлять"; }
    
//include "mail.php";;
}
?>
Код mail.php

PHP код:
<?php
    $email 
$_POST['email'];
    
$date $_POST['date'];
    
$time $_POST['time'];
    
$text $_POST['text'];
    
 
$to "example@mail.ru";
 
$message =" You received  a mail from ".$mail;
 
$message .=" Text of the message : ".$text;

 if(
mail($to$subject,$message)){
    echo 
"mail successful send";

else{ 
    echo 
"there's some errors to send the mail, verify your server options";
}
?>
erwerwe вне форума
Старый 28.07.2010, 20:34   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Жуткий код...
Боюсь даже спрашивать - но попробую:
"Что не работает..?"

Цитата:
WHERE `date` = date(NOW())
- это в каком же формате у вас `date` хранится? так сразу и не понять...

Вместо кучи этих ваших if может проще так:
PHP код:
if($current_date != $data)....
// и соответственно
if($current_time != $time
Цитата:
if ($current_date = $data) and ($current_time = $time)
- это логические ошибки,должно быть 2 знака равенства для сравнения(==),также весь блок условий в if лучше всё-таки группировать в скобки:
PHP код:
if(($current_date == $data) and ($current_time == $time)) 
Учитесь писать простой,структуризированный и понятный код - учитесь сразу,потом трудно будет переучиваться...
Прийдётся когда-нибудь поработать в команде - вас за такое вот mess заклюют.
Andkorol вне форума
Старый 28.07.2010, 20:45   #3
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

По mail.php:
1. Вы получаете данные для писем ($email,$date,$time,$text) из БД - почему же тут вы их ожидаете в массиве $_POST ???

2.
Цитата:
$message =" You received a mail from ".$mail;
- вроде тут должно быть $email ...?

3. $subject я так и не нашел....
Andkorol вне форума
Старый 28.07.2010, 21:47   #4
erwerwe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 47
По умолчанию

Цитата:
Жуткий код...
Согласен плохой код)
Задача в том чтобы обновлять каждую минуту с помощью cron файл script.php, он в свою очередь проверяет на наличия совпадения времени+даты с текущий. И когда находит подключает файл mail.php для отправки письма.

БД.
erwerwe вне форума
Старый 28.07.2010, 21:53   #5
erwerwe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 47
По умолчанию

Подправил немного код. Может вообще не нужно никакое сравнение даже это:
PHP код:
 if(($current_date == $data) and ($current_time == $time)) 
, если из базы данных берется так и так данные, настоящего времени и даты?


script.php

PHP код:
 <?php 
 
include "config.php"
 
$SelectQuery="SELECT * FROM `anketa` WHERE `date` = date(NOW()) AND DATE_FORMAT(time,'%H%i') = DATE_FORMAT(NOW(),'%H%i')" 
  
$SelectReslut mysql_query($SelectQuery); 
  
//сколько записей получили
  
$Count mysql_num_rows($SelectReslut); 
  for (
$i=1$i<=$Count$i++) { 
    
//получаем очередную строку
    
$Fetch mysql_fetch_array($SelectReslut); 
    
//выводим результат
    
echo $Fetch['text']." : ".$Fetch['email']." : ".$Fetch['time']." : ".$Fetch['date']; 
  
// $date - заведомо известная переменная
  // $time - заведомо известная переменная
//(взято из базы в формате ГГГГ-ММ-ДД)
//(взято из базы в формате ч-м-с)

$current_date date("Y-m-d");   
$current_time time("H:i");
if((
$current_date == $data) and ($current_time == $time))
else  {
    
    echo include 
"mail.php";
}
?>

mail.php

PHP код:
<?php

 $to 
"Письмо";
 
$message .=" Текст письма : ".$text;

 if(
mail($to,$message)){
    echo 
"mail successful send";

else{ 
    echo 
"there's some errors to send the mail, verify your server options";
}
?>
erwerwe вне форума
Старый 28.07.2010, 22:28   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

1. Вы ничего не сделали с этим:
Цитата:
date(NOW())
2.Нет никакого смысла вот в этом:
Цитата:
$current_time = time("H:i");
if(($current_date == $data) and ($current_time == $time))
else { // OMG!!!!!!!
....
}
- потому как во-первых time() возвращает временную метку в секундах,которая этой функцией никогда и никак не форматируется...уж не знаю что вы там в базе храните в `time`...
соответственно - во-вторых (даже чисто теоретически) вы сравниваете уже записанную в базу временную метку с сиюсекундной меткой,что,учитывая вызов каждую минуту - никогда не даст вам равных значений ($current_time == $time)

3.Это круто:
PHP код:
echo include "mail.php"
Вы городите не тот огород...
Гораздо проще(и правильнее,на мой взгляд) будет ввести в базу ещё одно поле ,например `sent`(отправлено) типа enum ('0','1')(по умолчанию - 0) - и просто помечать уже отправленные письма(анкеты) единицей...Соответственно при вызове вашего скрипта каждую минуту вам просто нужно будет выбирать из базы все анкеты,у которых в поле `sent` стоит 0(т.е. они ещё не отправлялись) - и отправлять их,не забыв после успешной отправки проставить в базе им пометки 1 вместо 0 - вот и всё...
Таким образом у вас в базе все отправленные помечены 1,неотправленные помечены 0.
Быстро и просто.

Последний раз редактировалось Andkorol; 28.07.2010 в 22:45. Причина: Add link for ENUM
Andkorol вне форума
Старый 28.07.2010, 22:41   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Ещё совет - в MySQL есть замечательный тип данных DATETIME , который потом при помощи MySQL-функции DATE_FORMAT() позволяет делать с собой удивительные вещи,форматировать и сортировать по-всякому...
Не делайте средствами PHP то,что вполне можно решить средствами самой СУБД - так быстрее и проще.
Andkorol вне форума
Старый 29.07.2010, 00:26   #8
erwerwe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 47
По умолчанию

PHP код:
1. Вы ничего не сделали с этим:
Цитата:
date(NOW()) 
А что нужно сделать? Date хранится в формате date, time в фор. time.
За идею сортировки большое спасибо Попробую это осуществить.




Цитата:
2.Нет никакого смысла вот в этом:
Цитата:
$current_time = time("H:i");
if(($current_date == $data) and ($current_time == $time))
else { // OMG!!!!!!!
....
}
Может засунуть тогда в один файл script.php?

PHP код:
  <?php 
 
include "config.php"
 
$SelectQuery="SELECT * FROM `anketa` WHERE `date` = date(NOW()) AND DATE_FORMAT(time,'%H%i') = DATE_FORMAT(NOW(),'%H%i')" 
  
$SelectReslut mysql_query($SelectQuery); 
  
//сколько записей получили
  
$Count mysql_num_rows($SelectReslut); 
  for (
$i=1$i<=$Count$i++) { 
    
//получаем очередную строку
    
$Fetch mysql_fetch_array($SelectReslut); 
    
//выводим результат
    
echo $Fetch['text']." : ".$Fetch['email']." : ".$Fetch['time']." : ".$Fetch['date']; 
  
// $date - заведомо известная переменная
  // $time - заведомо известная переменная
//(взято из базы в формате ГГГГ-ММ-ДД)
//(взято из базы в формате ч-м)

$current_date date("Y-m-d");   
$current_time time("H:i");
$to "Дабавочный текст"
 
$message .=" Текст письма : ".$text

 if(
mail($to,$message)){ 
    echo 
"сообщение отправельно успешно"
}  
else{  
    echo 
"есть некоторые ошибки, чтобы отправить по почте, проверьте параметры сервера"

?>
erwerwe вне форума
Старый 29.07.2010, 00:47   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
А что нужно сделать?
NOW()
Возвращает текущую дату и время как величину в формате YYYY-MM-DD HH:MM:SS или YYYYMMDDHHMMSS, в зависимости от того, в каком контексте используется функция - в строковом или числовом:
mysql> SELECT NOW();
-> '1997-12-15 23:50:26'

mysql> SELECT NOW() + 0;
-> 19971215235026
ЧТО вы собираетесь получить в этом вот случае :
PHP код:
date('2010-07-28 23:50:26');// это вот ваш вариант в запросе
// or
date(20100728235026); 
Какой результат получится для сравнения со значениями поля `date`...???
Используйте DATE_FORMAT() - вы же вроде им дальше пользуетесь.

PHP код:
$to "Дабавочный текст";
// some code....
if(mail($to,$message)) 
- вы собираетесь отправить письмо по адресу "Дабавочный текст" ?

PHP код:
$current_time time("H:i"); 
- никому этого не показывайте...никогда...
Andkorol вне форума
Старый 29.07.2010, 10:38   #10
erwerwe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 47
По умолчанию

Извините, что пристал, но мне действительно нужно разобраться.
Я что то не понял, а зачем вообще нужно разбираться с форматом датой и временем, сравнений ведь уже никаких нет. Как я понял из базы достаются параметры mail и text которые стоят в одной строчке с настоящей датой и временем (то есть соответствуют им).



я сделал вот такой вид: 29.07.2010. Но зачем это?

PHP код:
 <?php 
 
include "config.php"
 
$SelectQuery="SELECT * FROM `anketa` WHERE `date` = date(NOW()) AND DATE_FORMAT(date,'%D%c%Y') = DATE_FORMAT(NOW(),'%D%c%Y') AND DATE_FORMAT(time,'%H%i') = DATE_FORMAT(NOW(),'%H%i')" 
  
$SelectReslut mysql_query($SelectQuery); 
  
//сколько записей получили
  
$Count mysql_num_rows($SelectReslut); 
  for (
$i=1$i<=$Count$i++) { 
    
//получаем очередную строку
    
$Fetch mysql_fetch_array($SelectReslut); 
    
//выводим результат
    
echo $Fetch['text']." : ".$Fetch['email']." : ".$Fetch['time']." : ".$Fetch['date']; 
  
// $date - заведомо известная переменная
  // $time - заведомо известная переменная
//(взято из базы в формате ГГГГ-ММ-ДД)
//(взято из базы в формате ч-м)

$to $Fetch['email']; 
 
$message .=" Текст письма : ".$text

 if(
mail($to,$message)){ 
    echo 
"сообщение отправлено успешно"
}  
else{  
    echo 
"есть некоторые ошибки, чтобы отправить, проверьте параметры сервера"

?>
erwerwe вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите плиз написать маленький php скрипт длясчета денег craftins PHP 2 09.09.2009 13:56
помогите составить SQL запрос!!!! MAKSA БД в Delphi 12 07.08.2009 11:12
php скрипт не выводит нужную инфу.. помогите плиз escrimer PHP 2 09.08.2007 02:37