
Стаж: 12 лет
Город: Москва
Сообщений: 297
Благодарностей: 30
Полезность: 97
|
Написал заказ веб хостинга, а команда на сервер и в базу данных не отправляет хотя ajax выводит что (Хостинг настраиваеться) Через консоль отправляю эту команду всё устанавливаеться, а через сайт он не хочет.До этого он в базу отправлял пустой параметр только были правильные id пользователя. Я думаю что в ajax проблемы. В чём может быть проблема Код <?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
|