Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Контрольный вывод введенных значений формы




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

 

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

Вспомните, что значения полей посланной формы хранятся в суперглобальных переменных $_POST или $_GET. В предыдущем примере имя пользователя хранится в переменной массива $_POST['FName'], а фамилия — в переменной массива $_POST['LName']. Поэтому вывод значений полей формы можно выполнить, присваивая атрибутам 'value' полей формы с помощью кода PHP значения, содержащиеся в массиве. Следующий код демонстрирует такой подход.

process.php

 

<!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>

</head>

<body>

 

<form action="process.php" method="post">

 

First Name: <input type="text" name="FName" value="<?php echo $_POST['FName']?>"/>

Last Name: <input type="text" name="LName" value="<?php echo $_POST['LName']?>"/>

 

 

<input type="submit" name="submit" value="Submit Data"/>

 

</form>

 

</body>

</html>

Отметим, что значения текстовых полей First Name и Last Name обновлены, чтобы включить следующий код PHP:

<?php echo $_POST['FName']?>

<?php echo $_POST['LName']?>

Когда этот код присваивается атрибуту 'value', он снова выводит значения, введенные ранее пользователем. Когда страница загружается в первый раз, значения переменных POST будут NULL, а value = "". Атрибут value содержит значение только после того, как была нажата кнопка submit.

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

Сеансы

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

  1. пользователь закрывает окно браузера;
  2. завершение заданного на сервере максимального интервала времени сеанса;
  3. использование функций PHP, таких, как session_destroy(), чтобы освободить все существующие в данный момент переменные сеанса.

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

Система PHP имеет ряд средств для поддержки сеансов. Это руководство начинается с введения глобальной переменной $_SESSION[]. Переменную $_SESSION[] рекомендуется использовать для улучшения безопасности и удобочитаемости кода.

Также вводятся функции сеанса session_start() и session_destroy(). Каждая из них определена ниже:

$_SESSION[] – суперглобальный массив PHP, который содержит зарегистрированные в данный момент переменные сеанса сценария.

session_start() – инициализация данных сеанса. Эта функция вызывается перед созданием новой переменной сеанса с помощью $_SESSION[].

session_destroy() – разрушает все данные, зарегистрированные для текущего сеанса сценария

Функция PHP header("Location …") - это функция HTTP, а не функция сеанса, она обычно используется для перенаправления пользователей во время существующих сеансов. Эта функция определена ниже.

header("Location: http://www.domain.com") – функция header используется для перенаправления браузера на страницу, определенную параметром Location.

Следующий блок кода демонстрирует, как инициализируется переменная сеанса.

<?php

 

session_start();

 

if ($_SESSION['count'] == "")

{

 

$_SESSION['count'] = 1;

}

 

else

{

$_SESSION['count'] = $_SESSION['count'] + 1;

 

}

 

?>

В этом примере сначала вызывается функция session_start() для инициализации данных сеанса. Функция session_start() должна вызываться перед созданием и присваиванием значений переменным сеанса. Затем используется оператор if для проверки значения переменной сеанса "count". Если сеанс будет null или не содержит значения, то он инициализируется как 1, иначе значение переменной сеанса увеличивается на 1. В этом случае переменная сеанса count используется для подсчета числа посетителей. Переменные сеанса предоставляют идеальный способ создания счетчиков страниц, так как каждому пользователю предоставляется уникальный сеанс.

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

login.php

 

<?php

if ($_POST['submit'] == "Login")

{

 

// сценарий проверки имени пользователя и пароля должен кодироваться здесь

 

//если аутентификация прошла успешно

session_start();

$_SESSION['access'] = "yes";

header(Location:access.php);

}

 

if ($_POST['submit'] == "Log Out")

{

 

//если пользователь решает выйти

session_destroy();

}

 

?>

 

access.php

 

<?php

// если пользователь обращается к этой странице,

// проверьте, что он был аутентифицирован в login.php

 

if ($_SESSION['access']!= "yes")

{

 

header(Location:login.php);

 

}

 

?>

Пример выше состоит из двух страниц — login.php и access.php. Прежде чем пользователь сможет увидеть содержимое access.php, он должен пройти login.php. Создается сеанс, чтобы гарантировать, что пользователь был аутентифицирован. После того как пользователь вводит действительное имя пользователя и пароль, выполняется щелчок на кнопке "Login". Сценарий PHP проверяет, что пароль и имя пользователя допустимы. Затем переменной сеанса присваивается значение "yes" и доступ предоставляется. Пользователь перенаправляется на страницу access.php. Сценарий на access.php проверяет, что существует сеанс. Если сеанс не существует, применяется функция header(), чтобы перенаправить пользователя назад на страницу login.php и не разрешить доступ к содержимому страницы access.php.

Страница login.php содержит второй сценарий, который используется для уничтожения переменной сеанса, вызывая функцию session_destroy(). Сценарий выполняется после того, как пользователь щелкает на кнопке "Log Out".

Приложения Web, которые используют данные сеанса, могут быть доступны одновременно множеству пользователей. Чтобы каждый пользователь имел свой собственный сеанс, с каждым сеансом необходимо связать уникальное значение id. В PHP это уникальное значение сеанса id можно извлечь с помощью функции session_id(). Уникальное значение сеанса session_id() поддерживается для каждого пользователя и хранится в подкаталоге PHP/sessiondata, расположенном на сервере Web.

Так как значение session_id() является уникальным для каждого пользователя, его можно применять для идентификации пользователей, не создавая при этом индивидуальных имен пользователей и паролей. Функция session_id() определена ниже:

session_id() – используется для получения значения id текущего сеанса.

Файлы Cookies Файл cookie является сообщением от браузера Web-серверу. Браузер сохраняет сообщение в текстовом файле. Это сообщение посылается затем назад на сервер каждый раз, когда браузер запрашивает страницу с сервера. Основное назначение cookies состоит в идентификации пользователей и возможной подготовке специально настроенной для них страницы Web. При посещении сайта Web, использующего cookies, на сайте может быть предложено заполнить форму, чтобы предоставить такую информацию, как свое имя и возможные интересы. Эта информация упаковывается в cookie и посылается браузеру Web, который сохраняет ее для последующего использования. Когда вы в следующий раз посещаете тот же самый сайт Web, браузер пошлет cookie серверу Web. Сервер может использовать эту информацию, чтобы создать индивидуализированные страницы Web. Поэтому, например, вместо обычной приветственной страницы можно увидеть приветственную страницу со своим именем. В PHP файлы cookies создают с помощью функции setcookie(). Все данные cookie хранятся в глобальной переменной PHP $_COOKIE и доступны для последующих страниц. setcookie(name,value,expiration,path,domain,security) – определяет файл cookie, который посылается вместе с остальными заголовками HTTP. Как и другие заголовки, файлы cookie должны посылаться до какого-либо вывода работы сценария (это ограничение протокола). Поэтому требуется, чтобы обращение к функции было помещено до любого вывода, включая теги и любые символы разделители. Если вывод происходит до обращения к этой функции, то setcookie() не выполнится и вернет FALSE. Если setcookie() выполняется успешно, то возвращается TRUE. Это не указывает на то, что пользователь принял cookie. Параметры setcookie() объясняются в следующей таблице.
Параметр Описание
name Имя cookie. Этот идентификатор хранится в глобальной переменной $_COOKIE и доступен в последующих сценариях
value Значение cookie. Значение, связанное с идентификатором cookie. Хранится на компьютере пользователя, поэтому не должно содержать секретной информации
expiration Время, когда истекает значение cookie или становится более недоступным. Это время можно задать с помощью функции time(). Файлы cookie без заданного значения времени истечения завершают свое существование при закрытии браузера
path Указывает пути доступа на сервере, для которых cookie действителен или доступен. Прямая косая черта "/" говорит, что cookie доступен во всех папках
domain Домен, в котором доступен cookie. Если домен не определен, по умолчанию используется хост, на котором создан cookie. Значения domain должны содержать в строке как минимум две точки ".", чтобы быть допустимыми
security Указывает, будет ли cookie передаваться через HTTPS. Значение 1 означает, что cookie передается через защищенное соединение. Значение 0 обозначает стандартную передачу HTTP

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

 

<?php

 

if ($_REQUEST[auth] == "no")

{

$msg = "Вы не являетесь пользователем. Зарегистрируйтесь.";

}

 

// Если пользователь щелкает на кнопке Login, создается cookie,

// содержащий его имя пользователя и IP-адрес

 

if ($_POST[submit] == "Login")

{

$cookie_name = "user";

$cookie_value = $_POST[uname];

$cookie_expire = time() + 14400;

 

setcookie($cookie_name,$cookie_value,$cookie_expire,"/");

 

$formDisplay = "no";

}

 

?>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHMTL 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

 

<head>

<title>Страница Web </title>

 

<style type="text/css">

 

body {font:10pt arial;color:white}

div#form {background-color:gray;border:solid 1px black;padding:10px}

input {border:solid 2px black}

 

</style>

 

<?php

 

if ($formDisplay == "no")

 

{

 

?>

 

<meta http-equiv='refresh' content='0;url=siteaccess.php?auth=yes'/>

 

<?php

 

}

 

?>

 

</head>

 

 

<body>

 

<div id="form">

<h4 style="color:red">New User? Create User Name</h4>

<form action="setcookie.php" method="post">

 

<p>User Name:

<br/>

<input type="text" name="uname" size="7"/>

</p>

 

<input type="submit" value="Login" name="submit"/>

 

 

</form>

 

<h4 style="color:red">Existing User?

<a style="color:white" href="siteaccess.php?auth=yes">Enter Site</a></h4>

 

</div>

<br/>

<br/>

<?php

 

echo "<span style='color:red'>". $msg. "</span>";

 

?>

 

 

</body>

</html>

Файл setcookie.php

siteaccess.php

 

<?php

 

// Если пользователь щелкает на кнопке Login,

// создается cookie, содержащий его имя пользователя и IP-адрес

 

if ($_REQUEST[auth] == "yes" && $_REQUEST[user])

{

 

echo "Добро пожаловать ". " ". $_COOKIE[user]. " на сайт с ограниченным доступом.

Теперь на вашем жестком диске хранится cookie,

и вы можете обращаться к этому сайту без регистрации при каждом обращении";

 

}

 

else

 

{

 

header("Location:setcookie.php?auth=no");

}

 

?>

 

Доступ к MySQL

Используемые обычно функции PHP для MySQL описаны ниже.

mysql_connect(имя сервера MySQL,имя пользователя,пароль) – открывает соединение с сервером MySQL.

mysql_select_db(имя базы данных,идентификатор_соединения) – выбирает базу данных, расположенную на сервере MySQL. Параметр "имя базы данных" относится к активной базе данных на сервере MySQL, который был открыт с помощью функции mysql_connect. "Идентификатор_соединения" является ссылкой на текущее соединение с MySQL.

mysql_query(запрос sql) – посылает запрос активной в данный момент базе данных.

mysql_fetch_array(resourse result) – возвращает массив, который соответствует извлеченной строке, и перемещает внутренний указатель данных вперед.

mysql_affected_rows(resourse result) – определяет число строк, затронутых предыдущей операцией SQL.

mysql_close(link_identifier) – закрывает соединение MySQL.

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

При работе с сервером MySQL полезно также использовать инструменты управления с графическим интерфейсом, которые обеспечивают более легкий интерфейс использования данных. Популярными инструментами являются: SQLyog (доступный на http://www.webyog.com) и MySQL Administrator (доступный на http://www.mysql.com/products/tools/).

Добавление записей

С помощью рассмотренных в предыдущем разделе функций MySQL и языка SQL можно добавлять записи в таблицу базы данных. Записи добавляются с помощью формы, предоставляющей области для ввода информации. Нажатие кнопки вызывает затем сценарий PHP для записи новой информации в таблицу с помощью команды SQL INSERT.

Типичная форма ввода для добавления новой записи в таблицу Survey показана ниже.

 

Поля формы именованы соответствующим образом:

Name — 'Name', Email — 'Email', Web Connection — 'Connection',

Residence (City/ST/Country) — 'Residence', Age — 'Age', Gender — 'Gender',

Comments — 'Comments'.

Прежде чем подробно рассматривать код, будет полезно посмотреть на синтаксис оператора SQL INSERT:

INSERT INTO TableName (FieldName1 [,FieldName2]...) VALUES (Value1 [,Value2]...)

Более подробное рассмотрение оператора INSERT дано в приложении.

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

VisitorSurvey.php

 

<?php

 

if ($_POST[submit] == "Submit")

{

 

//Получение данных формы и присвоение скалярным переменным

 

$Name = $_POST[Name];

$Email = $_POST[Email];

$Connection = $_POST[Connection];

$Residence = $_POST[Residence];

$Age = $_POST[Age];

$Gender = $_POST[Gender];

$Comments = $_POST[Comments];

 

//Установление соединения с базой данных

 

$conn = mysql_connect('localhost','root','xyxyxy');

 

//Выбор базы данных MySQL

 

$db = mysql_select_db('Membership', $conn);

 

//Оператор SQL

 

$sql = "INSERT INTO Survey ".

"(Name,Email,Connection,Residence,Age,Gender,Comments) VALUES ('$Name', '$Email', '$Connection',

'$Residence', '$Age', '$Gender', '$Comments')";

 

//Выполнение оператора SQL и сохранение результатов в множестве записей

 

$rs = mysql_query($sql,$conn);

 

mysql_close($conn);

 

}

 

?>

После нажатия кнопки отправки Submit создается суперглобальный массив $_POST, содержащий значения из формы. Значения массива присваиваются скалярным переменным. Это упрощает кодирование оператора SQL. Затем выполняется оператор mysql_connect(). Этот оператор требует три параметра – имя хоста сервера MySQL, имя пользователя, и пароль. Здесь для соединения с базой данных MySQL используется строка соединения без DSN. Ссылка на соединение хранится в переменной $conn. Это пример ссылочной переменной PHP. В отличие от скалярных переменных и массивов, ссылочные переменные не применяются непосредственно в программе, но часто используются как параметры для других функций. После соединения с сервером базы данных MySQL следующий шаг состоит в выборе базы данных. Так как экземпляр сервера MySQL может содержать большое число баз данных, то задействуется функция mysql_select_db для выбора одной из них для использования в приложении. Эта функция требует два параметра – имя базы данных и ссылку на соединение MySQL. Вслед за выбором базы данных формируется оператор SQL INSERT и присваивается переменной $sql. Затем функция mysql_query() выполняет оператор SQL, создающий множество записей (множество записей базы данных). Это множество записей присваивается переменной $rs, еще одной ссылочной переменной PHP. Отметим, что функция mysql_query() требует два параметра — $sql (ссылка на текущий оператор SQL) и $conn (ссылка на текущее соединение с базой данных). Наконец, вызывается функция close() для закрытия текущего соединения с базой данных. Для таких приложений обычно желательно выполнять проверку данных, прежде чем заносить данные в таблицу базы данных. Это необходимо делать перед установлением соединения с базой данных.

В случае ошибки кодирования данные не заносятся в таблицу базы данных, а PHP выведет предупреждение или сообщение об ошибке. В такой ситуации полезно подавить эти критические сообщения, добавить код для проверки ошибок вручную и сгенерировать более понятный для пользователя вывод. Это можно делать сразу после оператора mysql_query(), проверяя статус вновь созданного множества записей — $rs.

Предположим, что в предыдущем коде функция mysql_query() содержит вместо $sql параметр $sqlString. В этом случае PHP немедленно прекратит выполнение страницы и выведет сообщение об ошибке.

Вывод сообщения об ошибке PHP можно подавить с помощью оператора управления ошибками "@". При подавленном сообщении об ошибке можно добавить код для создания более понятного пользователю сообщения. Такой подход показан ниже:

VisitorSurvey.php

 

<?php

 

if ($_POST[submit] == "Submit")

{

 

//Получение данных формы и присвоение скалярным переменным

 

$Name = $_POST[Name];

$Email = $_POST[Email];

$Connection = $_POST[Connection];

$Residence = $_POST[Residence];

$Age = $_POST[Age];

$Gender = $_POST[Gender];

$Comments = $_POST[Comments];

 

//Установление соединения с базой данных

 

$conn = @mysql_connect('localhost','root','xyxyxy');

 

//Выбор базы данных MySQL

 

$db = @mysql_select_db('Membership', $conn);

 

//Оператор SQL

 

$sqlstring = "INSERT INTO Survey ".

"(Name,Email,Connection,Residence,Age,Gender,Comments) VALUES ('$Name', '$Email', '$Connection',

'$Residence', '$Age', '$Gender', '$Comments')";

 

//Выполнение оператора SQL и сохранение результатов в виде множества записей

 

$rs = @mysql_query($sqlstring,$conn);

 

if (!$rs)

{

 

echo "Произошла ошибка. Попробуйте еще раз.";

 

}

 

else

 

{

 

echo "Запись была успешно добавлена.";

 

}

 

mysql_close($conn);

 

}

 

?>

 

Вслед за функцией mysql_query() используется оператор if для проверки статуса множества записей $rs. Если множество записей успешно создается, выводится сообщение "Запись была успешно добавлена". Если возникает проблема, выводится сообщение "Произошла ошибка. Попробуйте еще раз."

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

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

DirectorySearch.php

 

<?php

 

if ($_POST[submit] == "Search")

{

 

//Получение данных формы

 

$string = $_POST['search'];

 

//Установление соединения с данными

 

$conn = mysql_connect('localhost','root','xyxyxy');

 

//Выбор базы данных

 

$db = mysql_select_db('Membership', $conn);

 

//Создание оператора SQL SELECT

 

$sql = "SELECT * FROM Directory WHERE LName = '$string'";

 

$rs = mysql_query($sql, $conn);

}

 

?>

 

<!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>

 

 

</head>

 

<body>

 

<form action="DirectorySearch.php" method="post">

<p>Введите ниже фамилию и нажмите кнопку "Search",

чтобы найти номер телефона и адрес e-mail сотрудника</p>

<table>

<tr>

<td colspan="2">Company XYZ Directory</td>

</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 = mysql_fetch_array($rs))

{

echo "Name: ".$row['FName']. " ";

echo $row['LName']. "<br/>";

echo "Telephone: ". $row['Telephone']. "<br/>";

echo "Email: ". $row['Email']. "<br/>";

}

mysql_close($conn);

}

?>

 

</div>

</body>

</html>

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

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

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

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

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

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

 

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

DirectorySearch.php

 

<?php

 

if(!empty($_POST))

{

 

while($row = mysql_fetch_array($rs))

 

{

 

echo "Name: ".$row['FName']. " ";

echo $row['LName']. "<br/>";

echo "Telephone: ". $row['Telephone']. "<br/>";

echo "Email: ". $row['Email']. "<br/>";

 

}

 

if (mysql_affected_rows($rs) == 0)

 

{

 

echo "No records found!";

 

}

 

mysql_close($conn);

}

?>

 

</div>

</body>

</html>

Показанный выше измененный сценарий содержит дополнительно функцию mysql_affected_rows(). Эта функция требует один параметр – ссылку на текущее множество записей $rs и определяет число строк, затронутых последней операцией SQL. Если возвращаемое функцией mysql_affected_rows() значение равно 0, то оператор SQL SELECT не затронул ни одной строки. Поэтому подходящих записей найдено не было.

Удаление записей

Оператор SQL DELETE используется для удаления существующих записей в базе данных.

Синтаксис оператора SQL DELETE показан ниже:

DELETE FROM Имя_Таблицы WHERE критерий

Более подробно оператор DELETE рассматривается в приложении.

Следующая форма представляет запись пользователя, которая будет удалена из таблицы базы данных Personnel. Щелчок на кнопке Delete вызывает процедуру PHP, которая выполняет оператор SQL DELETE для удаления этой записи из таблицы базы данных.

 

Кроме показанных выше элементов управления формы, страница включает также скрытое текстовое поле с именем "AutoNum" со значением, равным полю AutoNum таблицы базы данных. Это поле используется для уникальной идентификации каждой записи. Следующий код демонстрирует, как работает страница:

DirectorySearch.php

 

<?php

 

if ($_POST['submitb']=="Delete Record")

{

 

$conn = mysql_connect('localhost','root','xyxyxy');

$db = mysql_select_db('Membership',$conn);

$sqlDelete = "DELETE FROM Personnel WHERE AutoNum =". $_POST['AutoNum'];

$rsDelete = mysql_query($sqlDelete,$conn);

 

if(mysql_affected_rows($rsDelete) == 1)

{

 

echo "Запись успешно удалена!";

 

}

 

mysql_close($conn);

 

}

 

?>

После нажатия кнопки "Delete Record" устанавливается соединение с базой данных MySQL. Затем создается оператор SQL DELETE для удаления записи из таблицы Personnel со значением поля AutoNum, равным значению скрытого текстового поля AutoNum. Затем оператор SQL выполняется. Результаты работы функции mysql_query() присваиваются переменной $rsDelete. Последний шаг состоит в проверке, что удаление записи прошло успешно, и в выводе подтверждающего сообщения. Функция mysql_affected_rows() используется для определения числа строк в множестве результатов ODBC или числа строк, затронутых оператором mysql_query(). Так как будет удалена только одна запись, то результат mysql_affected_rows() равный 1 означает, что запись удалена успешно. В конце соединение с базой данных закрывается.

Открытие файлов

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

PHP содержит функции fopen() и fclose() для работы с файлами. Обе функции определяются ниже.

fopen(имя_файла, режим) - функция используется для открытия файла. Для функции требуется задать имя файла и режим работы. Она возвращает указатель на файл, который содержит информацию о файле и используется в качестве ссылки.

fclose(указатель_ресурса) – функция используется для закрытия файла. Для функции требуется указатель файла, созданный при открытии файла с помощью функции fopen(). Возвращает TRUE при успешной работе или FALSE при отказе.

Имя файла является полным путем доступа к файлу, который требуется создать или открыть. Этот путь доступа может быть относительным путем доступа к файлу: "/Documents and Settings/Administrator/PHP/myfile.txt" или абсолютным путем доступа к файлу: "E:/MyFiles/PHP/myfile.txt". Для каждого определенного каталога необходимо иметь подходящие права NTFS для создания, модификации или удаления файлов.

Режим может быть одним из следующих.

Режимы, используемые в fopen()

Режим Применение
r Открывает существующий файл с целью чтения из него данных. Указатель файла помещается в начале файла
r+ Открывает существующий файл с целью чтения или записи данных. Указатель файла помещается в начале файла
w Открывает файл для записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в начале файла и функция удаляет все существующее содержимое файла
w+ Открывает файл для чтения и записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в начале файла и функция удаляет все существующее содержимое файла
a Открывает файл для записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в конце файла
a+ Открывает файл для чтения и записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в конце файла

Следующий пример показывает, как открыть файл для чтения:

fileprocess.php

 

<?php

 

$filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

 

$newfile = fopen($filename, "w+");

 

//код для чтения или записи данных в файл располагается здесь

 

fclose($newfile);

 

?>

Первый шаг состоит в создании переменной для хранения всего пути доступа к файлу, который будет открыт:

$filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Путь доступа к текстовому файлу myfile.txt хранится в переменной с именем filename. Затем создается указатель файла с именем $newfile и применяется с функцией fopen() для открытия файла, указанного в предыдущем разделе. Указатель файла является ссылочной переменной PHP, используемой для ссылки на только что открытый файл:

$newfile = fopen($filename, "w+");

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

В некоторых ситуациях функция fopen() не сможет успешно открыть файл в результате неверного пути доступа к файлу, полномочий безопасности или других непредвиденных проблем. В связи с этим рекомендуется использовать специальную функцию PHP для аккуратной обработки таких ошибок. Эти функции можно применять в сочетании с оператором управления ошибками PHP "@" для завершения сценария, подавления создаваемых PHP сообщений об ошибках, и вывода более понятного пользователю сообщения. Функции управления ошибками PHP описаны ниже:

exit(сообщение_об_ошибке) – завершает текущий сценарий и выводит сообщение об ошибке, передаваемое в функцию.

die(сообщение_об_ошибке) – алиас функции exit().

Следующий сценарий демонстрирует использование функций управления ошибками:

fileprocess.php

 

<?php

 

$filename = "C:/Documents and Settings/Administrator/MyFiles/

myfile.txt";

 

$newfile = @fopen($filename, "w+") or exit("Невозможно открыть или создать файл");

 

//код для чтения или записи данных в файл размещается здесь

 

fclose($newfile);

 

?>

Если файл невозможно открыть, функция exit() выводит сообщение " Невозможно открыть или создать файл" и сценарий завершается.

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

Чтение файлов

Этот раздел описывает, как использовать PHP для чтения содержимого файлов в системах Windows.

Для чтения файлов в PHP имеются функции fread() и filesize(). Они определяются ниже.

fread(указатель_ресурса, длина) – функция, используемая для чтения содержимого файла. Читает указанное количество байтов "длина" из файла "указатель_ресурса". Чтение останавливается, когда будет прочитано заданное количество байтов ("длина") или будет достигнут маркер EOF (end of file). Функция требует два параметра – указатель файла, который создается, когда файл открывается с помощью функции fopen(), и размер, который определяет, какая часть содержимого будет считана.

fgetcsv(указатель_ресурса, длина, ограничитель) – функция, используемая для чтения содержимого файла и анализа данных для создания массива. Данные разделяются параметром-ограничителем, задаваемым в функции.

filesize(имя_файла) – возвращает размер файла. Если возникает ошибка, функция возвращает значение false.

Следующий пример иллюстрирует, как прочитать все содержимое файла:

fileread.php

 

<?php

 

$filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

 

$newfile = @fopen($filename, "r") or exit("Невозможно открыть файл!");

 

$file_contents = @fread($newfile, filesize($filename))

or exit("Невозможно прочитать содержимое файла!");

 

fclose($newfile);

 

?>

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

$filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Путь доступа к текстовому файлу myfile.txt хранится в переменной с именем filename. Затем создается указатель файла с именем $newfile и используется с функцией fopen() для открытия файла, указанного в предыдущем разделе. Указатель файла применяется для ссылки на только что открытый файл:

$newfile = fopen($filename, "r");

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

Затем создается переменная с именем $file_contents и используется для хранения содержимого текстового файла myfile.txt. Первый параметр функции fread() указывает на имя файла, содержимое которого будет прочитано. Второй параметр определяет длину файла. Если длина файла неизвестна, можно воспользоваться специальной функцией PHP с именем filesize(), которая определяет длину файла. Она требует один параметр – имя или путь доступа файла, который читается в данный момент.

$file_contents = fread($newfile, filesize($filename));

Все содержимое текстового файла хранится теперь в переменной $file_contents. Эти данные можно выводить на экране с помощью оператора echo или записать в другой текстовый файл.

В некоторых случаях может понадобиться прочитать и работать с отдельными частями содержимого текстового файла. При использовании fread() все содержимое файла хранится в одной переменной, что затрудняет работу с отдельными частями файла. Если текстовый файл содержит разграничители для разделения отдельных фрагментов данных, можно применить для чтения другую функцию чтения — fgetcsv(). Эта функция читает содержимое файла и создает массив, делая доступными определенные части текста.

Предположим, что текстовый файл numbers.txt существует и содержит следующие данные:

numbers.txt

 <

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...