Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2012, 05:29   #1
elitdie
Новичок
Джуниор
 
Регистрация: 17.09.2012
Сообщений: 4
По умолчанию Проблема с логикой в PHP-скрипте.

Добрый день, уважаемые форумчане!

У меня есть задача и проблема с её реализацией.

Задача:
При заходе в гипотетическую HRM у человека должно высвечиваться модальное (без возможности закрытия) окно. Окон будет четыре.
  1. Моя цель
  2. Мой самоанализ
  3. Конспект
  4. Новости
Все, кроме новостей выглядит как textarea, которая пишется в базу.
Новости - отдельный скрипт, для выполнения этого не важный.
Основа понятна, я думаю.
Теперь условия:
  1. Первые три дня окно с Моей целью можно не заполнять и закрыть.
  2. Моя цель демонстрируется только при её отсутствии в базе.
  3. Мой самоанализ демонстрируется каждый понедельник.
  4. Моя цель, конспект и новости - на следующий день в 9:00.
  5. Скрипт должен адекватно реагировать на обновление страницы - показывать окна, если работа с ними не была закончена.
Теперь о жопе:
Я не могу подкорректировать скрипты добавления цели/конспекта/анализа. В результате должен получится один скрипт popup.php, который будет инклудиться в HRM. Скрипты добавления цели/конспекта/анализа уже написаны и функционируют сейчас. Окна уже вызываются через fancybox и имеют ID (поэтому такие странные названия ). То есть мой скрипт думает, что и когда вызвать и в конце делает $('#айди').trigger('click').

Вроде все просто, но с логикой прям беда.
В данный момент работает почти все, но окна показываются дважды. То есть заходит человек - появляется окно, заполняет Мою цель - все сохраняется. Заходит заново - опять окно с Моей целью. В третий раз все нормально.

Я дико извиняюсь за писанину уровня второго класса, но я уже писал по-тупому, чтобы полностью отслеживать код

popup.zip - скрипты, старые версии, fancybox, jquery, подключение к базе.
fortest_sql.zip - структура базы данных
Вложения
Тип файла: zip popup.zip (182.8 Кб, 7 просмотров)
Тип файла: zip fortest_sql.zip (632 байт, 6 просмотров)

Последний раз редактировалось elitdie; 17.09.2012 в 06:00.
elitdie вне форума Ответить с цитированием
Старый 17.09.2012, 05:50   #2
elitdie
Новичок
Джуниор
 
Регистрация: 17.09.2012
Сообщений: 4
По умолчанию

Шапка проста донельзя.

Код HTML:
<head>
<meta http-equiv="Content-Type" content="text/html;charset='windows-1251'">
<link type="text/css" href="../fancybox/jquery.fancybox-1.3.4.css" rel="Stylesheet" />
<script src="../jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="../fancybox/jquery.fancybox-1.3.4.pack.js" type="text/javascript"></script>
</head>
elitdie вне форума Ответить с цитированием
Старый 17.09.2012, 05:51   #3
elitdie
Новичок
Джуниор
 
Регистрация: 17.09.2012
Сообщений: 4
По умолчанию

PHP код:
<?php
error_reporting
(E_WARNING);

//подключаемся
include('../connect.php');
//достаем ID пользователя из сессии
$userid_pp $_SESSION[cislo] = 80;

//инициализация разных переменных
$nowdate_pp date('Y-m-d H:i:s');
$nextdate_pp date('Y-m-d 9:00:00',strtotime('next day'));
$demonstrate_pp ''//здесь название окна, которое хотим показать
$allwindows_pp = array('mytarget','myanaliz','kniga-add','pop-vac_new');

//достаем из базы данные о выведенных окнах
$query_pp 'SELECT `id`,`date`,`next_popup`,`popup_id` FROM `popup_windows` WHERE `userid` = '.$userid_pp;
$result_pp mysql_query($query_pp);

//если в базе ничего нет, заполняем её с директивой "показать сейчас"
if(!@mysql_num_rows($result_pp)) {
    
$insert_query_pp "INSERT INTO `popup_windows` VALUES
        (0,'
$userid_pp','$nowdate_pp','$nowdate_pp','mytarget'),
        (0,'
$userid_pp','$nowdate_pp','$nowdate_pp','myanaliz'),
        (0,'
$userid_pp','$nowdate_pp','$nowdate_pp','kniga-add'),
        (0,'
$userid_pp','$nowdate_pp','$nowdate_pp','pop-vac_new')";
    
mysql_query($insert_query_pp);
    unset(
$insert_query_pp);
}
//перебираем все, что есть в базе и применяем проверки
while ($row_pp = @mysql_fetch_assoc($result_pp)) {
    
//если сегодняшняя дата больше даты следующего запуска (т.е. надо показать окно)
    
if(strtotime($nowdate_pp) > strtotime($row_pp[next_popup])){
        echo 
$row_pp[popup_id];
        
//моя цель
        
if($row_pp[popup_id] == 'mytarget'){
            
//если "Моя цель" у юзера заполнена, пропускаем проверки
            
$target_query_pp "SELECT `target` FROM `users` WHERE `id` = '$userid_pp' LIMIT 1";
            
$target_result_pp mysql_query($target_query_pp);
            
$target_row_pp mysql_fetch_assoc($target_result_pp);
            if(
$target_row_pp[target] != '') continue;

            
//иначе проверяем условия и показываем окно
            
$demonstrate_pp 'mytarget';
            
//если с момента записи прошло 3 дня, не даем закрыть окно
            
if(strtotime($row_pp[next_popup]) - strtotime($row_pp[date]) >= 259200){
                
$class_pp 'unclozable';
            }

            
//обновляем данные в базе
            
$target_query_pp "UPDATE `popup_windows` SET `next_popup` = '$nextdate_pp' WHERE `id` = $row_pp[id]";
            
$target_result_pp mysql_query($target_query_pp);
            unset(
$target_query_pp,$target_result_pp,$target_row_pp);
            break;
        }
        
//"Мой самоанлаиз"
        
if($row_pp[popup_id] == 'myanaliz'){
            
$demonstrate_pp 'myanaliz';
            
$class_pp 'unclozable';
            
$nextdate_pp date('Y-m-d 9:00:00',strtotime('next monday'));
            
//если сегодня понедельник, смотрим анализ за сегодня
            //иначе - за прошлый понедельник.
            
if(date('w') == 1$date_pp date('d.m.Y');
            else 
$date_pp date('d.m.Y',strtotime('last monday'));

            
$analiz_query_pp 'SELECT * FROM `user_analiz` WHERE `user_id` = '.$userid_pp.' AND `date` LIKE "'.$date_pp.'%" LIMIT 1';
            
$analiz_result_pp mysql_query($analiz_query_pp);

            
//если записей нет - демонстрируем окно
            
if(@mysql_num_rows($analiz_result_pp) == 0){
                break;
            }
            
//обновляем данные в базе
            
$analiz_query_pp "UPDATE `popup_windows` SET `next_popup` = '$nextdate_pp' WHERE `id` = $row_pp[id]";
            
$analiz_result_pp mysql_query($analiz_query_pp);
            unset(
$date_pp,$analiz_query_pp,$analiz_result_pp);
            break;
        }
        
//"Конспект"
        
if($row_pp[popup_id] == 'kniga-add'){
            
$demonstrate_pp 'kniga-add';
            
$class_pp 'unclozable';
            
$date_pp date('d.m.Y');

            
//смотрим конспект на сегодня
            
$conspect_query_pp 'SELECT * FROM `user_kniga` WHERE `user_id` = '.$userid_pp.' AND `date` LIKE "'.$date_pp.'%" LIMIT 1';
            
$conspect_result_pp mysql_query($conspect_query_pp);

            
//если записей нет - демонстрируем окно
            
if(@mysql_num_rows($conspect_result_pp) == 0){
                break;
            }

            
//обновляем данные в базе
            
$conspect_query_pp "UPDATE `popup_windows` SET `next_popup` = '$nextdate_pp' WHERE `id` = $row_pp[id]";
            
$conspect_result_pp mysql_query($conspect_query_pp);
            break;
        }
        
//новости
        
if($row_pp[popup_id] == 'pop-vac_new'){
            
$demonstrate_pp 'pop-vac_new';
            
$class_pp 'unclozable';
            
//обновляем данные в базе
            
$news_query_pp "UPDATE `popup_windows` SET `next_popup` = '$nextdate_pp' WHERE `id` = $row_pp[id]";
            
$news_result_pp mysql_query($news_query_pp);
            break;
        }
    }
}

?>

Последний раз редактировалось elitdie; 17.09.2012 в 05:53.
elitdie вне форума Ответить с цитированием
Старый 17.09.2012, 05:54   #4
elitdie
Новичок
Джуниор
 
Регистрация: 17.09.2012
Сообщений: 4
По умолчанию

Код HTML:
<script>
$(document).ready(function(){
	<?php foreach($allwindows_pp as $val_pp){
		echo '$("#'.$val_pp.'").addClass("'.$class_pp.'");';
		echo '$("#'.$val_pp.'").fancybox({
		width: "500px",
		height: "400px",
		modal: true,
		iframe: true
	});';
	}
	?>

	$('a.unclozable').fancybox({
		width: '500px',
		height: '400px',
		modal: true,
		iframe: true
	});
	$('#pop-vac_new').fancybox({
		width: '900px',
		height: '700px',
		modal: true,
		iframe: true
	});
	$('#<?php echo $demonstrate_pp;?>').trigger('click');
});
</script>

<a href='popup_proc.php' id='pop-vac_new'>Новости</a>
<a href='pp_analiz.php' id='myanaliz'>Анализ</a>
<a href='pp_target.php' id='mytarget'>Цель</a>
<a href='pp_kniga.php' id='kniga-add'>Конспект</a>
elitdie вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как поменять условия в php скрипте alexp21 PHP 1 29.11.2011 23:39
Пофиксить баги в php скрипте Cone PHP 0 02.09.2011 18:32
Проблема с таблицами в скрипте. filimon2010 PHP 2 16.10.2010 15:25
Ошибка в скрипте (html+php) SwitchOFF PHP 4 17.08.2009 15:23
написать функцию в скрипте(php) Sysman Фриланс 1 30.09.2008 12:32