Опубликован: 08.05.2007 | Доступ: свободный | Студентов: 12881 / 3013 | Оценка: 4.13 / 3.77 | Длительность: 12:58:00
Лекция 9:

Доступ к базам данных

< Лекция 8 || Лекция 9: 123 || Лекция 10 >

Выбор записей

Кроме использования функций ODBC с оператором SQL INSERT для добавления записей в базу данных, можно также извлекать записи из таблицы базы данных с помощью оператора SQL SELECT. Типичная форма ввода для выбора существующих записей из таблицы Directory показана ниже. В этом примере фиктивная компания Company XYZ, имеет онлайновую форму, которая позволяет пользователям ввести фамилию сотрудника и найти имя и фамилию сотрудника, номер телефона и адрес e-mail.


Оператор SQL SELECT показан ниже:

SELECT * | [DISTINCT] field1 [,field2]... FROM TableName WHERE criteria 
  ORDER BY FieldName1 [ASC|DESC] [,FieldName2 [ASC|DESC] ]...

Более подробное рассмотрение оператора SELECT дано в "Доступ к базе данных MySQL" .

Следующий код используется для обработки формы DirectorySearch.php:

DirectorySearch.php 

<?php 

if ($_POST[submit] == "Search") 
{
	
  //Извлечение данных формы 
		
  $string = $_POST['SearchName'];
		
  //Установление соединения с данными 
		
  $conn = odbc_connect('Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\path\to\database.mdb','','');
		
  //Выполнение оператора SQL SELECT 
		
  $sql = "SELECT * FROM Directory WHERE LName = '$string'";
		
  $rs = odbc_exec($conn, $sql);
	}

?>

<!DOCTYPE html PUBLIC "-//W3C/DTD/XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">
	
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Страница Web</title>

<style>
  
  body {margin:15px;font:10pt Verdana}
  td {vertical-align:top;border:solid 1px gray}
  input,textarea{border:0px}
  
  </style>
  
 </head>
 
 <body>
 
 <form action="DirectorySearch.php" method="post">
 <p> Введите ниже фамилию и щелкните на кнопке "Search", 
чтобы найти номер телефона сотрудника и адрес e-mail </p>
 <table>
 <tr>
 <td colspan="2">Company XYZ Directory</td>
 </tr>
 <tr>
 <td><input type="text" size="15" name="SearchName"/></td>
 <td><input type="submit" value="Search" name="submit"/>
 </tr>
 </table>
  </form>
  
 <div>
 
 <?php
 
 if(!empty($_POST))
 {
	while($row = odbc_fetch_array($rs)) 
	
	{
	echo "Name: " .$row['FName'] . "  ";
	echo  $row['LName'] . "<br/>";
	echo "Telephone: " . $row['Telephone'] . "<br/>";
	echo "Email: " . $row['Email'] . "<br/>";
	}
	
	odbc_close($conn);
 }	
 ?>
 
 </div>
 </body>
 </html>
Пример 9.3.

Эта страница содержит два блока кода PHP. Первый выполняется, когда делается щелчок на кнопке отправки "Search". Введенное пользователем имя ( first name ) присваивается скалярной переменной '$string'. Затем с базой данных устанавливается соединение и выполняется оператор SQL SELECT для выбора всех (*) полей записей таблицы, где значение поля 'lastname' совпадает со строкой фамилии, введенной пользователем. Наконец, выполняется оператор SQL. Если найдены подходящие записи, то множество записей присваивается переменной '$rs'.

Второй блок кода появляется в разделе тела XHTML-документа. Код, содержащий операторы echo или print, помещается обычно между открывающим и закрывающим тегами <body>, чтобы он выводился или форматировался в соответствии с другими элементами страницы. Операторы echo и print в блоках PHP, появляющиеся выше <html>, всегда появляются в верху страницы и предшествуют всем другим ее элементам.

Назначение этого блока кода состоит в выводе записей, извлеченных при выполнении оператора SQL в предыдущем блоке кода. Сначала оператор if используется для определения, что массив $_POST не является пустым. Если массив пустой, то это означает, что форма не была отправлена и никакие записи не были извлечены. Если этот условный оператор будет отсутствовать, то возникнет ошибка, так как массив odbc_fetch_array не будет содержать никаких значений.

Затем используется цикл while для итераций на множестве записей. Во время каждой итерации по множеству записей, функция odbc_fetch_array() создает ассоциативный массив (здесь массив называется $row ), содержащий значения полей текущей записи. Индексы массива соответствуют именам полей формы, а элементы массива — значениям полей. Каждая запись затем выводит $row['FName']значение поля 'FirstName', $row['LName']значение поля 'LastName', $row['Telephone']значение поля 'Telephone', и $row['Email']значение поля 'Email'. Этот процесс продолжается, при этом каждый раз массив $row содержит новые значения, пока не будет достигнут конец множества записей.

После вывода всех записей соединение с базой данных закрывается с помощью функции odbc_close().

Ниже показан пример вывода, созданного после поиска в каталоге компании XYZ.


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

DirectorySearch.php 

 <?php
 
 if(!empty($_POST))
 {
	$results = 0;
	while($row = odbc_fetch_array($rs)) 

	{
	echo "Name: " .$row['FName'] . "  ";
	echo  $row['LName'] . "<br/>";
	echo "Telephone: " . $row['Telephone'] . "<br/>";
	echo "Email: " . $row['Email'] . "<br/>";
	
	$results += 1;
	}
	
	if ($results == 0)
	
	{
	
		echo "Ничего не найдено!";
	
	}
	
	odbc_close($conn);
 }	
 ?>
 
 </div>
 </body>
 </html>

Модифицированный сценарий, показанный выше, добавляет счетчик записей $results для подсчета числа выводимых записей. В начале значение счетчика задается равным 0. Если множество записей существует, то цикл while будет выполнять итерации на каждой записи и увеличивать значение счетчика на 1. После окончания цикла проверяется значение счетчика. Если это значение равно 0, то никаких записей не было найдено, и выводится сообщение "Ничего не найдено!"

< Лекция 8 || Лекция 9: 123 || Лекция 10 >
Максим Матросов
Максим Матросов
Наталья Джабасова
Наталья Джабасова