Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Работа с MySQL: получение данных из базы данных



После занесения данных, нас иногда будет интересовать вопрос так кого же из наших клиентов интересует товар «Яблоки».

Напишем скрипт apple.php3:

<? /* Скрипт показывает клиентов, которые яблоки любят больше чем

апельсины */

$hostname = " localhost";

$username = " myusername";

$password = " mypassword";

$dbName = " products";

/* Таблица MySQL, в которой хранятся данные */ $userstable = " clients";

/* создать соединение */

MYSQL_CONNECT($hostname, $username, $password) OR DIE(" Не могу создать соединение " );

@mysql_select_db(" $dbName" ) or die(" Не могу выбрать базу данных " );

/* Выбрать всех клиентов — яблочников */

$query = " SELECT * FROM $userstable WHERE choice = 'Яблоки'";

$result = MYSQL_QUERY($query);

/* Как много нашлось таких */ $number = MYSQL_NUMROWS($result);

/* Напечатать всех в красивом виде*/ $i = 0;

IF ($number == 0) {

PRINT " < CENTER> < P> Любителей яблок нет< /CENTER> ";

} ELSEIF ($number > 0) {

PRINT " < CENTER> < P> Количество любителей яблок: $number< BR> < BR> ";

WHILE ($i < $number){

$name = mysql_result($result, $i, " name" );

$email = mysql_result($result, $i, " email" );

PRINT " Клиент $name любит Яблоки.< BR> ";

PRINT " Его Email: $email.";

PRINT " < BR> < BR> ";

$i++;

}

PRINT " < /CENTER> ";

}

? >

Здесь мы использовали две новых функции:

int mysql_num_rows(int result);

Функция возвращает количество строк в результате запроса.

Параметр result – содержит ID результата запроса.

int mysql_result(int result, int i, column);

Функция возвращает значение поля в столбце column и в строке i.

Вот и все, коммерческий продукт практически готов.

Глава 5. Написание Гостевой книги на РНР

То, что знать мнения других о себе и о своем детище иногда полезно, никто не спорит. Когда сайт крепко становится на ноги, и выходит из стадии младенчества, web-мастер задается вопросом – как бы мне узнать, что именно хотят мои посетители, что волнует их и что не нравится на сайте? Все эти вопросы легко исследовать, установив гостевую книгу.

Для начала вам нужен сайт, размещенный на хостинге, где поддерживается гипертекстовый препроцессор РНР. Это – очень простой и несложный язык программирования, и именно на нем и будет написана наша гостевая книга.

Все, что понадобится, это два файла. В первом будут размещены форма для ввода данных и сам скрипт гостевой, а во втором – храниться результаты введенных данных в специальном формате. Давайте обзовем их соответственно guest.phtml и guest.txt.

Не забывайте, что после закачки на сервер этих двух файлов на файл с результатами (guest.txt) нужно будет установить атрибуты, разрешающие запись в файл. Сделать это можно практически в любом из FTP-менеджеров, проверив атрибуты уже закачанного на сервер файла, и установив в настройках все галочки. Теперь перейдем непосредственно к коду. Он должен быть введен в файл guest.phtml.

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

< h2> Гостевая книга< /h2>

< form action=guest.phtml method=post>

Введите email: < INPUT TYPE=TEXT NAME=email> < BR>

Ваше имя: < INPUT TYPE=TEXT NAME=name> < BR>

Сообщение: < br> < textarea name=" msg" rows=10 cols=40> < /textarea>

< br> < input type=submit value=" Отправить " >

< br> < br>

Только что мы определили форму с тремя полями – адрес (переменная email), имя (переменная name) и сообщение (переменная msg). После того, как посетитель введет данные, и нажмет на кнопку Отправить, все эти переменные будут доступны нашему скрипту, причем значение переменных будет соответствовать введенным данным. Теперь нужно все это обработать.

<?

$files = " guest.txt";

$qq=50;

Мы определились с именем файла, куда будем писать данные и с максимальным количеством сообщений, которое может быть выведено на экран.

if ($email == " " ) { $email = " нет"; } $msg=substr($msg, 0, 999); $email=substr($email, 0, 39); $name=substr($name, 0, 39);

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

if ($msg! = " " & & $name! = " " ) {

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

$time = Date(" h: i: M: d" );

$soo = " \\n< b> $time $name (< a href=\\" mailto: $email \\" >

$email < /a> )< /b> < br> $msg< hr> ";

$fp = fopen($files, " a+" );

$fw = fwrite($fp, $soo);

fclose($fp); }

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

Обратите внимание, что в первый раз, когда посетитель попадает на страничку гостевой, идет обработка сразу этого кода, так как переменные имени и сообщения пусты.

$lines = file($files);

$a = count($lines);

$u = $a — $qq;

for($i = $a; $i > = $u; $i--) { echo $lines[$i]; }

? >

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

Вот и все! В файл для сообщений ничего записывать не нужно – он будет заполняться по мере ввода данных. Архив сообщений всегда будет доступен, если вы поставите ссылку < a href=guest.txt> архив< /a>. Нужно заметить, что код не учитывает ввод посетителем тэгов HTML. Но это уже несколько иная задача, и сделать это легко, если только нужно. Использоваться этот скрипт может в любом месте, где нужно узнать мнение посетителей например, о статье, о новостях и т.д. Так же это – простейший форум.

Глава 6. Гостевая книга на PHP — еще один вариант

Обычно гостевая книга состоит из двух частей: первая часть выводит записи, а вторая добавляет их.

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

В нашем случае префикс будет — «rec», а уникальный идентификатор мы получим с помощью функции time(). Функция time() возвращает текущее время, измеренное в числе секунд с эпохи Unix (1 Января 1970 00: 00: 00 GMT). Конечно, абсолютно уникальное число мы с помощью этой функции мы получить не сможем, но она нас устроит.

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

Файл add.php

В переменной $err мы будем хранить сообщения о произошедших ошибках. Если переменная пуста, то ошибок не происходило.

<? $err=" ";

Если переменная $action не пуста, то значит происходит обращение при котором необходимо добавить запись, иначе необходимо просто вывести форму добавления записи. Переменная $action задается в форме с помощью тэга < input type=hidden>

$action=$HTTP_POST_VARS[" action" ]; if (! empty($action)) {

Первым делом необходимо проверить введено ли сообщение и указан ли его автор.

$name=trim($name); $msg=trim($msg);

if (empty($msg)) {$action=" "; $err=$err." < LI> Вы не ввели сообще-ние\\n"; }

if (empty($name)) {$action=" "; $err=$err." < LI> Вы не ввели имя\\n"; } После этого мы должны осуществить преобразование введенных данных, проверить их длину. Слишком длинные записи могут сильно испортить внешний вид страницы. Необходимо убрать слэши «\\» перед кавычками и заменить специальные символы HTML.

$name=substr($HTTP_POST_VARS[" name" ], 0, 32);

$name=htmlspecialchars(stripslashes($name));

$email=substr($HTTP_POST_VARS[" email" ], 0, 64);

$email=htmlspecialchars(stripslashes($email));

$www=substr($HTTP_POST_VARS[" www" ], 0, 64);

$www=htmlspecialchars(stripslashes($www)); $city=substr($HTTP_POST_VARS[" city" ], 0, 64); $city=htmlspecialchars(stripslashes($city)); $msg=substr($HTTP_POST_VARS[" msg" ], 0, 1024); $msg=htmlspecialchars(stripslashes($msg));

Если не произошло ошибок, то можно заменить специальные символы (такие как [b], [i], [u] ) на их HTML аналоги ( < b>, < i>, < u> ):

if (! empty($err)) {

$msg=nl2br($msg);

$msg=str_replace(" [u]", " < u> ", $msg);

$msg=str_replace(" [i]", " < i> ", $msg);

$msg=str_replace(" [b]", " < b> ", $msg);

$msg=str_replace(" [/u]", " < /u> ", $msg);

$msg=str_replace(" [/i]", " < /i> ", $msg);

$msg=str_replace(" [/b]", " < /b> ", $msg);

С помощью регулярного выражения заменим запись типа [url] http: //www.codenet.ru/[/url] на < a href=http: //www.codenet.ru/> http: // www.codenet.ru/< /a>:

$msg=eregi_replace(" (.*)\\\\[url\\\\](.*)\\\\[/url\\\\](.*)", " \\\\1< a href=\\\\2> \\\\2< /a> \\\\3", $msg); $msg=str_replace(" \\n", " ", $msg); $msg=str_replace(" \\r", " ", $msg);

Теперь данные готовы к сохранению в файл. Файлы с записями у нас будут храниться в каталоге./records.

$fp=fopen(" records/rec.".time(), " w" );

fputs($fp, $name." \\n" );

fputs($fp, $email." \\n" );

fputs($fp, $city." \\n" );

fputs($fp, $www." \\n" );

fputs($fp, $msg." \\n" );

fclose($fp);

Все действия произведены, и мы можем смело отправить пользователя на главную страницу гостевой книги, где он сможет увидеть свою запись.

print " < HTML> < HEAD> \\n";

print " < META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'> \\n";

print " < /HEAD> < /HTML> \\n";

}

}

Если переменная $action пуста, то выводим форму добавления записи:

if (empty($action)) {

? >

< HTML>

< HEAD>

< TITLE> Гостевая книга — добавить запись< /TITLE>

< /HEAD>

< BODY>

<?

if (! empty($errro)) {

print " < P> Во время добавления записи произошли следующие ошибки:

< /P> \\n";

print " < UL> \\n";

print $err;

print " < /UL> \\n";

}

? >

< H3> Добавление записи.< /H3>

< center>

< table width=1 border=0>

< form action=add.php method=post>

< input type=hidden name=action value=post>

< tr> < td width=50%> Имя< font color=red> < sup> *< /sup> < /font>: < /td>

< td align=right>

< input type=text name=name maxlength=32 value='<? echo $name;

? > '> < /td> < /tr>

< tr> < td width=50%> E-Mail: < /td>

< td align=right>

< input type=text name=email maxlength=64 value='<? echo $email;

? > '> < /td> < /tr>

< tr> < td width=50%> Домашняя страница (WWW): < /td>

< td align=right>

< input type=text name=www maxlength=64 value='<? echo $www;

? > '> < /td> < /tr>

< tr> < td width=50%> Город: < /td>

< td align=right>

< input type=text name=city maxlength=64 value='<? echo $city;

? > '> < /td> < /tr>

< tr> < td colspan=2> Сообщение< font

color=red> < sup> *< /sup> < /font>: < br>

< textarea cols=50 rows=8 name=msg> <? echo $msg;

? > < /textarea> < /td> < /tr>

< tr> < td colspan=2> < input type=submit value='Добавить'> < /td> < /tr> < /form> < /table> < /center>

< P> Используйте размету для [b]< B> выделения текста< /B> [/b] и вставки [url]гиперссылок[/url] < /P> < /BODY> < /HTML> <? }? >

Теперь рассмотрим модуль, ответственный за вывод записей гостевой книги.

Файл index.php < HTML> < HEAD>

< TITLE> Гостевая книга< /TITLE> < /HEAD> < BODY> <?

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

$d = dir(" records" );

$i=0;

while($entry=$d-> read()) {

if (substr($entry, 0, 3)==" rec" ) {

$names[$i]=substr($entry, 4);

$i++;

}

}

$d-> close();

Сортируем массив:

@rsort($names); $count=$i; $cnt=$count;

if (empty($start)) $start=0; $start=intval($start); if ($start< 0) $start=0;

Выводим ссылки навигации по гостевой книге «Предыдущие» и «Следующие»:

print " < center> ";

if ($count> $start+10) $count=$start+10; if ($start! =0)

print " [ < A href=index.php? start=".($start-10)." > Предыдущие< /A> ]";

print " [ < a href=add.php> Добавить запись< /A> ] "; if ($cnt> $start+10) {

print " [ < A href=index.php? start=".($start+10)." > Следующие< /A> ]\\n";

print " < /center> < br> ";

Теперь самое главное — считываем нужные нам записи и выводим их.

for ($i=$start; $i< $count; $i++) {

$entry=$names[$i];

$data=file(" records/rec.".$entry);

$date=$entry;

$name=trim($data[0]);

$email=trim($data[1]);

$city=trim($data[2]);

$www=trim($data[3]);

$question=trim($data[4]);

$answer=trim($data[5]);

print " < table border=0 cellspacing=0 cellpadding=2 width=100%> ";

print " < tr bgcolor=#F0F0F0> < td> ";

if (! empty($email)) print " < a href=mailto: $email> $name< /A> \\n";

else print $name;

if (! empty($www)) print " [< a href=$www> $www< /A> ]";

print " < /td> < td align=right> ".date(" H-i-s < b> d-m-Y< /b> ", $date);

print " < /td> < /tr> \\n< tr> < td colspan=2> \\n";

print " < P> ".$question." < /P> \\n";

if (! empty($answer)) print " < P> < B> < I> $answer< /I> < /B> < /P> \\n";

print " < /td> < /tr> < /table> \\n< br> < br> \\n";

}

Опять выводим ссылки навигации по гостевой книге «Предыдущие» и «Следующие»:

print " < center> ";

if ($start! =0)

print " [ < A href=index.php? start=".($start-10)." > Предыдущие< /A>

]";

print " [ < a href=add.php> Добавить запись< /A> ] ";

if ($cnt> $start+10)

print " [ < A href=index.php? start=".($start+10)." > Следующие< /A>

]\\n";

print " < /center> ";

? >

< /BODY>

< /HTML>


Поделиться:



Популярное:

  1. I) Получение передаточных функций разомкнутой и замкнутой системы, по возмущению относительно выходной величины, по задающему воздействию относительно рассогласования .
  2. I. Какое из данных утверждений выражает основную идею текста?
  3. IDEF1X - методология моделирования данных, основанная на семантике, т.е. на трактовке данных в контексте их взаимосвязи с другими данными.
  4. II. Особенности технологии баз и банков данных.
  5. II. Работа с раздаточным материалом
  6. II. СПОСОБЫ И ПРИЗНАКИ ИЗМЕНЕНИЯ МАРКИРОВОЧНЫХ ДАННЫХ
  7. III. Перечень вопросов для проведения проверки знаний кандидатов на получение свидетельства коммерческого пилота с внесением квалификационной отметки о виде воздушного судна - самолет
  8. III. Работа по теме урока Представление журналов
  9. IV. Работа над пройденным материалом.
  10. MS Excel. Расчеты с условиями. Работа со списками
  11. MS Word. Работа с математическими формулами
  12. OLAP-технология и многомерные модели данных


Последнее изменение этой страницы: 2017-03-03; Просмотров: 742; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.093 с.)
Главная | Случайная страница | Обратная связь