<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

Просмотрев курс и выполнив упражнения, Вы сможете без проблем создавать функциональные движки для самых различных сайтов.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Не получается сделать подписку
12.04.2013 01:16:53 Не получается сделать подписку Сообщение #1
malina95

malina95

Мастер

Мастер

Дата регистрации:
15.07.2012 07:13:44

Сообщений: 208

Здравствуйте, я решил сделать собственную подписку, чтобы не зависеть от feedburner, а то его закрывать собираются я читал...

Так вот, представьте ситуацию когда цикл работает, простые сообщения на мыло отправляет, но при этом в базе ничего не меняется.

Короче сам код:
<?php
require_once "config.php";
require_once "lib/functions.php";
connectDB();
$result_set = $mysqli->query("SELECT * FROM `$table_subscribe` WHERE `end` = '0' LIMIT 1"; // Получаем 1 неоконченную рассылку
$last_subscribe = $result_set->fetch_assoc(); // Преобразуем result_set в массив
/* Если все рассылки уже отправлены, то смотрим: нет ли новых статей на сайте */
if ($result_set->num_rows == 0) {
$result_set = $mysqli->query("SELECT * FROM `$table_lesson` WHERE `id` > '".$last_subscribe["post_id"]."' LIMIT 1";
if ($result_set->num_rows == 0) exit; // Если ничего нового нет, то просто выходим
$post = $result_set->fetch_assoc(); // Получаем данные о новой статье
$mysqli->query("INSERT INTO `$table_subscribe` (`post_id`, `subscriber_id`, `end`) VALUES ('".$post["id"]."', '0', '0')"; // Добавляем в очередь новую рассылку
exit; // Выходим, а через 10 минут данный скрипт будет снова запущен, и уже пойдёт непосредственно рассылка писем
}
$last_id = $last_subscribe["subscriber_id"]; // Получаем id подписчика, которому было отправлено письмо в последний раз
$result_set = $mysqli->query("SELECT * FROM `$table_subscribers` WHERE `id` > '".$last_id."'";
$count = 0;
while (($row = $result_set->fetch_assoc) !== false) {
$subscriber_id = $row['id'];
$subscriber_name = $row['name'];
$subscriber_email = $row['email'];
$subscriber_date = DateClass::make_date($row['date']);

$result_set_mail = $mysqli->query("SELECT * FROM `$table_lesson` WHERE `id` = '".$last_subscribe["post_id"]."'";
$post_mail = $result_set_mail->fetch_assoc(); // Получаем данные о новой статье

$subject = 'Новая статья на сайте Malinichev.ru';
$message = '
<h1 style = "text-shadow: 1px 0 4px green; color: silver; font-size: 110%;">Malinichev.ru</h1>
<p>Здравствуйте, <strong>'.$subscriber_name.'</strong>!</p>
<br />
<p>На сайте <a href = "http://malinichev.ru/">Malinichev.ru</a> появилась новая статья.</p>
<p>Чтобы <strong>ознакомиться</strong> с новой статьёй, пройдите по ссылке ниже:</p>
<p><a href = "'.$address.'lesson/'.$post_mail['url'].'.html"></a></p>
<br />
<p>С Уважением, Владислав Малиничев и сайт <a href = "http://malinichev.ru/">Malinichev.ru</a>!</p>
<br />
----------------------------------------------------------------------
<br />
<p>Если Вы не желаете больше получать уведомления о новых статьях, то Вы можете отписаться, пройдя по ссылке ниже:</p>
<p><a href = "ссылка">ссылка</a></p>
<p>Дата Вашей подписки: <b>'.$subscriber_date.'</b></p>
';
$headers = "From: Malinichev.ru <malinichev.ru@yandex.ua>\r\nContent-type: text/html; charset=utf-8 \r\n";
mail ($subscriber_email, $subject, $message, $headers);
//mail ('malinichev.ru@yandex.ua', 'Привет', 'Тестируем рассылку', 'From: Malinichev.ru <malinichev.ru@yandex.ua>\r\nContent-type: text/html; charset = utf-8 \r\n');
/* Здесь код для отправки письма через функцию mail() */
$count++;
if ($count == 10) {
$mysqli->query("UPDATE `$table_subscribe` SET `subscriber_id` = '".$subscriber_id."' WHERE `id` = '".$last_id."'"; // Обновляем информацию о последнем подписчике, которому было отправлено письмо
break; // Выходим после 10-ти отправлений
}
}
if ($result_set->num_rows <= 10)
$mysqli->query("UPDATE `$table_subscribe` SET `end` = '1' WHERE `id` = '".$last_id."'"; // Всё отправлено
?>


Помогите плиз, я уже не знаю что делать. Уже всё попробовал...

В базе есть только одна запись, и ошибка мне кажется где то в скрипте, какая-то переменная сбивается...

Вот скрин записи:


А вот 4 действуюхщих мыла:



Помогите пожалуйста, я уже не знаю что делать, где искать ошибку... ХЕЛП
Профиль Ответить
12.04.2013 01:58:30 Не получается сделать подписку Сообщение #2
malina95

malina95

Мастер

Мастер

Дата регистрации:
15.07.2012 07:13:44

Сообщений: 208

При ещё одной проверке, я обнаружил что в айди подписчика в цикле пустой, но как это может быть я не знаю. Походу где-то сбивается
Профиль Ответить
12.04.2013 02:05:39 Не получается сделать подписку Сообщение #3
malina95

malina95

Мастер

Мастер

Дата регистрации:
15.07.2012 07:13:44

Сообщений: 208

Тю блин, Михаил, ошибка была в статье, как же цикл сделает массив если в нём неправильная функция, надо не:
while (($row = $result_set->fetch_assoc) !== false) {
А надо:
while (($row = $result_set_subscribers->fetch_assoc()) !== false) {

Из-за этой ошибки я тут кипишь поднял блин...

Обалдеть, исправьте ошибку.
Профиль Ответить
12.04.2013 11:44:33 Не получается сделать подписку Сообщение #4
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

$result_set_subscribers - такой переменной в статье вообще нет, как к ней можно обращаться через fetch_assoc?
Профиль Ответить
12.04.2013 13:04:09 Не получается сделать подписку Сообщение #5
malina95

malina95

Мастер

Мастер

Дата регистрации:
15.07.2012 07:13:44

Сообщений: 208

Это опечатка, я проверял всё с print_r и забыл убрать, я надеюсь вы увмдили гдн ошибка в статье?
В цикле не fetch_assoc должно быть, а fetch_assoc()
Профиль Ответить
12.04.2013 13:20:17 Не получается сделать подписку Сообщение #6
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Да, вижу. Спасибо, исправил!
Профиль Ответить
12.04.2013 13:26:06 Не получается сделать подписку Сообщение #7
malina95

malina95

Мастер

Мастер

Дата регистрации:
15.07.2012 07:13:44

Сообщений: 208

Михаил, но всё равно работать отказывается.

В таблице с подписчиками у меня 4 подписчика, В таблице со статьями 44 статьи, а в таблице с самой рассылкой, у меня получается что последний подписчик которому отправлено стоит 0, но end=1 присутсвует, но при этом, следующего айди статьи не попадается как бы, тоесть он ищет только статью под айди 4 и всё, хотя на неё уже стоит end=1. Помогите.
Профиль Ответить
12.04.2013 13:58:34 Не получается сделать подписку Сообщение #8
malina95

malina95

Мастер

Мастер

Дата регистрации:
15.07.2012 07:13:44

Сообщений: 208

Я понял в чём проблема, отказывается работать sql запрос на выборку айди статьи, помогите составить правильный... Если вы у себя проверяли, то тоже наверное заметили что запрос убитый.

В статье напишите новый sql запрос, я просто с ними не очень дружу, но он ив правду не работает.
Профиль Ответить
12.04.2013 14:43:33 Не получается сделать подписку Сообщение #9
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Выведите запрос через echo и скопируйте сюда.
Профиль Ответить
12.04.2013 14:50:15 Не получается сделать подписку Сообщение #10
malina95

malina95

Мастер

Мастер

Дата регистрации:
15.07.2012 07:13:44

Сообщений: 208

SELECT * FROM `portal_subscribe` WHERE `end` = '0' LIMIT 1
SELECT * FROM `portal_lesson` WHERE `id` > '' LIMIT 1
Профиль Ответить