рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Получение результатов запроса

Получение результатов запроса - раздел Программирование, Инструментальная среда PHPMYADMIN. Создание баз и таблиц данных Разнообразие Функций Дает Возможность Получить Результат Различными Способами...

Разнообразие функций дает возможность получить результат различными способами. Идентификатор результата — это ключ доступа к строкам, возвращенным запросом, которых может быть нуль, одна и более.

 

В нашем примере использовались две функции:

mysql_num_rows()

 

 

и mysql_fetch_array().

 

Функция mysql_numrows() сообщает количество строк, которые возвращает запрос. В нее следует передать идентификатор результата.

 

Это полезно знать, если планируется обрабатывать или отображать результаты. Зная их количество, можно организовать цикл:

 

for ($i=0; $i <$num_results; $i++num ){

// обработка результатов

}

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

 

$row = mysql_fetch_array($result);

 

Имея $row в ассоциативном массиве, можно пройти каждое поле и должным образом его отобразить:

 

 

Задание 2. Проверка и фильтрация данных, исходящих от пользователя. Использование объектно-ориентированного синтаксиса PHP

 

Представленный на рис. 3.268 обработчик ввода в форму на рис. 3.266, обладает рядом недостатков, которые проявляются в процессе эксплуатации системы. Преобразуем форму на рис. 3.266 к виду показанному на рис. 3.272 (http://localhost/php/lab15_02.php).

 

Рис. 3.272. Модифицированная форма ввода информации.

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

Код HTML формы для рис. 3.272, отличается от кода формы представленного на рис. 3.267 строкой объявления добавления кнопки (рис. 3.273):

 

Листинг кода формы для рис. 3.272:

Рис. 3.273. Код HTML создания формы. Файл Lab15_02.php.

 

Обработчик приведенной формы представлен в файле Lab15_03.php, содержимое которого показано на рис. 3.274.

 

Листинг обработчика HTML формы (файл Lab15_03.php).

 

Рис. 3.274. Код обработчика формы. Файл Lab15_03.php.

Если пользователь нажмет кнопку , то сработает условие в строке 16 и будет сформирован запрос к базе в виде следующей строковой переменной (строка 18, рис. 3.274):

На основании этого запроса будет сформирован ответ, показанный на рис. 3.275.

Рис. 3.275. Результат запроса на показ всех книг.

 

Если пользователь нажмет кнопку (рис. 3.272(a)), и не заполнит поле для ввода информации:

, то сработает условие в строках 19, 20 обработчика формы (рис. 3.274):

и будет сформировано следующее сообщение для пользователя (строка 21-24, рис. 3.274):

Рис. 3.276. Результат запроса без указания аргумента поиска.

В операторе вывода сообщения на экран (для закрепления материала по использованию тегов в PHP) использован тег установки цвета (font color=”red”), перевода строки (br) и тег вывода жирного шрифта (strong).

 

Ниже приведен пример заполненной формы и результат работы обработчика формы.

Рис. 3.277. Результат запроса c указанием аргумента поиска.

 

Для того чтобы обработчик корректно обрабатывал вводимые значения пользователя, в теле обработчика использован ряд стандартных функций и приемов PHP.

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

 

Напомним, что для доступа к переменным можно использовать также глобальный массив с именем $_REQUEST.

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

 

 

Следующий этап — убедиться, что пользователь указал критерий и тип поиска. Заметьте, это проверяется лишь тогда, когда критерий поиска не содержит лишние пробелы. Если поменять эти этапы местами, может возникнуть ситуация, когда критерий вроде и введен, сообщения об ошибке быть не должно, однако критерий содержит только пробелы, которые полностью удаляются функцией trim().

В этом случае выдается сообщение о том, что критерий поиска не введен (рис. 3.276). Мы проверили переменную $search (имя поля по которому ведется поиск) даже в том случае, когда она поступает из оператора SELECT. Вас может заинтересовать, зачем проверять входные данные. Не забывайте, что база данных может иметь не один интерфейс. Например, фирма по продаже книг может располагать большим количеством филиалов, которые используют свои поисковые интерфейсы. Вследствие того, что пользователи могут заходить с разных рабочих станций, возникает и потенциальная угроза безопасности.

 

В случае задействования данных, которые вводят другие пользователи, необходимо тщательно фильтровать вводимые данные от управляющих символов. Для этого используются стандартные функции addslashes() и stripslashes(). Если записывать данные, введенные пользователем, в базу данных типа MySQL, следует вызывать addslashes(), а при возврате пользователю выходных данных — stripslashes().

 

В нашем случае к критерию поиска применяется функция addslashes():

 

К данным, исходящим из базы, применяется stripslashes(). Введенные данные не содержат косых линий, равно как и управляющих символов. То есть вызов stripslashes() не поможет. При построении Web-интерфейса для базы данных велики шансы того, что потребуется вносить данные о новых книгах, а детали, внесенные пользователем, могут содержать специальные символы. Сохраняя их в базе данных, мы обращаемся к addslashes(), а это означает, что при извлечении данных необходимо будет вызывать stripslashes().

 

Функцию htmlspecialchars() применяют для кодировки символов, которые имеют специальное значение в HTML. В наших тестовых данных нет амперсандов (&), знаков "меньше" (<), "больше" (>), двойных кавычек ("), однако в названиях многих книг может повстречаться амперсанд. Использование этой функции застраховывает от грядущих ошибок.

 

Как уже упоминалось, stripslashes() вызывают для того, чтобы "подчистить" значение, прежде чем отображать его пользователю, иначе косые черты будут видны на экране.

 

В нашем примере в обработчике (Lab15_03.php, рис. 3.274) использована функция get_magic_quotes_gpc (), которая указывает, выполняется ли автоматическое взятие в кавычки. Буквы “gpc” в имени функции (директивы) означают GET, POST и COOKIE. Это означает, что все переменные, поступающие из упомянутых источников, автоматически помещаются в кавычки.

 

Установка соединения в объектно–ориентированном PHP

В данном задании применяется синтаксис объектно-ориентированного PHP, в отличие от процедурного, использованного во всех предыдущих заданиях.

Если пользователь нажмет кнопку (рис. 3.272(a)), и заполнит поле для ввода информации, то будет сформирована строка запроса $query:

 

Сконструированное значение переменной $query, далее используется для получения результата (строка 45, рис. 3.274 или строка 45 в файле Lab15_03.php), сформированного операцией (методом) экземпляра объекта класса , который создается строкой 37 рассматриваемого сценария.

 

В приведенной строке создается экземпляр объекта класса и предпринимается попытка соединения с хостом с использованием имени пользователя и пароля . Соединение будет использовать базу данных . В нашем случае имя базы BOOKS.

В PHP5 появилась новая библиотека для подключения к MySQL, называемая mysqli (“i” означает “improved” - улучшенная). Данная библиотека позволяет использовать как объектно-ориентированный, так и процедурный синтаксис.

Если использовать процедурный синтаксис PHP5, то подключение к MySQL должно быть записано в виде следующей строки:

@ $db =mysqli_connect ($Host, $User, $Password, $DBName);

В отличие от результата функции (приведенной в строке 37), функция mysqli_connect () возвращает ресурс, а не объект.

Этот ресурс при использовании процедурного интерфейса должен передаваться во все использованные функции mysqli (данный подход напоминает работу с файловыми функциями наподобие Fopen()).

Обратите внимание, что строка, в которой выполняется попытка подключения к базе данных, начинается с операции подавления выдачи ошибок @.

Как и в процедурном подходе, так и в объектно-ориентированном интерфейсе результат попытки подключения к базе данных должен быть проверен (0 – если результат соединения успешен, иначе номер ошибки).

Следующая строка сценария (рис. 3.274) возвращает результат построенного запроса:

 

Если Вы предпочитаете процедурный интерфейс, то запрос следует записать в виде:

$result = mysqli_query ($db, $query);

В любом случае возвращаемое значение сохраняется в переменной $result для дальнейшего использования.

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

При процедурном подходе для получения количества возвращаемых строк используется функция mysqli_num_rows($result), которой необходимо передать идентификатор результата:

$num_res = mysqli_num_rows($result);

В задании 1 данной темы, аналогичный результат получен функцией: mysql_num_rows($result) (рис. 3.268).

 

Зная значение $num_res, можно отобразить результаты запроса используя цикл (строки 49-61).

В каждой итерации этого цикла происходит вызов метода класса

$row=$result->fetch_assoc() (строка 51). Именно этот метод извлекает из результирующего набора запись и преобразует ее в ассоциативный массив, в котором каждый ключ является именем атрибута, а каждое значение – элементом ячейки массива

Естественно, если использовать процедурный подход в строке с номером 51, должна быть указана функция:

$row = mysqli_fetch_assoc($result);

Используя массив $row можно пройти по всем полям и должным образом отобразить каждое из них (строки 52-59).

 

Кроме рассмотренных вариантов получения результата из идентификатора запроса можно вместо ассоциативного массива воспользоваться нумерованным массивом, применив при процедурном подходе функцию mysqli_fetch_row():

 

$row = mysqli_fetch_row($result);

 

При объектном подходе используется метод

$row = $result -> fetch_row ();

 

Значения атрибутов будут храниться в каждом порядковом значении $row[0], $row[l] и т.д.

 

С помощью функции mysqli_fetch_object() можно выбрать строку внутрь объекта и получать доступ к атрибутам как к свойствам объекта $row-> title, $row-> author и так далее.

 

$row = mysqli_fetch_object($result);

 

При объектном подходе используется метод:

$row = $result -> fetch_object ();

 

После этого к каждому атрибуту можно получить доступ через $row->title, $row->author и так далее.

 

Каждый из этих вариантов подразумевает выборку строки за раз. Другой вариант — получить доступ, используя mysql_result(). Для этого потребуется указать номер строки (от 0 до количества строк минус 1) и название поля, например:

 

$row = mysqli_result($result, $i, "title");

 

Название поля можно задать в виде строки (либо в форме "title" либо в форме "books.title") или номером (как в mysqli_fetch_row()). He стоит смешивать mysqli_result() с другими функциями выборки.

Строчно-ориентированные функции выборки намного более эффективны, нежели mysqli_result(), так что лучше использовать одну из них.

 

– Конец работы –

Эта тема принадлежит разделу:

Инструментальная среда PHPMYADMIN. Создание баз и таблиц данных

Предисловие... По дисциплине предусмотрено выполнение лабораторного практикума Тематика... Студентам разрешается использовать любую современную СУБД поддерживающую принципы реляционного описания данных и язык...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Получение результатов запроса

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Производительность
Результаты тестов Вы сможете найти по адресу http://www.mysql.com/information/benchmarks.html Вставка 350768 строк Секунды my

Описание установки
Для того чтобы временно (для отладки) использовать свою машину как удаленный сервер, необходимо на машине установить Web-сервер Apache. Для установки программного обеспечения обеспечивающего взаимо

Порядок выполнения работы
Чтобы не было проблем при инсталляции, выполните с командной строки программу Ping Рис. 1.1. Использование командной стро

Указания к выполнению работы
При выполнении тестов необходимо изучить структуру пакета и порядок взаимодействия его блоков, уяснить отличия использования пакета от реального его использования в сетевом окружении и причины этих

Основные сведения
Указав в Internet Explorer адрес (рис. 2.1), мы попадаем в оболочку (рис. 2.2) (адрес зависит от версии Denwer), в которой в поле ввода необходимо указать имя создаваемой базы. Пусть для примера мы

Incorrect table definition; There can only be one auto column and it mast be defined as a key
  Если Вы правильно укажите характеристики для создаваемой таблицы, и нажмете кнопку “Сохранить” (рис. 2.5), то получите следующее окно (рис. 2.9). Кнопки типа “Структура”, “

Программа работы
Приступим к заполнению информацией созданной таблицы. Напомним, что первая строка с именем id (рис. 2.11) заполняется автоматически, так как ранее для нее указано ограниче

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

Программа работы
Прежде чем тестировать связь с созданной Вами базой данных, выполните следующие действия: Шаг 1. Создайте копию из файла index.php в этой же папке с именем index0.php.

Проверка моего домена с именем Moy.loc
  Шаг 4. Находясь на выделенном файле в Total Commander нажмите клавишу F4 (Редактировать) и Вы должны увидеть полный текст программы, показанный на шаге 2.   Т

Указания к выполнению работы
Если Вы не получили окно показанное на рис. 2.31, а получили что-то подобное, как показано например, на рис. 2.32, то Вы скорее всего скопировали в файл index.php информацию из рис. 2.30, что не ре

Ваш возраст
<input type=radio name="r1" value="on1" checked>До 20 <input type=radio name="r2" value="on2" >20-30

Тема №3. Создание формы и РНР-сценария в одном файле
Цель работы:Получение навыков и понимание взаимосвязанной работы формы и ее обработки. Обработка форм Все данные, которые Вы хотите получить из HTML-формы

SUP надстрочный текст.
--> <!--<fieldset style="width: 50%" align="right">--> <fieldset style="width: 50%" >&

Тема №4. Использование чисел. Управляющие структуры
Цель работы:работа с численными данными в форме.   Задание 1. Разработать приложение с формой для простого калькулятора (см. рис. 3.24).

Тема №5. Использование управляющей структуры switch
Цель работы:Обучение применению структуры switch. Задание 1. Разработать приложение с использованием конструкции SWITCH-CASE, в котором создается форма для простого кальку

Тема №7. Работа с массивами
Цель работы:Обучение использованию массивов в сценариях PHP. Массив представляет собой набор переменных, объединенных одним именем. Каждое значение массива идентифицируетс

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

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

Тело функции
} Рис. 3.97. Синтаксис функций .   Имя функции должно подчиняться условиям, приведенным для идентификаторов. После имени функции следуют обязательны

Тема №9. Использование файлов для хранения данных в сценариях РНР
Цель работы:Обучение работе с файлами для хранения данных при обработке сценариев.   Задание 1. Разработка интерфейса для загрузки файла. Lab9_0.php.

Создание сценария загрузки.
  Перед началом создания сценария запомните список переменных, которые создаются автоматически после успешной загрузки файла. Основная часть имени переменных - myfile - является имене

Загрузкa файла с помощью формы и сценария
  Теперь, когда вы создали форму и сценарий для загрузки файла, проверим, как все это работает.   Запустите свой Web-браузер, в поле ввода Адрес введите

Тема № 10. Работа с каталогами в сценариях РНР
Цель работы:Получение практических навыков по работе с деревом каталогов.   Задание 1. Создать каталог и добавить в него файл. Пуст

Тема №11. Создание панели управления файлами
Цель работы:Получение практических навыков по обработке файлов в сценариях. Задание 1. Разработать форму и сопутствующее ей приложение для панели управления

Rem Cmysql.bat Input in MySQL Запуск с любого диска
c:\Webservers\usr\local\mysql5\bin\mysql --user=root --character-sets-dir="c:\Webservers\usr\local\mysql5\share\charsets" Рис. 3.162. Командный файл Cmysql.bat д

City char(30) not null)
Рис. 3.167. Состав таблицы Customers.   Создание таблицы производится с помощью SQL-команды CREATE TABLE,которая указывается в строке монитора.

Rem Hmysql.bat Запуск с любого места диска
c:\Webservers\usr\local\mysql5\bin\mysql -h localhost -u root -D books -p --character-sets-dir="c:\Webservers\usr\local\mysql5\share\charsets" < lab13_00.sql

SET NAMES cp866;
select * from customers; select * from orders; select * from books; select * from order_items;

SELECT name, city FROM customers ;
  запрашивает данные столбцов name (имя) и city (город) таблицы Customers: Если воспользоваться монитором MySQL (вызов через пакетный файл CmySql.bat - рис. 3.188), то ввод н

Простое соединение двух таблиц
Начнем с поиска Ян Дрибас, которого мы уже упоминали: Рис. 3.236. Результат запроса с использованием соединения таблиц.

Соединение трех и более таблиц
Объединение более двух таблиц не сложнее объединения двух. Главное правило таково — таблицы нужно объединять попарно, учитывая условия объединения. Это можно представить в виде отношений данных меж

From customers, orders, order_items, books
where customers.customerid = orders.customerid and orders.orderid = order_items.orderid and order_items.isbn = books.isbn

From customers left join orders
on customers.customerid = orders.customerid; Рис. 3.239. Запрос с левосторонним соединением.   Данный запрос SQL использует объединение по остатку д

Where orders.orderid is null;
Рис. 3.243. Запрос левостороннего соединения таблиц Customers и Orders с использованием using. И вот результат:

Резюме по типам соединениий
Мы рассмотрели только самые основные, хотя существуют еще несколько соединений, представленных в таблице на рис. 3.250.   Название Опис

Group by customerid;
  При использовании конструкции GROUP BY с функцией агрегирования это фактически меняет поведение функции. Вместо того чтобы выдавать среднюю величину заказов в таблице, такой запрос

Update customers
set address = 'ул. Победы д.7, кв.7' where customerid = 4; Так, например, состояние таблицы показанное на рис. 3.248 будет приведено к виду предс

Тема № 14. PHP и MySQL. Доступ к базе данных MySQL из Web с помощью РНР
Цель работы:Получение практических навыков по связке MySQL и PHP. В заданиях данной темы используется база данных BOOKS, схема которой представлена на рис. 3.171, создание

Установка соединения
Для подключения к серверу MySQL в сценарии (рис. 3.268) присутствует такая строка: @ $db = mysql_pconnect($Host, $User, $Password);   Потребуется указать имя узла (H

Выполнение запроса к базе данных
Чтобы осуществить запрос, можно воспользоваться функцией mysql_query(). Однако прежде запрос необходимо настроить:  

Отсоединение от базы данных
Для закрытия (уничтожения) результирующего набора применяется метод: При процедурном подходе используется функция:

Настройка сервера
Вы считаете что все сделали правильно, но у Вас что-то не работает. Может, у Вас неправильно сконфигурирован сервер?   Если Вы "все сделали правильно", но Ваш код н

Коротко о правах на файлы
Проблемы с правами на сервере (upload_tmp_dir) В *nix-подобных операционных системах каждой папке, файлу, ссылке выставлены соответствие права доступа. Они могут выглядеть как rwx-rw-r- ил

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги