Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Помощь по LitePanel

Статус пользователя suttles
сообщение 12.11.2016, 20:43
Сообщение #1


Стаж: 12 лет
Город: Москва

Сообщений: 297
Благодарностей: 30
Полезность: 97

Написал заказ веб хостинга, а команда на сервер и в базу данных не отправляет хотя ajax выводит что (Хостинг настраиваеться)
Через консоль отправляю эту команду всё устанавливаеться, а через сайт он не хочет.До этого он в базу отправлял пустой параметр только были правильные id пользователя. Я думаю что в ajax проблемы.
В чём может быть проблема
WebHost
Код
<?php
class webhostModel extends Model {
    public function createWebhost($data) {    
        $sql = "INSERT INTO `webhost` SET ";
        $sql .= "`user_id` = '" . (int)$data['user_id'] . "', ";
        $sql .= "`tarif_id` = '" . (int)$data['tarif_id'] . "', ";
        $sql .= "`location_id` = '" . (int)$data['location_id'] . "', ";
        $sql .= "`web_domain` = '" . (int)$data['web_domain'] . "', ";
        $sql .= "`database` = '0', ";
        $sql .= "`password` = '" . (int)$data['password'] . "', ";
        $sql .= "`web_date_reg` = NOW(), ";
        $sql .= "`web_date_end` = NOW() + INTERVAL " . (int)$data['web_months'] . " MONTH";
        $sql .= "`amx_bans` = '0', ";
        $this->db->query($sql);
        $return=$this->db->getLastId();
        return $return;
    }
    
    public function createMySQL($webid) {  
    $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";
    $max=10;
    $size=StrLen($chars)-1;
    $dbpass=null;
    while($max--)
    $dbpass.=$chars[rand(0,$size)];
    $sql = "create database web".$webid;
    $this->db->query($sql);
    $sql = "grant usage on *.* to web".$webid."@'%' identified by '" . $dbpass."'";
    $this->db->query($sql);
    $sql = "grant all privileges on web".$webid.".* to web".$webid."@'%'";
    $this->db->query($sql);    
    $sql = "UPDATE `webhost` SET db_pass = '" . $dbpass."' WHERE web_id = '" . (int)$webid . "'";
    $this->db->query($sql);
    $return=$this->db->getLastId();
    return $return;
    }
    
    public function deleteWebhost($webid) {
        $sql = "DELETE FROM `webhost` WHERE web_id = '" . (int)$webid . "'";
        $this->db->query($sql);
    }
    
    public function updateWebhost($webid, $data = array()) {
        if(!empty($data['db_pass'])){
            $sql="UPDATE mysql.user SET Password=PASSWORD('".$data['db_pass']."') WHERE User='web".$webid."'";
            $this->db->query($sql);
            $sql="FLUSH PRIVILEGES;";
            $this->db->query($sql);
        }
        $sql = "UPDATE `webhost`";
        if(!empty($data)) {
            $count = count($data);
            $sql .= " SET";
            foreach($data as $key => $value) {
                $sql .= " $key = '" . $this->db->escape($value) . "'";
                
                $count--;
                if($count > 0) $sql .= ",";
            }
        }
        $sql .= " WHERE `web_id` = '" . (int)$webid . "'";
        $query = $this->db->query($sql);
    }
    
    public function getWebhost($data = array(), $joins = array(), $sort = array(), $options = array()) {
        $sql = "SELECT * FROM `webhost`";
        foreach($joins as $join) {
            $sql .= " LEFT JOIN $join";
            switch($join) {
                case "users":
                    $sql .= " ON webhost.user_id=users.user_id";
                    break;
                case "web_tarifs":
                    $sql .= " ON webhost.tarif_id=web_tarifs.tarif_id";
                    break;
                case "locations":
                    $sql .= " ON webhost.location_id=locations.location_id";
                    break;
            }
        }
        
        if(!empty($data)) {
            $count = count($data);
            $sql .= " WHERE";
            foreach($data as $key => $value) {
                $sql .= " $key = '" . $this->db->escape($value) . "'";
                
                $count--;
                if($count > 0) $sql .= " AND";
            }
        }
        
        if(!empty($sort)) {
            $count = count($sort);
            $sql .= " ORDER BY";
            foreach($sort as $key => $value) {
                $sql .= " $key " . $value;
                
                $count--;
                if($count > 0) $sql .= ",";
            }
        }
        
        if(!empty($options)) {
            if ($options['start'] < 0) {
                $options['start'] = 0;
            }
            if ($options['limit'] < 1) {
                $options['limit'] = 20;
            }
            $sql .= " LIMIT " . (int)$options['start'] . "," . (int)$options['limit'];
        }
        $query = $this->db->query($sql);
        return $query->rows;
    }
    
    public function getWebhostById($webid, $joins = array()) {
        $sql = "SELECT * FROM `webhost`";
        foreach($joins as $join) {
            $sql .= " LEFT JOIN $join";
            switch($join) {
                case "users":
                    $sql .= " ON webhost.user_id=users.user_id";
                    break;
                case "web_tarifs":
                    $sql .= " ON webhost.tarif_id=web_tarifs.tarif_id";
                    break;
                case "locations":
                    $sql .= " ON webhost.location_id=locations.location_id";
                    break;
            }
        }
        $sql .=  " WHERE `web_id` = '" . (int)$webid . "' LIMIT 1";
        $query = $this->db->query($sql);
        return $query->row;
    }
    
    public function getTotalWebhost($data = array()) {
        $sql = "SELECT COUNT(*) AS count FROM `webhost`";
        if(!empty($data)) {
            $count = count($data);
            $sql .= " WHERE";
            foreach($data as $key => $value) {
                $sql .= " $key = '" . $this->db->escape($value) . "'";
                
                $count--;
                if($count > 0) $sql .= " AND";
            }
        }
        $query = $this->db->query($sql);
        return $query->row['count'];
    }
    
    public function extendWebhost($webid, $month, $fromCurrent) {
        $sql = "UPDATE `webhost` SET web_date_end = ";
        if($fromCurrent)
            $sql .= "NOW()";
        else
            $sql .= "web_date_end";
        $sql .= "+INTERVAL " . (int)$month . " MONTH WHERE web_id = '" . (int)$webid . "'";
        
        $this->db->query($sql);
    }
    
    public function execWebhostAction($webid, $action) {
        $this->load->library('ssh2');
        
        $ssh2Lib = new ssh2Library();
        
        $webhost = $this->getWebhostById($webid, array('users', 'locations'));
        $link = $ssh2Lib->connect($webhost['location_ip'], $webhost['location_user'], $webhost['location_password']);
        $output = $ssh2Lib->execute($link, "/home/cp/web.py $action $webhost[web_id] $webhost[password]");
        if(preg_match("/\[\[(.*)::(.*)?\]\]/", $output, $matches)) {
            $result['status'] = $matches[1];
            $result['description'] = $matches[2];
        } else {
            $result['status'] = "ERROR";
            $result['description'] = "Ќе известнаЯ ошибка.";
        }
        $ssh2Lib->disconnect($link);
        
        return $result;
        /*
        „лЯ тестированиЯ без сервероной части:
        return array('status' => 'OK', 'description' => '');
        */
    }
}
?>

Контролер заказа
Код
<?php
class orderController extends Controller {
    public function index() {
        $this->load->checkLicense();
        $this->document->setActiveSection('web');
        $this->document->setActiveItem('order');
        
        if(!$this->user->isLogged()) {
            $this->session->data['error'] = "Вы не авторизированы!";
            $this->response->redirect($this->config->url . 'account/login');
        }
        if($this->user->getAccessLevel() < 0) {
            $this->session->data['error'] = "У вас нет доступа к данному разделу!";
            $this->response->redirect($this->config->url);
        }
        
        $this->load->model('webhost');
        $this->load->model('locations');
        $locations = $this->locationsModel->getLocations(array('location_status' => 1));
        $this->data['locations'] = $locations;    
        $this->load->model('webhostTarifs');
        $tarifs = $this->webhostTarifsModel->getTarifs(array('tarif_status' => 1));
        $this->data['tarifs'] = $tarifs;
        $this->getChild(array('common/header', 'common/footer'));
        return $this->load->view('web/order', $this->data);
    }
    
