Система тикетов на PHP

Форум для тех кто начинает осваивать язык php.
Max19991
Сообщения: 2

Система тикетов на PHP

Сообщение Max19991 » Пн дек 15, 2014 10:03 pm

Здравствуйте. И сразу к делу с php никак не лажу, поэтому обращаюсь к знающим людям. Ребятушки, помогите мне пожалуйста, написать скрипт технической поддержки пользователей.
Нужно, чтобы при отправке сообщения запись записывалась в бд, а далее выводилось на страницу вывода сообщений пользователя.

Страница c подробным описанием:

Код: Выделить всё

<article class="content page_catalog">
        <h1>Система технической поддержки</h1>

    <h4>#1: Test</h4>

    <table class="catalog new">
        <tr>
            <th style="width:150px;">Информация</th>
            <th>Вопрос</th>
        </tr>
        <tr>
            <td style="vertical-align:top;">
                Статус: <small>Открыт</small><br />
                Ответов: <small>0</small><br />
            </td>
            <td style="text-align:left;vertical-align:top;">Test</td>
        </tr>
    </table>

<
br />



<
br />

<
form method="post" action="">
<
input value="" />    <table class="catalog new">
        <tr>
            <th>Ответить</th>
        </tr>
        <tr>
            <td style="text-align:left;vertical-align:top;"><textarea style="border: 2px solid #1abc9c; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 5px; width: 945px; max-width: 942px; height: 170px; line-height: 16px; color: rgb(102, 102, 102); margin: 0px; background: rgb(255, 255, 255);margin-bottom: 10px;margin-top: 10px;" name="message" placeholder="Содержимое ответа" required=""></textarea></td>
        </tr>
        <tr>
            <td><input type="submit" value="Ответить" style="background:#2ecc71;color:#fff;border:0;border-radius:3px;text-transform:uppercase;font-size:14px;font-weight:bold;padding:5px 15px;"></td>
        </tr>
    </table>
</
form>

<
br />

<
form method="post" action="">
<
input value="" />    
    
<table class="catalog new">
        <tr>
            <th>Закрыть вопрос</th>
        </tr>
        <tr>
            <td><input type="submit" name="close" value="Закрыть" style="background:#2ecc71;color:#fff;border:0;border-radius:3px;text-transform:uppercase;font-size:14px;font-weight:bold;padding:5px 15px;"></td>
        </tr>
    </table>
</
form>


</
article>

Страница вывода сообщений пользователя:

Код: Выделить всё

<article class="content page_catalog">
        <h1>Система технической поддержки</h1>
<
p><a href="/tickets/add/">Задать новый вопрос</a></p>
    <h4>Активные вопросы</h4>
    <table class="catalog new">
        <tr>
            <th></th>
            <th>Тема</th>
            <th>Сообщений</th>
        </tr>
        <tr>
            <td colspan="4">Активных вопросов нет</td>
        </tr>
        </table>
</
article>

Форма отправки сообщения:

Код: Выделить всё

<article class="content page_catalog">
    <
h4>Добавить новый вопрос</h4>

<
form method="post" action="">
<
input value="" />    
    <
table class="catalog new">
        <
tr>
            <
td><input style="width:935px;" type="text" name="title" required="" placeholder="Тема вопроса"></td>
        </
tr>
        <
tr>
            <
td style="text-align:left;vertical-align:top;"><textarea style="border: 2px solid #1abc9c; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 5px; width: 945px; max-width: 942px; height: 170px; line-height: 16px; color: rgb(102, 102, 102); margin: 0px; background: rgb(255, 255, 255);margin-bottom: 10px;margin-top: 10px;" name="message" placeholder="Содержимое вопроса" required=""></textarea></td>
        </
tr>
        <
tr>
            <
td><input type="submit" value="Добавить новый вопрос" style="background:#2ecc71;color:#fff;border:0;border-radius:3px;text-transform:uppercase;font-size:14px;font-weight:bold;padding:5px 15px;"></td>
        </
tr>
    </
table>
</
form>

</
article

Ребят, прошу вас) помогите чем сможете, буду премного благодарен.
Реклама
Аватара пользователя
Местный бот
Сообщения: 153

Re: Система тикетов на PHP

Сообщение Местный бот » Вт дек 16, 2014 8:10 am

На что это похоже? Может быть на форум? Где люди создают темы с вопросам, а им отвечают.
Писать может кто угодно или только зарегистрированные?
<php
// Понравилось? Жми большой палец вверх.
// Местный бот 2014 - 2016 ©

echo 'Большой Привет от Местного бота!';
Max19991
Сообщения: 2

Re: Система тикетов на PHP

Сообщение Max19991 » Вт дек 16, 2014 11:05 am

Что-то более на форум, но нет. У меня на сайте есть регистрация и у каждого пользователя после авторизации должна быть своя страница с вопросами, не одна общая страница где будут выводиться все вопросы, а только личные вопросы пользователя.

Вот для примера, я не знаю, может это поможет чем-то реализовать такое:

Конфиг настроек профиля

Код: Выделить всё

<?php
if 
(!defined("CHECK")) die( header('Location: /404/') );
$this->title = 'Настройки профиля';


if (empty($_SESSION['auth'])):
    header('Location: /auth/');
    exit;
endif;

$err[0] = '';

$tk = new token();

$check_values = new filter();
$pw = new password();

$get_user = $db->row("SELECT * FROM user WHERE id = ?", array($_SESSION['auth']['id']));

// Выборка списка авторизаций
$get_auth = $db->rows("SELECT * FROM logs_auth WHERE id_user = ? ORDER BY id DESC LIMIT 50", array("replace" => array($get_user['id'])));
// Выборка списка авторизаций

// Обновление контактных данных
if (
    !empty($_POST['token']) and 
    $tk
->check($_POST['token']) and 
    $check_values
->check('icq','post','regexp','~^[A-Za-z0-9]{4,20}$~')
    ):

    $db->update("UPDATE user SET contacts = ? WHERE id = ?", array($_POST['icq'], $_SESSION['auth']['id']));
    $err[0] = '<div class="success">Контактные данные успешно изменены</div>';

endif;
// Обновление контактных данных

// Обновление пароля
if (
    !empty($_POST['token']) and 
    $tk
->check($_POST['token']) and 
    $check_values
->check('password','post','regexp','~^[A-Za-z0-9]{4,20}$~') and 
    $check_values
->check('newpassword','post','regexp','~^[A-Za-z0-9]{4,20}$~') and 
    $check_values
->check('newpassword2','post','regexp','~^[A-Za-z0-9]{4,20}$~')
    ):


    if (
        $pw->check($_POST['password'],$get_user['password']) and 
        $_POST
['newpassword'] == $_POST['newpassword2']
        ):

        $db->update("UPDATE user SET password = ? WHERE id = ?", array($pw->gen($_POST['newpassword']), $_SESSION['auth']['id']));
        $err[0] = '<div class="success">Пароль успешно изменён</div>';
    else:
        $err[0] = '<div class="error-block">Старый пароль не верен или новые пароли не совпадают</div>';
    endif;

endif;
// Обновление пароля

$get_user = $db->row("SELECT * FROM user WHERE id = ?", array($_SESSION['auth']['id']));


$token = $tk->input();
require $_SERVER["DOCUMENT_ROOT"].'/template/general/profile.tpl';


Страница настроек профиля:

Код: Выделить всё

<article class="content page_profile" style="margin-top: 14px;">
    <?=$err[0]?>
    <div class="left"> 
        <h1>Настройки профиля</h1>
        <form method="post" action="">
            <?=$token?>

            <table>
                <tr>
                    <td><label>Логин:</label></td>
                    <td><?=$get_user['login']?></td>
                </tr>
                <tr>
                    <td><label>Email:</label></td>
                    <td><?=$get_user['email']?></td>
                </tr>
                <tr>
                    <td><label>Баланс:</label></td>
                    <td><?=$get_user['balance']?> р <a href="/profile/balance/">[пополнить]</a></td>
                </tr>
                <tr>
                    <td><label for="icq">ICQ/Skype:</label></td>
                    <td>
                        <input type="text" name="icq" id="icq" autocomplete="off" value="<?=$get_user['contacts']?>" />
                    </td>
                </tr>
                <tr>
                    <td></td>
                    <td>
                        <input type="submit" value="Сохранить" />
                    </td>
                </tr>
            </table>
        </form>
    </div>

    <div class="right">
        <h1>Смена пароля</h1>

        <form method="post" action="">
            <?=$token?>
            
            <table>
                <tr>
                    <td><label for="password">Текущий пароль:</label></td>
                    <td>
                        <input type="password" pattern="^[A-Za-z0-9]{4,20}$" name="password" id="password" />
                    </td>
                </tr>
                <tr>
                    <td><label for="newpassword">Новый пароль:</label></td>
                    <td>
                        <input type="password" pattern="^[A-Za-z0-9]{4,20}$" name="newpassword" id="newpassword" autocomplete="off" />
                    </td>
                </tr>
                <tr>
                    <td><label for="newpassword2">Повторите пароль:</label></td>
                    <td>
                        <input type="password" pattern="^[A-Za-z0-9]{4,20}$" name="newpassword2" id="newpassword2" autocomplete="off" />
                    </td>
                </tr>
                <tr>
                    <td></td>
                    <td>
                        <input type="submit" value="Сменить пароль" />
                    </td>
                </tr>
            </table>
        </form>
    </div>


