Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка про запуске скрипта PHP

61K
16 января 2012 года
vahminator
25 / / 30.10.2011
Скрипт отправки письма после регистрации на сайте. Из-за того, что много пользователей начало регится - скрипт перестал нормально работать. Переписал и теперь вылетает ошибка =(
C базой отлично конектится (авторизация же работает)

Delivery starts!MySQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Код:
<?php
echo "Delivery starts!";
include_once("../config.php");
include_once("functions.php");
include_once("class/class.phpmailer.php");
include_once("class/class.smtp.php");
include_once("class/dbrequest.class.php");

$got_tpl_id = $_GET["tpl_id"];
$curr_date = date("d-m-Y/H:i");

//PHPMailer pre-conf
$mailer = new PHPMailer();
$mailer->CharSet = "utf8";
$mailer->IsHTML(true);
$mailer->IsSMTP();
$mailer->Subject = "Тема письма";
$mailer->SetFrom("mail@exempl.com","comp_name");
$mailer->SetLanguage("ru");

session_start();
ignore_user_abort(1);
set_time_limit(3600);

$dbrequest = new DBRequest();
$dbrequest->mysqlConnect();

if($got_tpl_id){
    $tpl = explode("-",$got_tpl_id);
   
   
    foreach($tpl as $otpl){
        $where = "`id` = '$otpl'";
        if(!next($tpl)){
            $where .= " OR ";
        }
    }
    $tpl_data = $dbrequest->select("`templates`.*, `companies`.`black_list`","`templates`, `companies`","`templates`.`comp_id` = `companies`.`id` AND".$where);
    $usr_data = $dbrequest->select("*","`users`","`gurope` = 'client' OR `gurope` = 'subscriber'");
   
    foreach($tpl_data as $curr_tpl){
        $mailer->ClearBCCs();
        $mailer->ClearAddresses();
       
        if(!check_sends($tpl_comp_id)) continue;
       
        extract($tpl_data);
        $mailer->Body = $code;

        if($black_list != "" && $black_list != "N;") $black_ids = unserialize($black_list); else $black_ids []= 0;
       
        foreach($usr_data as $one_usr){
            if(array_search($one_usr["comp_id"],$black_ids)) continue;
            else $mailer->AddBCC($one_usr["email"]);        
        }
        $maillist = file("maillist.txt");
        foreach($maillist as $omail){
            $mailer->AddBCC($omail);
        }
       
       
        $mailer->Send();
        $errors = $mailer->ErrorInfo."/n";
        /*
        $sent_num = "UPDATE `companies` SET `tsent` = `tsent` + 1 WHERE `id` = '$tpl_comp_id'";
            mysql_query($sent_num);*/

    }
    file_put_contents("log.txt",$errors);    
}
else{
    echo "nobody here";
}
?>


Что не так здесь??
285
16 января 2012 года
Romik
479 / / 24.11.2002
подозреваю, что проблема в цикле, который формирует $where:
 
Код:
foreach($tpl as $otpl){
        $where = "`id` = '$otpl'";
        if(!next($tpl)){
            $where .= " OR ";
        }
    }

Чтобы убедиться в этом, выведете полученный SQL-запрос, посмотрите, что там нагенерировалось.
61K
16 января 2012 года
vahminator
25 / / 30.10.2011
Все та же ошибка... Что и была....
285
16 января 2012 года
Romik
479 / / 24.11.2002
Похвастайтесь полученным SQL-запросом
61K
16 января 2012 года
vahminator
25 / / 30.10.2011
Прописую в код
print_f ($tpl_data); // что бы вывести запрос

и ничего не происходит... Та же самая надпись что и была... Или это я уже что то не понимаю...
277
16 января 2012 года
arrjj
1.7K / / 26.01.2011
foreach($tpl as $otpl){
$where = "`id` = '$otpl'";
if(!next($tpl)){
$where .= " OR ";
}
}

echo $where;
61K
16 января 2012 года
vahminator
25 / / 30.10.2011
теперь вывело
Delivery starts!`id` = '8' OR MySQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Но всеравно не ясно для меня эта ошибка :(
285
16 января 2012 года
Romik
479 / / 24.11.2002
очевидно же, у вас условие WHERE получилось с синтаксической ошибкой:
 
Код:
WHERE `id`='8' OR

Т.е. OR в конце совершенно лишний. На это и ругается MySQL.
Не знаю, чего вы хотели добиться своим циклом, но позволю себе предположить, что он должен выглядеть следующим образом:
 
Код:
$where = "";
    foreach($tpl as $otpl){
        if ($where != "") {
            $where .= " OR ";
        }
        $where .= "`id` = '$otpl'";
    }

Мой вариант аккумулирует все опции через OR, у вас же всегда был только один параметр (переменная $where теряла значение внутри цикла). К тому же вы использовали OR, если next не вернул бы ничего.
61K
16 января 2012 года
vahminator
25 / / 30.10.2011
Romik
Спасибо, твой код помог решить проблему... Но тут же появилась вторая..
Delivery starts!`id` = '8'MySQL error: Column 'id' in field list is ambiguous
Но в той таблице есть колонка с именем "id"...
277
16 января 2012 года
arrjj
1.7K / / 26.01.2011
:facepalm:
ambiguous , Прилагательное
[æmˈbɪɡjuəs]
неоднозначный
сомнительный
двусмысленный
 
Код:
$tpl_data = $dbrequest->SELECT("`templates`.*, `companies`.`black_list`","`templates`, `companies`","`templates`.`comp_id` = `companies`.`id` AND".$where);

Выборка из двух таблиц, в которых есть поле id, и хз какой id ты в where указываешь.
либо так:
 
Код:
foreach($tpl as $otpl){
    $where = "`templates`.`id` = '$otpl'";
    if(!next($tpl)){
    $where .= " OR ";
    }
    }

либо както по другому :D
61K
16 января 2012 года
vahminator
25 / / 30.10.2011
Я так понимаю, что скрипт просто не понимает с какой базы брать id?
277
16 января 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: vahminator
Я так понимаю, что скрипт просто не понимает с какой базы брать id?


Правильно понимаешь.
Кэп подсказал?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог