Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
maruo
132 / 132 / 48
Регистрация: 26.04.2013
Сообщений: 1,355
1

Архитектура

22.03.2016, 00:31. Просмотров 196. Ответов 1
Метки нет (Все метки)

Вот скажите как правильно это сделать(Знаю нужно читать книгу про MVC , смотреть готовые фраемворки и т.д)
Но времени на это пока не хватает.

1)Отправляю ajax запрос
2)Файл action.php обрабатывает.
action.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
if(isset($_GET['by_ticket']) and isset($_GET['lot'])){
            session_start();
            include_once"connect_bd.php";
            $lot_id = mysqli_real_escape_string($link,$_GET['lot']);//Выбранный лот
            $numb_tiket = mysqli_real_escape_string($link,$_GET['by_ticket']);//Номер покупаемого билета
            /*
            Подгружаем нужные данные для проверки
            */
            $request_verification = mysqli_query($link,"SELECT ticket_number FROM start_lot 
                                                                             WHERE lot_id='$lot_id' 
                                                                             and ticket_number ='$numb_tiket'
                                                                             LIMIT 1
                                                                             ")or die(mysqli_error($link));
 
            $num_rows = mysqli_num_rows($request_verification);
                
            $query_price_ticket = mysqli_query($link,"SELECT price_ticket FROM lottery
                                                                          WHERE lot_id='$lot_id'
                                                                          ")or die(mysqli_error($link));
 
            $result_varification = mysqli_fetch_assoc($query_price_ticket);
            $price_ticket = $result_varification['price_ticket'];
 
            /*
            Проверяем условие
            */
            if($num_rows >= 1){
                $return_message = ShowSWalert('Oops...!','Ticket already bought!','error');
            }elseif(@$_SESSION['balance'] < $price_ticket){
                $return_message = ShowSWalert('Oops...!','Not enough money(','error');
            }else{
                $return_message = ShowSWalert('Successfully!','Ticket #'.$numb_tiket.' successfully purchased','success');
            $result = $_SESSION['balance'] - $price_ticket;
            $query_upd = mysqli_query($link,"UPDATE users SET user_coins ='$result'
                                                          WHERE user_id ='".$_SESSION['user_id']."' ") 
                                                          or die(mysqli_error($link));
 
            $user = $_SESSION['user_id'];//Пользователь который покупает данный билет
            $date_lot = date("Y:m:d:H:i:s");//Дата покупки
            $query_ins = mysqli_query($link,"INSERT INTO start_lot (user_id,lot_id,date_lot,ticket_number)
                                                    VALUES ('$user','$lot_id','$date_lot','$numb_tiket')
                                                    ")or die(mysqli_error($link));
        }
И так, после того как мы обработали, выполнили определенные действия по условию, нам надо вернуть обратно аяксу данные.

Продолжение action.php этого же блока....

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
        Собираем данные и отправляем ответ
        */
        $query = mysqli_query($link,"SELECT l.lot_id,s.ticket_id,s.user_id,s.ticket_number FROM lottery l
                                                            LEFT JOIN start_lot s USING(lot_id)
                                                            WHERE lot_id='$lot_id'
                                                            ")or die(mysqli_error($link));
 
        while($result_query = mysqli_fetch_assoc($query)){
                $ticket[] = $result_query['ticket_number'];
                $user_id[] = $result_query['user_id'];
                $new_arr = array_combine( $ticket , $user_id );//Создаем новый массив для цикла $ticket['array'] Служит ключем, $user_id Значением
        }
 
        $query_full_item = mysqli_query($link,"SELECT name_item,rare_item,price_item,price_ticket,count_tickets,lot_status,img 
                                                                FROM lottery 
                                                                WHERE lot_id='$lot_id' 
                                                                LIMIT 1
                                                                ")or die(mysqli_error($link));
 
        while($result_query = mysqli_fetch_assoc($query_full_item)){
                $max_count_tick = $result_query['count_tickets'];
                $data_item[] = $result_query;//Информация о предмете    
        }
        
        $query_log = mysqli_query($link,"SELECT s.user_id, s.date_lot, s.ticket_number, u.name
                                                                    FROM start_lot s
                                                                    LEFT JOIN users u ON s.user_id = u.user_id 
                                                                    WHERE lot_id='$lot_id' 
                                                                    ORDER BY s.date_lot DESC
                                                                    ")or die(mysqli_error($link));
 
        $query_count = mysqli_query($link,"SELECT COUNT(*) FROM start_lot
                                                            WHERE lot_id='$lot_id'
                                                            ")or die(mysqli_error($link));
 
        $result_count = mysqli_fetch_assoc($query_count);
        $count_mest = $result_count['COUNT(*)'];
        
            if(mysqli_num_rows($query_log) <= 0){
                $data = '';
                }else{
                    while($result_query = mysqli_fetch_assoc($query_log)) {
                        $data[] = $result_query;
                    }
            }
            if(empty($_SESSION['auth'])){
                $ticket_data = '';
            }else{
 
                $query_user_tickets = mysqli_query($link,"SELECT ticket_number FROM start_lot s
                                                            WHERE lot_id='$lot_id' AND user_id='".$_SESSION['user_id']."'
                                                            ")or die(mysqli_error($link));
 
            if(mysqli_num_rows($query_user_tickets) <= 0){
                $ticket_data = '';
            }else{
                while($result_ticket = mysqli_fetch_assoc($query_user_tickets)) {
                    $trash[] = $result_ticket['ticket_number'];
                    $ticket_data = implode(",", $trash);//Билеты купленые авторизованный пользователем
                    }
                }
            }    
 
                        $cell = null;
                        for ($i=1; $i < $max_count_tick+1 ; $i++) {
                            if(in_array($i, $ticket)){
 
                                $user_id = $new_arr[$i];
                                // Подгружаем иконки пользователей //
                                $select_avatar = mysqli_query($link,"SELECT avatar  FROM users
                                                                            WHERE user_id='$user_id'
                                                                            ")or die(mysqli_error($link));
                                $mini_ava = mysqli_fetch_assoc($select_avatar);
                                $cell .= '<div class="div-img"><a class="minimg" href="profile.php?id='.$user_id.'">
                                          <img  class="minimg" src="'.$DIR_IMG.$mini_ava['avatar'].'" ></a></div>';
                            }else{
 
                                $cell .= '<a href="#" class="div" onclick="SWalert('.$i.','.$lot_id.');">'.$i.'</a>';
                            }
                        }
 
                        echo json_encode(array($data,$ticket_data,$count_mest,$data_item,$cell,$return_message));
                        exit();
 
            }
Проблема в том что запросы до выполнения условия могут совпадать с запросами после, когда уже собираемся отправить ответ. Но это необходимо.Иначе нам в ответ придут старые не обновленные данные.
Вот как тут быть?
А так же по качеству кода тоже выслушаю критику, где что нельзя использовать и как лучше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2016, 00:31
Ответы с готовыми решениями:

Модульная архитектура приложения
Здравствуйте! Подскажите идею красивой архитектуры модульного приложения....

Архитектура онлайн-игры
Здравствуйте!.. О чем речь: В данный момент решил взяться за написание...

Архитектура php приложений
Здравствуйте, впервые работаю с PHP Достался достаточно большой проект на нём,...

Архитектура+БД социальной сети
Здравствуйте, уважаемые программисты. Я новичек в php и начал делать свой...

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

1
Gcom
22.03.2016, 11:43     Архитектура
  #2

Не по теме:

maruo, По качеству кода, мне кажется так куда смотрится симпатичней:

PHP
1
2
3
4
5
6
7
8
    $request_verification = mysqli_query ($link,"
        SELECT ticket_number 
            FROM start_lot
            WHERE 
                lot_id        ='$lot_id' and 
                ticket_number ='$numb_tiket'
            LIMIT 1
        ") or die (mysqli_error ($link));

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2016, 11:43
Привет! Вот еще темы с ответами:

MVC на практике [Архитектура приложения]
Вкратце: как правильно создать структуру приложения, на что опираться? И как...

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

архитектура съема позиций
Добрый день! Имею в црм приложение по съему позиций в яндексе, 20 проектов по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru