Помогите с подпиской

malina95

Дракула кода:)
Всем привет!

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

Делаю я её по этой статье http://myrusakov.ru/php-subscribe.html , автор тупо не знает где ошибка.

Вообщем запрос не хочет находить следующий айди:

Весь код:

PHP:
<?php
	require_once "config.php";
	require_once "lib/functions.php";
	connectDB();
	$result_set_subscribe = $mysqli->query("SELECT `id`, `post_id`, `subscriber_id`, `end` FROM `$table_subscribe` WHERE `end` = '0' LIMIT 1"); // Получаем 1 неоконченную рассылку
	$last_subscribe = $result_set_subscribe->fetch_assoc(); // Преобразуем result_set в массив
	
	/* Если все рассылки уже отправлены, то смотрим: нет ли новых статей на сайте */
	if ($result_set_subscribe->num_rows == 0) {
		$result_set_post = $mysqli->query("SELECT `id` FROM `$table_lesson` WHERE `id` > '".$last_subscribe['post_id']."' LIMIT 1");
		if ($result_set_post->num_rows == 0) exit; // Если ничего нового нет, то просто выходим
		$post = $result_set_post->fetch_assoc(); // Получаем данные о новой статье
		$mysqli->query("INSERT INTO $table_subscribe (`post_id`, `subscriber_id`, `end`) VALUES ('".$post['id']."', '0', '0')"); // Добавляем в очередь новую рассылку
		exit; // Выходим, а через 10 минут данный скрипт будет снова запущен, и уже пойдёт непосредственно рассылка писем
	}
	
	$id = $last_subscribe['id'];
	$post_id = $last_subscribe['post_id'];
	$last_id = $last_subscribe['subscriber_id']; // Получаем id подписчика, которому было отправлено письмо в последний раз
	
	$result_set_subscribers = $mysqli->query("SELECT * FROM $table_subscribers WHERE `id` > '".$last_id."'");
	$count = 0;
	while (($row = $result_set_subscribers->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 `url` FROM $table_lesson WHERE `id` = '".$post_id."'");
		$post_mail = $result_set_mail->fetch_assoc(); // Получаем данные о новой статье
		
		$subject = 'Новая статья на сайте Malinichev.ru';
		$message = '
			<p>Здравствуйте, <b>'.$subscriber_name.'</b>!</p>
			<br />
			На сайте <a href = "http://malinichev.ru/">Malinichev.ru</a> появилась новая статья.<br />
			Чтобы <b>ознакомиться</b> с новой статьёй, пройдите по ссылке ниже:<br />
			<a href = "http://malinichev.ru/lesson/'.$post_mail['url'].'.html">http://malinichev.ru/lesson/'.$post_mail['url'].'.html</a><br />
			С Уважением, Владислав Малиничев и сайт <a href = "http://malinichev.ru/">Malinichev.ru</a>!<br />
			<br />
			----------------------------------------------------------------------
			<br />
			Если Вы не желаете больше получать уведомления о новых статьях, то Вы можете отписаться, пройдя по ссылке ниже:<br />
			<a href = "ссылка">ссылка</a><br />
			Дата Вашей подписки: '.$subscriber_date.' -------- '.$subscriber_id.'<br />
		';
		$headers = "From: Malinichev.ru <[email protected]>\r\nContent-type: text/html; charset=utf-8 \r\n";
		mail ($subscriber_email, $subject, $message, $headers);
		
		/* Здесь код для отправки письма через функцию mail() */
		$count++;
		if ($count == 10) {
			$mysqli->query("UPDATE $table_subscribe SET `subscriber_id` = '".$subscriber_id."' WHERE `id` = '".$id."'"); // Обновляем информацию о последнем подписчике, которому было отправлено письмо
			break; // Выходим после 10-ти отправлений
		}
	}
	if ($result_set_subscribers->num_rows <= 10)
		$mysqli->query("UPDATE $table_subscribe SET `end` = '1' WHERE `id` = '".$id."'"); // Всё отправлено
?>
Помогите пожалуйста, уже 2 день мучаюсб с ней и не могу найти ошибку!

ХЕЛП
 

malina95

Дракула кода:)
Я про это знаю, и ошибок никаких не выводит, просто sql запрос не может получить айди больше определённого.

Помогите пожалуйста
 

Andkorol

Новичок
Ну а они в таблице есть?
Ты сам запрос выведи – посмотри, в него подставляется корректное значение?
 

malina95

Дракула кода:)
PHP:
$result_set_post = $mysqli->query("SELECT `id` FROM `$table_lesson` WHERE `id` > '".$last_subscribe['post_id']."' LIMIT 1");
 

Andkorol

Новичок
Не-не-не, Девид Блейн :D
Выведи готовый запрос, с подставленными значениями переменных.
 

malina95

Дракула кода:)
SELECT * FROM `portal_lesson` WHERE `id` > '4' LIMIT 1

При выводе вроде нормально, но всё равно в базу подставляется id=4 хотя должно подставляться 5
 

С.

Продвинутый новичок
Данный SQL отрабатывает, как ты ожидаешь?
 

hell0w0rd

Продвинутый новичок
То что в '' - MySQL интерпретирует как строку. А строки приводятся к 0.
SELECT * FROM `portal_lesson` WHERE `id` > '4' LIMIT 1
Чтобы избежать таких выкидонов - советую использовать:
https://github.com/colshrapnel/safemysql/blob/master/safemysql.class.php - от великих
https://github.com/hell0w0rd/MySQLClass/blob/master/src/hell0w0rd/SqlManager.php - или от невеликих, стыривших:)
А лучше и вообще PDO)
 

С.

Продвинутый новичок
Что ты ожидаешь в результате запроса?
Что получешь?
 

Andkorol

Новичок
Ты словами объясняй – а не картинки показывай.
Куда вместо id=4 должно подставляться 5?
Откуда в твоем коде должна появиться эта 5?
 

malina95

Дракула кода:)
PHP:
$result_set = $mysqli->query("SELECT `id`, `post_id`, `subscriber_id`, `end` FROM `$table_subscribe` WHERE `end`='0' LIMIT 1");
$last_subscribe = $result_set->fetch_assoc();
Этим я получаю рассылки, если все законченные (end=1), то ищем новые рассылки в таблице со статяьми:
PHP:
if ($result_set->num_rows == 0) {
$result_set = $mysqli->query("SELECT `id` 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 минут данный скрипт будет снова запущен, и уже пойдёт непосредственно рассылка писем
}
И получается что $post['id'] равен 4 а не 5, потому что в базе последняя рассылка с post_id=4 и запрос должен вернуть айди больше четурёх если он есть, но он есть и всё равно возвращает 4 вместо 5
 

hell0w0rd

Продвинутый новичок
С., Andkorol
Гм. Не строки которые нельзя перевести в числа приводятся к нулю. Да, был не прав
Однако не стоит ставить '' там где нужны числа, тут вы согласны?)
 
Сверху