Если и можно определить что страница отображается в iframe, то это должен делать код, который работает в браузере. Я не знаю возможно ли это с точки зрения JS API, но предполагаю, что можно изнутри iframe с помощью js взять внешний документ, а точнее даже окно, и получить его адресную строку. Ну а там уже смотреть на домен - хороший он или плохой.
Это не столько решение проблемы, сколько совет как надо делать, потому что как вы делаете - так не надо.
Мало того, что вы засовываете в запрос данные из http запроса никак их не проверяя, так вы ещё и делаете это неправильно. По хорошему, получение элемента массива в строке с двойными кавычками надо делать в фигурных скобках. Это раз. Два - это то что ключ массива надо указывать в кавычках.
Сергей Дефактов: Это тот самый код который у вас на сервере, или вы его отредактировали чтобы мне показать? Если точный, то вам необходимо хорошенько почитать маны по sql и по mysqli.
Вы разве не видите что $query_result является результатом выполнения запроса "select ..." , который я просто не стал писать полностью и заменил большую его часть на многоточие?
А выше, ваш запрос выполняется в переменную $query_one.
Кроме того - ваш запрос имеет структуру "select count(id) from ... where ..."
Вы хотите получить количество строк, удовлетворяющих некоторому условию. Результат такого запроса - одна строка с одним полем.
Скорее всего у вас не настроен вывод ошибок в php.ini и поэтому вы не видите конкретное сообщение об ошибке. В таком случае код 500 может отдаваться по любой причине, будь то забытая точка с запятой, или отсутствие некоторой функции.
Если ни отлаживать, ни включить вывод ошибок нет возможности, то используйте метод пристального взгляда, желательно в той области кода, где были совершены последние изменения.
> И еще, у меня есть два разных типа сотрудника, отличающиеся способом оплаты . Создается два отдельных класса, каждый работает с БД.
А если у сотрудников будет различие не только в способе оплаты? Тогда понадобится уже 4 класса. Не ООПшно получается. Да и код будет дублироваться.
Можно иметь один класс работника, и 2 класса "стратегии вычисления оплаты" + фабрику для этих стратегий.
В методе вычисления оплаты можно дёргать фабрику, чтобы она отдала нам стратегию. И далее уже у полученной стратегии вызываем вычисление способ оплаты.
При увеличении вариаций различных методов, всё делается по такой же схеме - выделяем реализацию методов в отдельные классы, а в сам метод помещаем вызов фабрики.
Таким образом каждая реализация будет написана один раз, и мы избавляемся от необходимости решать какой класс сотрудника нам нужен.
Нет. Это такое в протоколе http. Если раньше этот код работал, а сейчас вдруг начал показывать варнинги, то просто сервер был настроен так чтобы эти самые варнинги не показывать.
Сергей Протько: Стоит отметить, что условно есть два вида MVC. Один - аутентичный MVC, который используется для организации пользовательских интерфейсов. Там контроллер (или то что его заменяет в MV*) реагирует на множество событий, инициируемых пользователем за время работы программы.
Второй - так называемый серверный MVC. Который на самом деле Action Domain Responder, Здесь Action - это диспетчер, который на основании данных одного события - http запроса, выбирает некоторый экшен, который дёргает модель (Domain) и передаёт данные в шаблон (Responder).
Да. В обоих случаях MVC это не паттерн. Это совокупность паттернов, общее название которой удобно использовать чтобы поверхностно описать архитектуру приложения.
Алексей Скобкин: Конечно, по хорошему так и надо делать, дабы в дальнейшем было проще рефакторить. Однако это не значит что на каждый чих стоит писать класс. DTO скорее нужен в местах соприкосновения с внешним кодом, а внутри механизма можно и массивами обойтись.
Вы, видимо дважды неправильно выразились и на самом деле хотите чтобы сервер на и каждой итерации цикла отдавал данные на клиент, а тот в свою очередь их выводил. Эхх.. если бы это было так просто... но нет. Вариант с циклом будет работать только с websocket соединением. Во всех других случаях только клиент может инициировать получение данных с сервера.
Форма отправляет только ту информацию, которая является значением элементов управления - input, select, textarea, button.
Никакой дополнительной информации не отправляется.
Таким образом, если вы хотите передать текст из label, вам придётся сделать соответствующий элемент управления.
Разумеется, вы можете структурировать отправку данных, объединяя значения в массивы. Например: <label>Banana</label> <input name="something[value]" value="ololol"> <input name="something[label]" value="Banana" type="hidden">
Тогда будет вот так
$_POST["something"] == ["value"=>"ololol", "label"=>"Banana"]
Ну логично, что строка не попадает под шаблон, ведь шаблон написан для случая /string/param/param
Если хотите другое количество string или param, то нужен ещё один шаблон, в вашем случае /emergency/:module/:app/:action
Шаблоны принято объявлять в определённом порядке - сначала "узкие" случаи, а потом "широкие", и применять в цикле к строке и считать истинным первый правильно отработавший.
Так, например сначала мы проверяем строку "узким" шаблоном /string/string/param
и только если он не отработал, проверяем более "широким" - /string/param/param
Это получается что один стул может быть в нескольких парикмахерских?
Если да, то в ticket надо указывать в какой парикмахерской стул будет занят.
Если нет - что логично, то связь многие-ко-многим не нужна. Достаточно будет хранить в стуле id парикмахерской.
Ну тогда не могу придумать ничего кроме как делать редирект, если $_GET не содержит нужный параметр. Подругому, из PHP на адресную строку браузера не повлиять.
Чтобы добавить репозиторий в sources.list, необходимо в Dockerfile написать
RUN echo "репозиторий" >> /etc/apt/sources.list
А так же при установке пакета указать версию
apt-get install название=версия
Поиск репозитория с пакетом это самое сложное. Я этого так и не осилил и сменил дистибутив)
PhP_Raz: Тогда этот код допускает создание мусора в базе, т.к. если возникнет непредвиденная ошибка при удалении связей, то потом концов уже не найти, т.к. категория уже удалена. В случаях, когда нет внешнего ключа, а точнее нет каскадного удаления, делается так: сначала удаляются дочерние записи, и если оно прошло успешно - то потом родительская. Тогда, в случае ошибки при удалении связей категория остаётся, и её можно снова попытаться удалить.