Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Работа с 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> Популярное:
|
Последнее изменение этой страницы: 2017-03-03; Просмотров: 742; Нарушение авторского права страницы