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

Ваш аккаунт

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

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

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

Код отрабатывет два раза. Ошибка или глюк?

5.5K
09 мая 2007 года
Boom.Olezka
69 / / 12.09.2006
Написал несложный скрипт - подписка на рассылку! При подписке нового ящика, на этот ящик отсылается письмо с кодом подверждения. Пользователь нажимает на ссылку в письме и его подписка становится активной.

Очень странные глюки возникают... Если ввожу майл который ниразу не вводил то скрипт отрабатывает неправельно, и генерит один ключ а отсылает другой. Стираю всю инфу по майлу из базы и завожу его опять... уже втрой или третий раз и скрипт работает как надо. Что это вообще такое? :eek:
10K
09 мая 2007 года
jwagra
62 / / 23.08.2006
Цитата:
Очень странные глюки возникают... Если ввожу майл который ниразу не вводил то скрипт отрабатывает неправельно, и генерит один ключ а отсылает другой. Стираю всю инфу по майлу из базы и завожу его опять... уже втрой или третий раз и скрипт работает как надо. Что это вообще такое? :eek:



Если вы приведете кусок вашего кода, где "скрипт отрабатывает неправельно", будет проще найти ошибку.

15
09 мая 2007 года
shaelf
2.7K / / 04.05.2005
Как правило (в 98%) можно с уверностью сказать что это руки. Подробности только после просмотра кода. А лучше поучись сам искать ошибки. Поставь на локальную машину xdebug и вперёд.
10K
09 мая 2007 года
jwagra
62 / / 23.08.2006
delete this msg
5.5K
09 мая 2007 года
Boom.Olezka
69 / / 12.09.2006
Вот даю код! В этом коде по какой-то причине отробытывает запрос INSERT и UPDATE но апдейтит уже с другим conf_code (должен только INSERT). conf_code генерируется вначале всего скрипта один раз... Но в моё случа он генерируется два раза... Никаких циклов у меня нету...

Код:
if ((isset($subscribe)) AND ((isset($newslist)) OR (isset($afishalist))))
      {
       $sql = "SELECT count(id_user) as col FROM subscribe_users WHERE email='$useremail'";
       $data = mysql_query($sql);
       $row = mysql_fetch_array($data);
       $res10 = $row[col];
       if ($res10 == 0)
       {
        $sql = "INSERT INTO subscribe_users (id_user, email, utime, conf_code) VALUES('', '$useremail', '$utime', '$conf_code')";
        print("<br><br>$sql<br><br>");
        mysql_query($sql) or die($sql);
        $last_id = mysql_insert_id();
       }


       print("<br><br> ----- $res10 ---------<br><br>");

      if ($res10>0)
       {
        $sql = "UPDATE subscribe_users SET conf_code='$conf_code' WHERE email='$useremail'";
        print("<br><br>$sql<br><br>");
        $data = mysql_query($sql) or die($sql);

        $sql = "SELECT id_user FROM subscribe_users WHERE conf_code='$conf_code' AND email='$useremail'";
        $data = mysql_query($sql);
        $row = mysql_fetch_array($data);
        $last_id = $row[id_user];
       }


       if (isset($newslist))
        {
         $sql = "INSERT INTO subscribe_users_groups SET id_user='$last_id', id_group='20'";
         $res1 = mysql_query($sql);
        }

       if (isset($afishalist))
        {
         $sql = "INSERT INTO subscribe_users_groups SET id_user='$last_id', id_group='21'";
         $res2 = mysql_query($sql);
        }

        if ($res1 == FALSE)
         {
          print("<br><span class=\"subtitle\">Вы уже подписаны на \"Новости Meeting.lv\"</span><br>");
         }

        if ($res2 == FALSE)
         {
          print("<br><span class=\"subtitle\">Вы уже подписаны на \"Анонсы афиши\"</span><br>");
         }


        if (($res1 == TRUE) OR ($res2 == TRUE))
        {

         $headers = 'Content-type:text/html; Charset=windows-1251' . "\r\n" . 'From: editor@site.lv' . "\r\n" . 'Reply-To: editor@site.lv' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
         $body_tmp = "Зайдите по этой ссылке, чтобы подтвердить подписку<br><br> <a href=\"http://www.site.lv/service/subscribe.php?confirm=do&email=$useremail&code=$conf_code\" target=\"_blank\">http://www.site.lv/service/subscribe.php?confirm=do&email=$useremail&code=$conf_code</a>";
         mail($useremail, "Confirm link from Meeting.LV", $body_tmp, $headers);
         print("<br><br>$body_tmp<br><br>");

         print("<br><span class=\"subtitle\"><font color=\"red\">Спасибо!</font> <br> В ближайшее время на указанный вами e-mail<br> придет письмо со ссылкой, которую необходимо<br> будет активизировать.<br><br><a href=\"http://www.meeting.lv\">Перейти на главную</a></span><br>");
         $hide_form = TRUE;
        }
92
09 мая 2007 года
Тень Пса
2.2K / / 19.10.2006
1. используй LIKE в запросе.... (имхо это правильнее, ибо сравнение строк)

2. сделай запрос типа
 
Код:
$sql = "SELECT id_user FROM subscribe_users WHERE email LIKE '{$useremail}'";


и в $resl0 бери количество вернувшихся строк в результате

 
Код:
$mres = mysql_query($sql);
$resl0 = mysql_num_rows($mres);


тогда ты с уверенностью можешь сказать, что если у тебя 0 вернулось, то юзеров таких нет и добавить нового, а если есть (вернулось не 0), то
 
Код:
while ($row = mysql_fetch_row($mres)) {
 // тут твой UPDATE, брать id_user - $row[0] :)
}


собссна я думаю (это не факт что это истина ;) ), что так будет работать.....
5.5K
09 мая 2007 года
Boom.Olezka
69 / / 12.09.2006
Вообще жесть творится :) Теперь запрос INSETRT который добавляет майл отрабатывает три или два раза с разным conf_code, майл просто дублируется!!! У меня в сркипте нет неодного цикла :mad:

Вот как я исправил

Код:
$sql = "SELECT id_user FROM subscribe_users WHERE email LIKE '{$useremail}'";
       $data = mysql_query($sql) or die($sql);
       $row = mysql_fetch_array($data);
       $col = mysql_num_rows();

       if ($col == 0)
       {
        $sql = "INSERT INTO subscribe_users (id_user, email, utime, conf_code) VALUES('', '$useremail', '$utime', '$conf_code')";
        mysql_query($sql) or die($sql);
        $last_id = mysql_insert_id();
        print("<br><br>$sql<br><br>");
       }
      else
       {
        $sql = "UPDATE subscribe_users SET conf_code='$conf_code' WHERE email LIKE '{$useremail}'";
        print("<br><br>$sql<br><br>");
        $data = mysql_query($sql) or die($sql);

        $sql = "SELECT id_user FROM subscribe_users WHERE conf_code='$conf_code' AND email LIKE '{$useremail}'";
        $data = mysql_query($sql) or die($sql);
        $row = mysql_fetch_array($data);
        $last_id = $row[id_user];
       }
92
09 мая 2007 года
Тень Пса
2.2K / / 19.10.2006
я там немного перемудрил....

while не нужен, если у тебя не могут дублироваться email адреса в таблице... вот :)
15
09 мая 2007 года
shaelf
2.7K / / 04.05.2005
Хотел переписать, но долго как-то)) Ну да ладно
1. Для сравнения с булевой используй ===
2. Используй die(mysql_error()), она больше скажет чем скуль запрос.
Вытащи всё, что неотносится к делу (отладочные принты и т.д.), только проблемный код (это на будующее).
5.5K
10 мая 2007 года
Boom.Olezka
69 / / 12.09.2006
Спасибо за советы :) С горем пополам разобрался - переписал весь код заново, немного подругому.
5.5K
11 мая 2007 года
Boom.Olezka
69 / / 12.09.2006
на самом деле проблема так и не решилась... Третий день уже сижу :) Оказывается мой код отрабатывает иногда три иногда два раза. Причём дело не в коде а в файлах include наверное... У меня самописный движок, я пришёл он уже был написан. Загружа файл subscribe.php в этот файл подгнуржается index.php а уже в index.php код моего скрипта subscribe_code.php! Я поставил (в subscribe_code.php) простенький запрос INSERT, чтобы посмотреть сколько раз страница отрабатывает... Загружаю subscribe.php?umba=gfhd и вижу в базе появилась на одна запись, с сразу три :)) Хотя никакой перезагрузки страницы небыло... Самое интресное дальше если я буду продолжать выполнять именно это subscribe.php?umba=gfhd мой тестовый INSERT запрос отработает уже один раз, как только я сменю переметры на новые например subscribe.php?qwerty=ytrewq то опять получу три отработанных INSERT и если повторю ещё раз, то уже один INSERT отработает... А если вернусь к старому subscribe.php?umba=gfhd то опять получу только один INSERT! Вообще бред како-то я уже ничего не понимаю. Уже пробывал и require_once(); думал это в тему... но нет. У кого какие мысли что это вообще может быть? :rolleyes:
244
11 мая 2007 года
UAS
2.0K / / 19.07.2006
Переделать тот подключаемый файл
92
11 мая 2007 года
Тень Пса
2.2K / / 19.10.2006
попробуй определить константу после всех твоих махинаций с БД..., а перед действиями с БД проверяй есть ли такая константа... ну и надо проверять, не изменились ли параметры вызова, или, скажем, константу после подгрузки скрипта (в самом "верхнем" файле) "пристреливать"....

мне помогло в процессе разработки инет-магазина. у меня каталог (здаровенная такая фиговина) 3 раза подгружался......... теперь 1 раз :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог