Почему то не верно срабатывает функция продления сервера. Из выпадающего списка пользователь должен выбрать кол-во месяцев, на сколько он хочет продлить сервер. Однако сколько бы он не выбрал, все равно в базу записывается 1. Вот выбор на сколько продлить: Код (PHP): <select class="form-control" id="months" onChange="updatePrice()"> <option value="1">1 месяц</option> <option value="3">3 месяца (-5%)</option> <option value="6">6 месяцев (-10%)</option> <option value="12">12 месяцев (-15%)</option> </select> Через эту функцию должно записаться: Код (PHP): $this->serversModel->extendServer($serverid, $months, false); Сама функция: Код (PHP): public function extendServer($serverid, $month, $fromCurrent) { $sql = "UPDATE `servers` SET server_date_end = "; if($fromCurrent) $sql .= "NOW()"; else $sql .= "server_date_end"; $sql .= "+INTERVAL " . (int)$month . " MONTH WHERE server_id = '" . (int)$serverid . "'"; $this->db->query($sql); } А вот переменная $months, которая (по моему мнению) не передает POST данные в база, а передает только "1". Код (PHP): switch($months) { case "3": // Скидка 5% $months = 3; $price = $price * 0.95; break; case "6": // Скидка 10% $months = 6; $price = $price * 0.90; break; case "12": // Скидка 15% $months = 12; $price = $price * 0.85; break; default: $months = 1; } P.S: пытался в функции менять month на months, не помогает.
Тут выручит отладка: http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html Если что-то по ней не понятно, спрашивай, так как ты самостоятельно сможешь находить любые не стыковки.
Посмотрите, что за запрос в итоге формируется, подставьте в phpMyAdmin или другой клиент mysql, посмотрите, на что ругнётся. Ну или используйте аналогичные инструменты для другой БД
По моему просто не передаеются POST данные. Вот переменная $months Код (PHP): switch($months) { case "3": // Скидка 5% $months = 3; $price = $price * 0.95; break; case "6": // Скидка 10% $months = 6; $price = $price * 0.90; break; case "12": // Скидка 15% $months = 12; $price = $price * 0.85; break; default: $months = 1; } Как видите, "1" там не прописан и только 1 записывается, а остальные нет.
А, ну так это, читаем разницу между name и id в учебнике по html Добавлено спустя 3 минуты 17 секунд: http://htmlbook.ru/html/attr/id http://htmlbook.ru/html/select/name Правда ведь, не одно и тоже написано?
Зачем (int)$month? Если в switch она и так int, $months = 3? Добавлено спустя 1 минуту 44 секунды: Зачем вообще преобразовать $month в число если потом она в строку вставляется "+INTERVAL " . (int)$month . "??
Тут не может быть инъекции, так как переменная перебивается в switch, $months = 1; У тебя будет либо число которое ты передал (3, 6, 12) или 1.
ну ок, в таком виде да. автор ввел в заблуждение разместив листинг со свичем отдельно от топика. но если свича бы не было - защита от инъекции вполне годная.