<?php if (!empty($get_auth)): ?>
    <h4 style="margin-top: 290px;">История активности</h4>
    <table class="catalog new">
        <tr>
            <th>Дата</th>
            <th>IP</th>
            <th>Браузер</th>
        </tr>
<?php foreach ($get_auth as $key => $value): ?>
        <tr>
            <td><?=date("d.m.Y H:i",strtotime($value['date']))?></td>
            <td><?=$value['ip']?></td>
            <td><?=$value['user_agent']?></td>
        </tr>
<?php endforeach; ?>
        </table>
<?php endif; ?>

</article>
Аватара пользователя
Slash
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

Re: Система тикетов на PHP

Сообщение Slash » Вт дек 16, 2014 12:34 pm

Набросал для примера простую систему тикетов:
Для тикетов создаем новую таблицу со всеми необходимыми полями, пример (выполняем запрос):

Код: Выделить всё

CREATE TABLE IF NOT EXISTS `ticket` (
  `
ticket_idint(11NOT NULL AUTO_INCREMENT,
  `
ticket_user_idvarchar(10NOT NULL,
  `
ticket_author_idvarchar(10NOT NULL,
  `
ticket_texttext,
  
PRIMARY KEY (`ticket_id`)
); 

ticket_id - в этом поле буде находится идентификатор сообщения.
ticket_user_id - тут будет храниться идентификатор профиля пользователя, в чьем профиле это будет создан тикет.
ticket_author_id - идентификатор автора сообщения.
ticket_text - само сообщение.

Далее пишем форму для отправки поста:

Код: Выделить всё

<?php
if (isset($_POST['submit']))
{
    
$ticket_text mysqli_real_escape_string($connecthtmlspecialchars($_POST['ticket_text']));
    
    if (empty(
$ticket_text))
    {
        echo 
'Поле для ввода текста осталось пустым. Пожалуйста заполните все поля.';
    }
    else
    {
        
$ticket_user_id $profile_user_id# Тут Ваша переменная со значением id профиля 
        
$ticket_author_id $_SESSION['user_id'];    

        
$sql "INSERT INTO ticket (ticket_user_id, ticket_author_id, ticket_text)
            VALUES ('
$ticket_user_id', '$ticket_author_id', '$ticket_text')";
        
$query mysqli_query($connect$sql);
        
        if (!
$query)
        {
            echo 
'Произошла ошибка';
        }
        else
        {
            echo 
'Ваш комментарий успешно добавлен!';
        }
    }
}
?>

<form method="post" action="">
    <textarea rows="5" cols="70" name="ticket_text"></textarea><br />
    <input class="button" type="submit" name="submit" value="Отправить" />
</form>

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

Код: Выделить всё

$sql_ticket "SELECT * 
    FROM ticket a, user b
    WHERE a.ticket_user_id = b.profile_user_id    
    ORDER BY a.ticket_id DESC"
;
$query_ticket mysqli_query($connect$sql_ticket);
if (!
$query_ticket)
{
    
mysqli_error();
}
else
{
    while(
$comment mysqli_fetch_assoc($query_ticket))
    {
        echo 
'Автор: ' $user_name '<br />';
        echo 
'Сообщение: ' $ticket_text;        
    }

Не проверял.
Сценарий требует серьёзной доделки. Это всего лишь пример... Но исходя из этого можно написать полноценную систему тикетов.

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя