Всем бобра! Пытаюсь тут реализовать затею одну, но не справляюсь из-за недостатка мозга )) Имеем в mysql Код (Text): CREATE TABLE `data` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, `B_Date_DD` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL, `B_Date_MM` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`ID`), KEY `Name` (`Name`) ) ENGINE=MyISAM AUTO_INCREMENT=46 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; INSERT INTO `data` VALUES ('1', 'Карабас Барабас', '31', '03'); INSERT INTO `data` VALUES ('2', 'Василий Пупкин', '31', '03'); CREATE TABLE `settings` ( `Path` varchar(100) NOT NULL DEFAULT '', `To_Email` varchar(80) NOT NULL DEFAULT '', `From_Email` varchar(80) NOT NULL DEFAULT '', `Subject` varchar(80) NOT NULL DEFAULT '', `Email_Reminders` int(1) NOT NULL DEFAULT '0', `ID` int(1) NOT NULL DEFAULT '0', UNIQUE KEY `ID` (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `settings` VALUES ('', 'kuda@les.tam', 'otkuda@les.tam', '', '1', '0'); и задачку в cron PHP: <?php include("config.php"); if('...'){ require('config.php'); mysql_connect('localhost',$username,$password); @mysql_select_db($database) or die(); $query="SELECT * FROM data WHERE `B_Date_DD` = DAY(CURDATE()) AND `B_Date_MM` = MONTH(CURDATE())"; $result=mysql_query($query); $num=mysql_numrows($result); mysql_close(); $i=0; while ($i < $num) { $Name .=mysql_result($result,$i,"Name"); $B_Date_DD .=mysql_result($result,$i,"B_Date_DD"); $B_Date_MM .=mysql_result($result,$i,"B_Date_MM"); $ID=mysql_result($result,$i,"ID"); $i++; } $to = 'kuda@les.tam'; $subject = 'Zagolovok'; $message = ' ('.$B_Date_DD.')('.$B_Date_MM.')('.$Name.') '; $from = 'From: otkuda@les.tam'; mail($to, $subject, $message, $from); } else{ exit(); } ?> В общем, все хорошо, кроме случаев, когда надо отправить 2 и более записей... Приходит оно в виде "(3131)(0303)(Карабас БарабасВасилий Пупкин)" ЧЯДНТ?(
зачем ты используешь соединение строк для ресурса котолрый возвращает mysql_result? кстати mysql_* функции устарели и их уже удалили в PHP7 лучше используй mysqli
Изменил .= на = Стало приходить как надо, но только с последней добавленной записью. И, да, перевод на php7 не нужен из-за некоторых особенностей
ты просто в цикле затираешь предыдущие данные, их можно сразу выводить или накапливать в массиве, потом уже вывести
@ugralex расставь скобки и отступы, чтобы код был читаем, может кто поможет --- Добавлено --- строку 23 удали PHP: $Name .= mysql_result($result, $i, "Name"); $B_Date_DD .= mysql_result($result, $i, "B_Date_DD"); $B_Date_MM .= mysql_result($result, $i, "B_Date_MM"); $ID = mysql_result($result, $i, "ID"); $message .= ' ('.$B_Date_DD.')('.$B_Date_MM.')('.$Name.') '.PHP_EOL;
Строку 23 ? PHP: mail($to, $subject, $message, $from); Закомментил 21-ую Привалило уже вот так Код (Text): (31)(03)(Карабас Барабас) (3131)(0303)(Карабас БарабасВасилий Пупкин)
Задача была бы решена, если бы он вывел Код (Text): (31)(03)(Карабас Барабас) (31)(03)(Василий Пупкин)
Сделал так PHP: while ($i < $num) { $Name .= mysql_result($result, $i, "Name"); $B_Date_DD .= mysql_result($result, $i, "B_Date_DD"); $B_Date_MM .= mysql_result($result, $i, "B_Date_MM"); $ID = mysql_result($result, $i, "ID"); $message .= ' ('.$B_Date_DD.')('.$B_Date_MM.')('.$Name.') '.PHP_EOL; $Name=null; $B_Date_DD=null; $B_Date_MM=null; $i++; } Вопрос решился
Возник следующий (логичный) вопрос. При отсутствии совпадений - прилетает "пустышка". Фокус не вышел PHP: <?php include("config.php"); require('config.php'); mysql_connect('localhost',$username,$password); @mysql_select_db($database) or die(); $query="SELECT * FROM data WHERE `B_Date_DD` = DAY(CURDATE()) AND `B_Date_MM` = MONTH(CURDATE())"; $result=mysql_query($query); $num=mysql_numrows($result); mysql_close(); if($num = 0){ exit(); } else { $i=0; while ($i < $num) { $Name .= mysql_result($result, $i, "Name"); $B_Date_DD .= mysql_result($result, $i, "B_Date_DD"); $B_Date_MM .= mysql_result($result, $i, "B_Date_MM"); $ID = mysql_result($result, $i, "ID"); $message .= ' ('.$B_Date_DD.')('.$B_Date_MM.')('.$Name.') '.PHP_EOL; $Name=null; $B_Date_DD=null; $B_Date_MM=null; $i++; } $to = 'kuda@les.tam'; $subject = 'Zagolovok'; // $message = ' ('.$B_Date_DD.')('.$B_Date_MM.')('.$Name.') '; $from = 'From: otkuda@les.tam'; mail($to, $subject, $message, $from); } ?> --- Добавлено --- Вроде как надо ))) Есть еще что-то "не так"? PHP: <?php include("config.php"); require('config.php'); mysql_connect('localhost',$username,$password); @mysql_select_db($database) or die(); $query="SELECT * FROM data WHERE `B_Date_DD` = DAY(CURDATE()) AND `B_Date_MM` = MONTH(CURDATE())"; $result=mysql_query($query); $num=mysql_numrows($result); mysql_close(); if($num >= 1){ $i=0; while ($i < $num) { $Name .= mysql_result($result, $i, "Name"); $B_Date_DD .= mysql_result($result, $i, "B_Date_DD"); $B_Date_MM .= mysql_result($result, $i, "B_Date_MM"); $ID = mysql_result($result, $i, "ID"); $message .= ' ('.$B_Date_DD.')('.$B_Date_MM.')('.$Name.') '.PHP_EOL; $Name=null; $B_Date_DD=null; $B_Date_MM=null; $i++; } $to = 'kuda@les.tam'; $subject = 'Zagolovok'; // $message = ' ('.$B_Date_DD.')('.$B_Date_MM.')('.$Name.') '; $from = 'From: otkuda@les.tam'; mail($to, $subject, $message, $from); } else { exit(); } ?>
расширение mysql_ официально объявлено deprecated еще начиная с 5.5. Обновляться до 5.6 у вас тоже некоторые особенности мешают? А как насчет некоторых особенностей самого mysql_, из-за которых у вас могут быть проблемы с производительностью и безопасностью? Такие особенности не смущают? Возможность атак второго порядка через левые кодировки не смущает?