    public function promo() {
        $this->load->checkLicense();
        if(!$this->user->isLogged()) {  
              $this->data['status'] = "error";
            $this->data['error'] = "Вы не авторизированы!";
            return json_encode($this->data);
        }
        if($this->user->getAccessLevel() < 1) {
              $this->data['status'] = "error";
            $this->data['error'] = "У вас нет доступа к данному разделу!";
            return json_encode($this->data);
        }
        
        $this->load->model('users');
        
        if($this->request->server['REQUEST_METHOD'] == 'POST') {
            $code = $this->request->post['code'];
            $skidka = $this->usersModel->getSkidkaByCode($code, false);$kofficent=(100-$skidka['skidka'])/100;
            if($skidka['skidka'] == NULL){
                $this->data['status'] = "error";
                $this->data['error'] = "Данного кода не существует";
            }else{
                $this->data['status'] = "success";
                $this->data['success'] = "Вы активировали скидку ".$skidka['skidka']."%";
                $this->data['skidka'] = $kofficent;
            }
        }

        return json_encode($this->data);
    }
    
    public function ajax() {
        $this->load->checkLicense();
        if(!$this->user->isLogged()) {  
              $this->data['status'] = "error";
            $this->data['error'] = "Вы не авторизированы!";
            return json_encode($this->data);
        }
        if($this->user->getAccessLevel() < 1) {
              $this->data['status'] = "error";
            $this->data['error'] = "У вас нет доступа к данному разделу!";
            return json_encode($this->data);
        }
        
        $this->load->model('users');
        $this->load->model('locations');
        $this->load->model('webhost');
        $this->load->model('webhostTarifs');
        if($this->request->server['REQUEST_METHOD'] == 'POST') {
            $errorPOST = $this->validatePOST();
            if(!$errorPOST) {
                $locationid = $this->request->post['locationid'];
                $tarifid = $this->request->post['tarifid'];
                $months = $this->request->post['months'];
                $domain = $this->request->post['domain'];
                $password = $this->request->post['password'];
                
                /*Остальная информация*/
                $userid = $this->user->getId();
                $balance = $this->user->getBalance();
                
                $tarif = $this->webhostTarifsModel->getTarifById($tarifid);    
                $code = $this->request->post['promo'];
                $skidka = $this->usersModel->getSkidkaByCode($code,true);$kofficent=(100-$skidka['skidka'])/100;                
                    $price = $tarif['tarif_price'];
                
                    switch($months) {
                        case "3":
                            $months = 3;
                            $price = $price * 0.95;
                            break;
                        case "6":
                            $months = 6;
                            $price = $price * 0.90;
                            break;
                        case "12":
                            $months = 12;
                            $price = $price * 0.85;
                            break;
                        default:
                            $months = 1;
                    }
                
                    $price = $price * $months;
                
                    if($skidka['skidka'] != NULL){
                        $price = $price * $kofficent;
                    }
                
                    if($balance >= $price) {
                        $webhostData = array(
                            'user_id'            => $userid,
                            'tarif_id'            => $tarifid,
                            'location_id'        => $locationid,
                            'web_domain'        => $domain,
                            'database'            => 0,
                            'password'            => $password,
                            'web_status'        => 1,
                            'web_months'        => $months,
                            'amx_bans'            => 0
                        );
                        $webid = $this->webhostModel->createWebhost($webhostData);
                        $this->webhostModel->execWebhostAction($webid, "webinstall");
                        $this->usersModel->downUserBalance($userid, $price);
                    
                        $this->data['status'] = "success";
                        $this->data['success'] = "Веб-хостинг №".$webid." успешно заказан.";
                        $this->data['id'] = $webid;
                    } else {
                        $this->data['status'] = "error";
                        $this->data['error'] = "На Вашем счету недостаточно средств!";
                    }
            } else {
                $this->data['status'] = "error";
                $this->data['error'] = $errorPOST;
            }
        }

        return json_encode($this->data);
    }
    
    private function validatePOST() {
        $this->load->checkLicense();
        $this->load->library('validate');
        
        $validateLib = new validateLibrary();
        
        $result = null;
        $locationid = @$this->request->post['locationid'];
        $tarifid = @$this->request->post['tarifid'];
        $domain = @$this->request->post['domain'];
        $months = @$this->request->post['months'];
        $password = @$this->request->post['password'];
        $password2 = @$this->request->post['password2'];
        
        if(!$validateLib->domain($domain)) {
            $result = "Не правильно введен домен!";
        }
        elseif($this->webhostModel->getTotalWebhost(array('web_domain' => $domain))) {
            $result = "На данный домен уже заказан Веб-Хостинг!";
        }
        elseif(!$this->locationsModel->getTotalLocations(array('location_id' => (int)$locationid, 'location_status' => 1))) {
            $result = "Вы указали несуществующую локацию!";
        }
        elseif(!$validateLib->password($password)) {
            $result = "Пароль должен содержать от 6 до 32 латинских букв, цифр и знаков <i>,.!?_-</i>!";
        }
        return $result;
    }
}
?>

Шаблон заказа
Код
<?php echo $header ?>
<div class="row">
    <div class="col-md-6">
        <div class="content-box">
            <h3 class="content-box-header bg-default">Заказать веб хостинг</h3>
            <div class="content-box-wrapper">
                <form class="form-horizontal" action="#" id="orderForm" method="POST">
                    <div class="form-group">
                        <label for="locationid" class="col-sm-3 control-label">Локация:</label>
                        <div class="col-sm-5">
                            <select class="form-control" id="locationid" name="locationid">
                                <?php foreach($locations as $item): ?>
                                <option value="<?php echo $item['location_id'] ?>"><?php echo $item['location_name'] ?></option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                    </div>
                                        <div class="form-group">
                        <label for="tarifid" class="col-sm-3 control-label">Тариф:</label>
                        <div class="col-sm-5">
                            <select class="form-control" id="tarifid" name="tarifid">
                                <?php foreach($tarifs as $item): ?>
                                <option value="<?php echo $item['tarif_id'] ?>"><?php echo $item['tarif_name'] ?></option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="domain" class="col-sm-3 control-label">Домен:</label>
                        <div class="col-sm-4">
                            <input type="domain" class="form-control" id="domain" name="domain" autocomplete="off" placeholder="Введите домен">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="months" class="col-sm-3 control-label">Период оплаты:</label>
                        <div class="col-sm-3">
                            <select class="form-control" id="months" name="months" onChange="updateForm()">
                                <option value="1">1 месяц</option>
                                <option value="3">3 месяца (-5%)</option>
                                <option value="6">6 месяцев (-10%)</option>
                                <option value="12">12 месяцев (-15%)</option>
                            </select>
                        </div>
                    </div>    
                    <div class="form-group">
                        <label for="password" class="col-sm-3 control-label">Пароль:</label>
                        <div class="col-sm-6">
                            <input type="password" class="form-control" id="password" name="password" placeholder="Введите пароль">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="password2" class="col-sm-3 control-label">Повторите пароль:</label>
                        <div class="col-sm-6">
                            <input type="password" class="form-control" id="password2" name="password2" placeholder="Повторите пароль">
                        </div>
                    </div>    
                                        <div class="form-group">
                        <label for="promo" class="col-sm-3 control-label">Промо Код:</label>
                        <div class="col-sm-4">
                            <input type="promo" class="form-control" onChange="promoCode()" id="promo" name="promo" placeholder="Введите промо Код">
                        </div>
                    </div>                                
                    <div class="form-group">
                        <label for="price" class="col-sm-3 control-label">Итого:</label>
                        <div class="col-sm-5">
                            <p class="lead" id="price">0.00 руб.</p>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-sm-offset-3 col-sm-9">
                         <button type="submit" class="btn btn-primary">Заказать</button>
                         <button type="button" class="btn btn-success" onClick="generatePass()">Сгенерировать пароль</button>
                        </div>
                    </div>
                </form>                                </p>
</div>
        </div>
    </div>
    <div class="col-md-6">
        <div class="content-box" data-sortable-id="ui-typography-5">
            <h3 class="content-box-header bg-default">Информация о заказе</h3>
            <div class="content-box-wrapper">
                <ul>
                    <li>Автоматический заказ и установка веб сервера.</li>
                    <li>Круглосуточная работа сервера.</li>
                    <li>Бесплатная техническая поддержка.</li>
                    <li>Возможность изменять тариф.</li>
                    <li>Удобное управление веб хостингом через нашу панель управления.</li>
                    <li>Минимальный пинг.</li>
                    <li>Полный FTP доступ для установки любых cms и веб скриптов.</li>
                    <li>Автоматический запуск сервера после падения или зависания.</li>
                    <li>Автоматическая установка AmxBans,SA:UCP,Psychostats.</li>
                    <li>Под каждый веб сайт выделенно (128мб RAM,1GB HDD-SSD,1 -MYSQL).</li>
                    <li>Бесплатная база данных MySQL.</li>
                </ul>
            </div>
        </div>
    </div>
</div>                        
                <script>

                    var tarifData = {
                    <?php foreach($tarifs as $item): ?>
                        <?php echo $item['tarif_id'] ?>: {
                            'price': <?php echo $item['tarif_price'] ?>
                        },
                    <?php endforeach; ?>
                    };
                    
                    $('#orderForm').ajaxForm({
                        url: '/web/order/ajax',
                        dataType: 'text',
                        success: function(data) {
                            console.log(data);
                            data = $.parseJSON(data);
                            switch(data.status) {
                                case 'error':
                                    toastr.error(data.error);
                                    $('button[type=submit]').prop('disabled', false);
                                    break;
                                case 'success':
                                    toastr.success(data.success);
                                    setTimeout("redirect('/web/control/index/" + data.id + "')", 1500);
                                    break;
                            }
                        },
                        beforeSubmit: function(arr, $form, options) {
                            $('button[type=submit]').prop('disabled', true);
                            $.jGrowl("Идёт настройка сервера", { sticky: !1, position: "top-right", theme: "bg-green" });
                            return false;
                        }
                    });
                    
                    $(document).ready(function() {
                        updateForm();
                    });
                    function promoCode(){
                        var promo = $("#promo").val();
                        $.post("/web/order/promo",{code: promo},function(data){
                            data = $.parseJSON(data);
                            switch(data.status) {
                                case 'error':
                                    $.jGrowl("Промо-кода не существует", { sticky: !1, position: "top-right", theme: "bg-red" });
                                    updateForm();
                                    break;
                                case 'success':
                                    $.jGrowl("Вам сделана скидка", { sticky: !1, position: "top-right", theme: "bg-green" });
                                    updateForm(data.skidka);
                                    break;
                            }
                        });
                        
                    }
                    
                    function updateForm(promo) {
                        var tarifID = $("#tarifid option:selected").val();
                        var price = tarifData[tarifID]['price'];
                        var months = $("#months option:selected").val();
                        switch(months) {
                            case "3":
                                price = 3 * price * 0.95;
                                break;
                            case "6":
                                price = 6 * price * 0.90;
                                break;
                            case "12":
                                price = 12 * price * 0.85;
                                break;
                        }
                        if(promo != null){price = price * promo;}
                        
                        $('#price').text(price.toFixed(2) + ' руб.');
                    }
                    function makeRand(max){
        return Math.floor(Math.random() * max);
    }
    function generatePass(){
        var length = 12;
        var result = '';
        var symbols = new Array(
                    'q','w','e','r','t','y','u','i','o','p',
                    'a','s','d','f','g','h','j','k','l',
                    'z','x','c','v','b','n','m',
                    'Q','W','E','R','T','Y','U','I','O','P',
                    'A','S','D','F','G','H','J','K','L',
                    'Z','X','C','V','B','N','M',
                    1,2,3,4,5,6,7,8,9,0
        );
        for (i = 0; i < length; i++){
            result += symbols[makeRand(symbols.length)];
        }
        document.getElementById('password').setAttribute('type', 'text');
        document.getElementById('password').value = result;
        document.getElementById('password2').setAttribute('type', 'text');
        document.getElementById('password2').value = result;
    }
                </script>

<?php echo $footer ?>


Отредактировал: suttles, - 14.11.2016, 17:03
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя suttles
сообщение 14.11.2016, 17:02
Сообщение #2


Стаж: 12 лет
Город: Москва

Сообщений: 297
Благодарностей: 30
Полезность: 97

Теперь ошибка такая
Код
SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: