2013-12-19 1 views
0

Хорошо, я переработал его, но это не работает, но он работает и проверял это в URL-адресе, а также проверял через cronjobs.Неожиданная пустая страница с PHP-скриптом электронной почты

<html> 
<head> 
<title>J~Net Birthday Test</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<body style="background:#0066CC"> 
<font color="orange" font size="+1"> 
<center> 

<?php 
error_reporting(E_ALL); ini_set('display_errors', "0"); 
$id = ''; 
$email = ''; 
$numrows = ''; 
function sendHTMLemail($HTML,$from,$to,$subject) { 
$from = "[email protected]"; 
$subject = "Happy Birthday "; 
$headers = "From: $from\r\n"; 
$HTML = ' 
<body style="background:#0066CC"> 
<STYLE TYPE="text/css"> 
BODY {background-image: url(\'http://www.jnetscripts.com/apps/balance/images/images(9).jpeg\'); 
background-repeat; } 
</STYLE> 
<font color="orange" font size="+1"><center> 
<a href="http://www.jnetscripts.com"><img src="http://www.jnetscripts.com/images/logo.png" height="80px" ></img></a> 
<p><br> 
<p> 
Happy Birthday To You!<p> 
Happy Birthday To You!<p> 
Happy Birthday To You!<p> 
Happy Birthday To You!<p> 
<p><br> 
Have A Great Day From J~Net<p> 
<a href="http://www.jnetscripts.com"><img src="http://www.jnetscripts.com/images/logo.png" height="80px" ></img></a>'; 
$headers .= "MIME-Version: 1.0\r\n"; 
$boundary = uniqid("HTMLEMAIL"); 
$headers .= "Content-Type: multipart/alternative;". 
"boundary = $boundary\r\n\r\n"; 
$headers .= "This is a MIME encoded message.\r\n\r\n"; 
$headers .= "--$boundary\r\n". 
"Content-Type: text/plain; charset=ISO-8859-1\r\n". 
"Content-Transfer-Encoding: base64\r\n\r\n"; 
$headers .= chunk_split(base64_encode(strip_tags($HTML))); 
// Now we attach the HTML version 
$headers .= "--$boundary\r\n". 
"Content-Type: text/html; charset=ISO-8859-1\r\n". 
"Content-Transfer-Encoding: base64\r\n\r\n"; 
$headers .= chunk_split(base64_encode($HTML)); 
if (mail($to,$subject,"",$headers)) { 
global $success; 
$success++; 
} 
} 
$now = date("d-m-y"); 
$out = array('-'); 
$in = array(''); 
$new_now = str_replace($out, $in, $now); 
$new_now = substr($new_now, 0, 4); 
echo 'Todays Date Without The Year Is '; 
echo $new_now; 
echo '<p>'; 
require_once("../php_includes/db_conx.php"); 
$sql = "SELECT id, username, email, dob FROM users WHERE instr(dob, '$new_now') >0"; 
$query = mysqli_query($db_conx, $sql); 
if($query){ 
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) { 
$id = $row['id']; 
$email = $row['email']; 
$username = $row['username']; 
} 
if (sendHTMLemail($HTML,$from,$email,$subject)) { 
echo 'No Birthdays today!'; 
} else { 
echo 'Messages Sent'; 
} 
} 
?> 
</head> 
<body> 
</body> 
</html> 

Я отправил это, чтобы помочь другим, которые могут хотеть дату, отформатированную в базе данных там в UK English Format (правильный путь). Скоро я могу ответить на свои вопросы (нужно больше комментариев), пожалуйста, проголосуйте, поэтому мне не нужно редактировать оригинальные разделы!

+0

Я не вижу, оператор возврата из 'sendHTMLemail()' может ли это быть проблема? – sircapsalot

+4

Правильный отступ сделает ваш код более читаемым. Кстати, вы используете 'mysqli_connect', а затем используете' mysql_ * 'функции? –

+0

Когда вы запускаете скрипт, вы видите либо сообщение «Сообщение отправлено», либо «Нет дней рождения сегодня»? Если нет, у вас могут быть ошибки. В этом случае поставьте это вверху страницы 'error_reporting (E_ALL); ini_set ('display_errors', 1); 'где вы запускаете функцию, она должна находиться в тегах php вне функции, если она запущена на той же странице. –

ответ

0

Способ получения переменной $new_now просто волшебный. Вы добавляете тире, затем создаете массивы с одним ключом, а затем заменяете тире ничем. Просто используйте $now = date("dmy");, и все готово.

Теперь я не знаю, какой тип хранилища используется для столбца DOB в базе данных. Но если его date или datetime не будет работать. Если его varchar, то он может работать. Мне интересно, почему бы вам не использовать FIND_IN_SET, если вы проверяете столбец в той же таблице. Вы можете просто использовать WHERE dob='".$new_now."', если его varchar.

Если тип столбца DATE, что будет по-прежнему работать, но вы должны изменить ваш $new_now к date("Y-m-d") или date("Y-m-d H:i:s") для DATETIME (хотя даты и времени, что было бы проблемой, если день рождения хранится в 09:03 и скрипт запускается на 12 : 48)

UPDATE:

Просто читать его снова, и я пропустил $new_now = substr($new_now, 0, 4); часть. Вы просто проверяете месяц/день (очевидно). Так что, если dob поле VARCHAR, то вы можете использовать

$new_now = date("dm"); //day and month, both with leading 0 
"SELECT username, email, dob FROM users WHERE dob LIKE '".$new_now."%'"; 
+0

Предупреждение: mysql_select_db() ожидает, что параметр 2 будет ресурсом, объект, указанный в /var/www/bday/test2.php в строке 48, - это ошибка im get, и sql используется, поскольку я не могу сопоставить его с частью года, чтобы он будет частью матча, иначе он не будет работать, если он не будет фактическим bday с годом, поэтому ему нужно сопоставить день и месяц, а не год (нет времени в dob feild только день месяц и год, который я не могу вынуть как я использую его для вычисления других вещей, таких как возраст и т. д. –

+0

@MultiMedia Опять же, вы получаете эту ошибку, потому что используете 'mysqli_connect', а затем функцию' mysql_ *'. –

+0

iv пробовал как mysql, так и mysqli, и это varchar, что dob is Я понял, что mysqli_select_db() ожидает, что параметр 1 будет mysqli, строка указана в /var/www/test2.php в строке 50 –

Смежные вопросы