PHP и формы. PHP и формы Input type radio получить значение php

  • 03.11.2019

Как правильно искать с помощью google.com

Все наверное умеют пользоваться такой поисковой системой, как гугл =) Но не все знают, что если грамотно составить поисковой запрос с помощью специальных конструкций, то можно достичь результатов того, что Вы ищете намного эффективнее и быстрее =) В этой статье я постараюсь показать что и как Вам нужно делать, чтобы искать правильно

Гугл поддерживает несколько расширенных операторов поиска, имеющими специальное значение при поиске на google.com. Типично, эти операторы изменяют поиск, или даже говорят гуглу делать полностью различные типы поиска. Например, конструкция link: является специальным оператором, и запрос link:www.google.com не даст вам нормального поиска, но вместо этого найдет все web-страницы, которые имеют связи к google.com.
альтернативные типы запросов

cache: Если Вы будете включать другие слова в запрос, то Гугл подсветит эти включенные слова в пределах кэшируемого документа.
Например, cache:www.сайт web покажет кэшируемое содержимое с подсвеченным словом "web".

link: рассматриваемый выше поисковой запрос покажет веб-страницы, на которых содержатся ссылки к указанному запросу.
Например: link:www.сайт отобразит все страницы на которых есть ссылка на http://www.сайт

related: Отобразит web-страницы, которые являются "подобными" (related) указанной web-странице.
Например, related: www.google.com перечислит web-страницы, которые являются подобными домашней странице Гугл.

info: Информация запроса: представит немного информации, которую Гугл имеет о запрашиваемой web-странице.
Например, info:сайт покажет информацию о нашем форуме =) (Армада - Форум адалт вебмастеров).

Другие информационные запросы

define: Запрос define: обеспечит определение слов, которые Вы вводите после того, как это, собранный из различных сетевых источников. Определение будет для всей введенной фразы (то есть, это будет включать все слова в точный запрос).

stocks: Если Вы начинаете запрос с stocks: Гугл обработает остальную часть сроков запроса как символы биржевых сводок, и свяжется со страницей, показывающую готовую информацию для этих символов.
Например, stocks: Intel yahoo покажет информацию о Intel и Yahoo. (Отметьте, что Вы должны напечатать символы последних новостей, не название компании)

Модификаторы Запросов

site: Если Вы включаете site: в ваш запрос, Гугл ограничит результаты теми вебсайтами, которые найдет в данном домене.
Также можно искать и по отдельным зонам, как таковое ru, org, com, etc ( site:com site:ru )

allintitle: Если Вы запускаете запрос с allintitle:, Гугл ограничит результаты со всеми словами запроса в заголовке.
Например, allintitle: google search вернет все страницы гугла по поиску как то images, Blog, etc

intitle: Если Вы включаете intitle: в вашем запросе, Гугл ограничит результаты документами, содержащими то слово в заголовке.
Например, intitle:Бизнес

allinurl: Если Вы запускаете запрос с allinurl: Гугл ограничит результаты, со всеми словами запроса в URL.
Например, allinurl: google search вернет документы с google и search в заголовке. Также как вариант можно разделять слова слэшем (/) тогда слова по обе стороны слэша будут искаться в пределах одной страницы: Пример allinurl: foo/bar

inurl: Если Вы включаете inurl: в вашем запросе, Гугл ограничит результаты документами, содержащими то слово в URL.
Например, Animation inurl:сайт

intext: ищет только в тексте страницы указанное слово, игнорируя заглавие и тексты ссылок, и прочее не относящееся к. Есть также и производная этого модификатора - allintext: т.е. далее все слова в запросе будут искаться только в тексте, что тоже бывает важно, игнорируя часто используемые слова в ссылках
Например, intext:форум

daterange: ищет во временных рамках (daterange:2452389-2452389), даты для времени указываются в Юлианском формате.

Ну и еще всякие интересные примеры запросов

Примеры составления запросов для Google. Для спамеров

Inurl:control.guest?a=sign

Site:books.dreambook.com “Homepage URL” “Sign my” inurl:sign

Site:www.freegb.net Homepage

Inurl:sign.asp “Character Count”

“Message:” inurl:sign.cfm “Sender:”

Inurl:register.php “User Registration” “Website”

Inurl:edu/guestbook “Sign the Guestbook”

Inurl:post “Post Comment” “URL”

Inurl:/archives/ “Comments:” “Remember info?”

“Script and Guestbook Created by:” “URL:” “Comments:”

Inurl:?action=add “phpBook” “URL”

Intitle:”Submit New Story”

Журналы

Inurl:www.livejournal.com/users/ mode=reply

Inurl greatestjournal.com/ mode=reply

Inurl:fastbb.ru/re.pl?

Inurl:fastbb.ru /re.pl? “Гостевая книга”

Блоги

Inurl:blogger.com/comment.g?”postID”"anonymous”

Inurl:typepad.com/ “Post a comment” “Remember personal info?”

Inurl:greatestjournal.com/community/ “Post comment” “addresses of anonymous posters”

“Post comment” “addresses of anonymous posters” -

Intitle:”Post comment”

Inurl:pirillo.com “Post comment”

Форумы

Inurl:gate.html?”name=Forums” “mode=reply”

Inurl:”forum/posting.php?mode=reply”

Inurl:”mes.php?”

Inurl:”members.html”

Inurl:forum/memberlist.php?”

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

msg_receive — Receive a message from a message queue

Description

msg_receive (resource $queue , int $desiredmsgtype , int &$msgtype , int $maxsize , mixed &$message [, bool $unserialize = TRUE [, int $flags = 0 [, int &$errorcode ]]]) : bool

msg_receive() will receive the first message from the specified queue of the type specified by desiredmsgtype .

Parameters

Message queue resource handle

Desiredmsgtype

If desiredmsgtype is 0, the message from the front of the queue is returned. If desiredmsgtype is greater than 0, then the first message of that type is returned. If desiredmsgtype is less than 0, the first message on the queue with a type less than or equal to the absolute value of desiredmsgtype will be read. If no messages match the criteria, your script will wait until a suitable message arrives on the queue. You can prevent the script from blocking by specifying MSG_IPC_NOWAIT in the flags parameter.

Msgtype

The type of the message that was received will be stored in this parameter.

Maxsize

The maximum size of message to be accepted is specified by the maxsize ; if the message in the queue is larger than this size the function will fail (unless you set flags as described below).

Message

The received message will be stored in message , unless there were errors receiving the message.

Unserialize

If set to TRUE , the message is treated as though it was serialized using the same mechanism as the session module. The message will be unserialized and then returned to your script. This allows you to easily receive arrays or complex object structures from other PHP scripts, or if you are using the WDDX serializer, from any WDDX compatible source.

If unserialize is FALSE , the message will be returned as a binary-safe string.

The optional flags allows you to pass flags to the low-level msgrcv system call. It defaults to 0, but you may specify one or more of the following values (by adding or ORing them together).

Flag values for msg_receive
MSG_IPC_NOWAIT If there are no messages of the desiredmsgtype , return immediately and do not wait. The function will fail and return an integer value corresponding to MSG_ENOMSG .
MSG_EXCEPT Using this flag in combination with a desiredmsgtype greater than 0 will cause the function to receive the first message that is not equal to desiredmsgtype .
MSG_NOERROR If the message is longer than maxsize , setting this flag will truncate the message to maxsize and will not signal an error.
errorcode

If the function fails, the optional errorcode will be set to the value of the system errno variable.

Return Values

Returns TRUE on success or FALSE on failure.

Upon successful completion the message queue data structure is updated as follows: msg_lrpid is set to the process-ID of the calling process, msg_qnum is decremented by 1 and msg_rtime is set to the current time.

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

msg_receive — Получение сообщения из очереди сообщений

Описание

Bool msg_receive (resource $queue , int $desiredmsgtype , int &$msgtype , int $maxsize , mixed &$message [, bool $unserialize = TRUE [, int $flags = 0 [, int &$errorcode ]]])

msg_receive() получает первое сообщение из задаваемой параметром queue очереди сообщений с типом, указанным в desiredmsgtype .

Список параметров

Desiredmsgtype

Если в desiredmsgtype указано 0, возвращается первое сообщение из очереди. Если desiredmsgtype больше 0, то возвращается первое сообщение с указанным типом. Если desiredmsgtype меньше 0, то возвращается первое сообщение с типом, меньшим или равным по модулю указанному в desiredmsgtype . Если нет сообщений, соответствующих критериям, ваш скрипт ожидает их появления в очереди. Вы можете изменить это поведение, указав MSG_IPC_NOWAIT в параметре flags .

Msgtype

В этом параметре сохраняется тип полученного сообщения.

Maxsize

Максимальный размер принимаемого сообщения задаётся в maxsize ; если сообщение в очереди больше этого размера, то функция завершается ошибкой (если вы не установите flags как описано ниже).

Message

Полученное сообщение сохраняется в message , если не было ошибок при получении.

Unserialize

Если установлено в TRUE , сообщение рассматривается как сериализованое с использованием того же механизма, что и в модуле сессий. Сообщение десериализуется, а затем возвращается в ваш скрипт. Это позволяет вам легко получать массивы и сложные объекты из других PHP-скриптов, или, если вы используете WDDX-сериализатор, из любых совместимых с WDDX источников.

Если в unserialize указано FALSE , сообщение возвращается в виде бинарно-безопасной строки.

Необязательный параметр flags позволяет вам передать флажки в низкоуровневый системный вызов msgrcv. По умолчанию его значение 0, однако вы можете указать одно или несколько следующих значений (складывая их или выполняя операцию бинарного ИЛИ).

errorcode

Если функция завершается аварийно, необязательный параметр errorcode будет содержать значение системной переменной errno.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

При успешном завершении, структура данных очереди сообшений обновляется следующим образом: msg_lrpid содержит идентификатор вызвавшего процесса, msg_qnum уменьшается на 1 и msg_rtime устанавливается соответственно текущему времени.

24.6K

Ни для кого не является секретом, что наиболее распространенным способом взаимодействия html-страницы с сайтом является форма. Форма (то есть, html-элемент образуемый тегом form) используется и бесплатными почтовыми службами, электронными магазинами и многими другими типами сайтов.

Обработка простых форм посредством PHP не представляет никакого труда. Однако время от времени возникает потребность обработать форму, содержащую несколько однотипных полей, притом, что их количество может изменяться в широком диапазоне и их количество заранее не известно. В PHP предусмотрено для таких случаев обработка однотипных полей как массива значений.


Рассмотрим подробнее варианты для разных типов полей.

Текстовые поля

Под текстовыми полями в этой статье понимаются элементы, создаваемые тегам input со значением параметра type равным text и тегом textarea . Организовать обработку формы состоящей из нескольких таких полей проще всего. На листинге ниже приведен листинг с html-разметкой для такой формы.






Как видно из листинга, имена для элементов формы, с точки зрения PHP , являются элементами массива. Поэтому PHP -сценарий, который будет обрабатывать эту форму, будет воспринимать все множество текстовых полей этой формы как единый массив. К отдельным элементам можно обращаться по индексам или использовать перечисление при помощи команд list и each , как это сделано в следующем примере.

n"; ?>

Переключатели

Переключателями (checkbox ) в этой статье называются элементы, создаваемые тегам input со значением параметра type равным checkbox . Форма для использования переменного количества «переключателей » строится абсолютно так же. Обратите внимание, что выбор конкретного значения переключателя (то есть значение свойства value) не важен. Пример приведен в листинге ниже:






Однако обработка такой формы отличается от обработки, описанной для текстовых полей. В данном случае необходимо определить, включил или нет посетитель сайта тот или иной переключатель. Если включил — то соответствующий элемент массива существует, если нет — то отсутствует. В следующем листинге приведен пример PHP сценария, который распечатывает включенные переключатели:

Радио-кнопки

Перед тем как описывать обработку радио-кнопок необходимо вспомнить, как они работают. Суть радио-кнопок (элементы созданные тегами input со значением параметра type равным radio ) заключается в том что, выбирая одну кнопку, пользователь автоматически снимает выделение с другой кнопки из этого же набора. Кнопки объединяются в набор очень просто: у всех кнопок в наборе одно и тоже имя.

А вот значения (то есть параметры value ) у кнопок в наборе — разные. И на сайт будет отправлено значение выбранной кнопки с именем набора. Так же как и в случае с текстовыми полями и переключателями имена наборов радио-кнопок должны оформляться как имена элементов массива в PHP. Пример такой формы приведен в следующем листинге:

// первый набор кнопок
// второй набор кнопок
// третий набор кнопок

Обработка радио-кнопок объединяет идеи, использование при обработке, как текстовых полей, так и переключателей. Если автор html-страницы не установил значение по умолчанию, а пользователь не выбрал определенную кнопку в наборе радио-кнопок, то данный элемент будет отсутствовать в массиве (как для переключателей).

Эксперименты с брелоком от машины и анализатором сигнала baudline были весьма увлекательны (более подробно об этом рассказано в предыдущей статье). Теперь мы попробуем сделать что-то более серьезное, когда выходной сигнал представляет собой большую ценность для нас, (сигнал от автомобильного брелока не представляет особой ценности, поскольку после расшифровки мы, по сути, получаем большое случайное число).

Эксперименты с брелоком от машины и анализатором сигнала baudline были весьма увлекательны (более подробно об этом рассказано в ). Теперь мы попробуем сделать что-то более серьезное, когда выходной сигнал представляет собой большую ценность для нас, (сигнал от автомобильного брелока не представляет особой ценности, поскольку после расшифровки мы, по сути, получаем большое случайное число).

В этом эксперименте подопытный передатчик работает на частоте 433 МГц на платформе Arduino, при помощи которой можно создавать интерактивные электронные объекты.

Рисунок 1: Экспериментальный передатчик

Нам известно, что сигнал передается на частоте 433 МГц, так что захват сигнала (при помощи HackRF) будем делать на частоте 435 МГц:

$ hackrf_transfer -r 435MHz-ASK-HACKRF-CW-8M.iq -f 435000000 -s 8000000

После загрузки результатов работы HackRF в анализатор сигнала Baudline (о том, как это сделать, рассказано в предыдущей статье) получим следующее:

Рисунок 2: Сигнал в анализаторе Baudline

Мы получили приемлемый сигнал и теперь загрузим эти данные в GNU Radio Companion (GRC).

GRC позволяет строить блок-схемы при помощи графического интерфейса. Затем эти блоки компилируются в python-код и могут использоваться независимо от GRC. Написанием кода при помощи блоков GNU Radio можно достичь того же самого, однако GRC содержит много полезных функций, и с ним проще работать новичкам, к которым я также себя причисляю. Однако у графической оболочки GRC есть и обратная сторона: иногда бывает трудно найти нужный блок. В этом случае попробуйте поискать его по имени.

Первым делом необходимо конвертировать файл логов HackRF в формат, который можно прочесть в GNU Radio. Логи HackRF - это данные, представляющие собой пары IQ, которые хранятся как 8-ми битные беззнаковые целые (подробнее с IQ или квадратурной дискретизацией можно ознакомиться ). Компонентам GNU Radio, как правило, необходимы комплексные IQ-данные, и, следовательно, мы должны преобразовать наш файл к этому формату (алгоритм показан на рисунке ниже):

Рисунок 3: Блок-схема алгоритма преобразования сигнала в формат для GNU Radio

Вначале блок схемы используется стандартный компонент «File Source» для загрузки файла. Затем блок «UChar to Float» конвертирует беззнаковые 8-ми битные целые числа в числа с плавающей точкой. В блоке «Deinterleave» происходит разделение общего потока данные (IQIQIQ) на два отдельных канала (I и Q), после чего они вновь объединяются, но уже в формате комплексного числа (для этого используется блок «Float to Complex»). Подобный формат как раз и используется в GNU Radio.

После прохождения через блок «Add Const» данные центрируются вокруг 0 (поскольку в HackRF используются беззнаковые целые в диапазоне от 0 до 256, данные центрируется около 127). (Я должен был сообщить об этом Майку Оссману – еще одно весьма веское основание для регистрации в HackRF на Kickstarter – если будет поставлена более амбициозная цель мы получим видео курсов по GNU Radio)

Самый последний блок «Throttle» используется для сжатия частоты выборки до 8 МГц, чтобы система, где используется этот сигнал, работала корректно. В целом я выяснил, что имеет смысл сжимать частоту выборки сигнала, поскольку в противном случае могут возникнуть случайные взаимодействия между частотой выборки и шириной спектра сигнала (в случае с IQ-данными частота выборки и ширина спектра сигнала взаимосвязаны).

На стадии сжатия используется переменная throttle_rate (самый верх блок схемы), которая позволяет задавать частоту для различных сигналов. Здесь нас поджидает один сюрприз: GRC не показывает числа в том формате, в котором они на самом деле используются! GRC допускает числа в обычном или научном формате (шестнадцатеричные, восьмеричные или любые другие, которые поддерживает Python), однако отображаются эти числа в удобочитаемом формате (в этом формате числа задавать нельзя). В нашем случае допустимые значения 8000000 или 8e6, однако, число 8М недопустимо.

Теперь у нас есть файл, загруженный в нужном формате. Что же дальше?

Первый шаг – более подробное изучение нашего сигнала. Мы можем сразу же после сжатия сигнала направить его в блок с быстрым преобразованием Фурье:

Рисунок 4: Параметры блока быстрого преобразования Фурье

На выходе преобразователя получаем такой сигнал:

Рисунок 5: Сигнал после преобразователя

На рисунке выше мы видим пик на частоте захвата (435 МГц) и часть передаваемого сигнала в районе частоты 433.8 МГц.

Теперь рассмотрим настройки преобразователя. По умолчанию GNU Radio ничего не знает о несущей частоте (если ее не задать, считается, что эта частота равна нулю). В этом случае сам сигнал был бы на частоте -1.2 МГц. Меня это, конечно же, не устраивает, и я буду выставлять реальные значения:

Рисунок 6: Параметры FFT-преобразователя

Параметры «Sample Rate» (частота выборки) и «Baseband Freq» (частота захвата) соответствуют переменным «samp_rate» и «capture_freq». Параметр «Sample Rate» должен совпадать с входным сигналом (в нашем случае это 8МГц; то значение, до которого мы сжимали выборку). В противном случае преобразователь будет работать некорректно.

В GRC мы используем соответствующие блоки с переменными:

Рисунок 7: Блоки с переменными

Поскольку мы знаем, где находится наш сигнал, захват производился на смещенной частоте в 435МГц для того, чтобы избежать пика на рабочей частоте. Кроме того, мы захватили намного больше данных, чем нам нужно (если сравнивать с шириной спектра). Для того чтобы решить обе эти проблемы одним махом, мы будем использовать блок "Frequency XLating FIR Filter" (КИХ-фильтр с переносом частоты).

Рисунок 8: Используем промежуточный КИХ-фильтр

Использование подобного фильтра позволяет одновременно решить три задачи:

  1. Сместить несущую частоту сигнала. Мы как бы «прокручиваем вниз» до желаемого участка сигнала.
  2. Использовать полосовой фильтр для удаления тех участков сигнала, которые нам не нужны. Далее, когда мы будем проводить измерения, мы будем измерять только наш сигнал без примесей радиошума.
  3. Разделить сигнал. Это позволит уменьшить ширину спектра и число выборок сигнала, что уменьшит вычислительные мощности для обработки. Поскольку уменьшается частота выборки, мы должны учесть это при настройке последующих блоков.

Рисунок 9: Параметры промежуточного КИХ-фильтра

Здесь мы для установки параметра децимации (или разделения) вновь используем переменные, поскольку этот способ намного удобнее. Для получения значения децимации нам необходимо разделить входное значение частоты дискретизации на выходное ее значение (в нашем случае выходное значение равно 50 кГц, относительно произвольное значение). 50 кГц – достаточно широко, чтобы охватить весь наш сигнал, и в дальнейшем у нас не возникнет никаких проблем, поскольку сигнал очень сильный. В реальной жизни нам, возможно, следует использовать намного меньшее значение. Мы должны преобразовать результат к целому числу для корректной работы GRC (для этого используем Python-функцию int).

К параметру «Taps» привязываем переменную firdes_tap (подробнее об этом чуть позже). Этот параметр позволяет изолировать наш сигнал.

И, наконец, параметром «Center Frequency» мы задаем смещение несущей частоты (опять же с использованием переменных). Нам необходимо сместить наш сигнал вниз, следовательно, смещение примерно равно 1.2 МГц (или 435 МГц – 433 МГц). Поскольку смещение происходит вниз, значение должно быть отрицательным.

Я использую GNU Radio 3.6. Однако самая последняя версия – 3.7, в которой произошли некоторые изменения. В частности, параметр «Center Frequency» рассматривается как «фактическая» несущая частота. Если вы используете GNU Radio 3.7, удалите отрицательный знак. С этими и другими изменениями в новой версии можно ознакомиться .

[Обновление от 9 февраля 2013 года – После обновления GNU Radio, мне не понятно, в чем заключаются изменения, поскольку отрицательное смещение работает прекрасно, а положительное – нет.]

Рисунок 10: Значения переменной firdes_tap

Переменная firdes_tap определяет наш низкочастотный фильтр. Ключевые параметры здесь следующие:

  1. Коэффициент усиления = 1 - мы не усиливаем сигнал.
  2. Частота выборки (samp_rate) – соответствует частоте выборки входного сигнала (в нашем случае 8МГц).
  3. Частота среза = 2000 – мы определяем частоту среза в 2 КГц.
  4. Частота переходной полосы фильтра = 20000 – устанавливает переходную полосу фильтра, которая должна быть примерно в два раза меньше, чем частота выборки (в нашем случае конечная частота выборки равна 50 кГц, следовательно, переходная частота около 20 кГц).

Параметры WIN_HAMMING и 6.76 указывают GNU Radio на то, что нужно использовать оконный фильтр. На эти параметры можно не обращать внимание.

После прохождения сигнала через фильтр, децимацию и повторное центрирование, мы вновь пропускаем сигнал через преобразователь Фурье. На выходе получается следующее:

Рисунок 11: Сигнал, пропущенный через фильтр и преобразователь

Обратите внимание, что у сигнала уменьшилась ширина спектра, а также произошло сглаживание вне рассматриваемой нами области.

Выставляя различные значения у низкочастотного фильтра, можно получить разные результаты (более подробно о настройке низкочастотного фильтра можно прочитать ).

Не забудьте настроить преобразователь Фурье:

Рисунок 12: Настройки преобразователя

Особенно следует обратить внимание на изменение частоты выборки нашего сигнала (до 50 кГц) и несущей частоты. Таким образом, мы установили в параметры «Sample Rate» и «Baseband Freq» соответствующие переменные.

Теперь у нас есть отфильтрованный, отцентрированный, узкополосный амплитудно-модулированный сигнал. Что же мы можем с этим сделать?

При амплитудной модуляции происходит изменение амплитуды, и мы можем обнаружить подобный сигнал путем измерения этого параметра:

Рисунок 13: Схема измерения сигнала

Блок «Complex to Mag» приводит комплексный IQ-сигнал к абсолютной величине. Поскольку наш сигнал очень сильный и к тому же пропущен через фильтр, мы может прибегнуть к вычислению амплитуды. Если бы сигнал был нефильтрованный и присутствовал бы шум, мы не смогли бы прибегнуть к использованию столь простого метода.

Обратите внимание на цвет выходного вывода «Out» у блока «Complex to Mag» (оранжевый вместо синего). Это означает, что выходной сигнал представляет собой значение с плавающей точкой и, следовательно, входные блоки должны принимать сигнал именно такого типа.

Рисунок 14: Установка типа принимаемого сигнала

Мы можем установить тип сигнала в выпадающем меню параметра «Type».

Теперь при запуске GRC выходной сигнал представляет собой вычисленную магнитуду. Если мы прокрутим при помощи колеса мыши временной диапазон, то увидим такую картину:

Рисунок 15: Графическое изображение вычисленной магнитуды сигнала

Сигнал на рисунке выше выглядит замечательно, как и сигнал, полученный при просмотре в анализаторе Baudline. В последнем случае мы прибегли к изолированию и выделению полезного сигнала и конвертированию его в последовательность вычисленных магнитуд.

Рисунок 16: Сравнение двух сигналов

Вы можете загрузить файл с выборкой данных отсюда , а GRC-файл – отсюда .

В следующей статье мы попробуем преобразовать сигнал из GRC обратно к первоначальной выборке.

Спасибо Майку Оссману, всем с канала #hackrf на Freenode и вообще всем, кто помогал в написании этой статьи и высказывал свои замечания.