proview.ruКонструирование сайтовMySQL → PHP и MySQL на примере

PHP и MySQL на примере

PHP, обзорная статья о котором есть на нашем сервере, умеет не только рассылать сообщения о том, что яблоки распространяются бесплатно. На самом деле это довольно мощная вещь, позволяющая создавать крупные коммерческие системы, в том числе и корпоративные информационные системы (естественно, вкупе с MySQL). Все это рано или поздно будет казаться довольно легким, но сейчас, как я полагаю, вы ограничились написанием скрипта-примера, который у вас не работает, потому что путь к sendmail (которого на Windows-платформах нет) указан неверно. Мне всегда казалось, что разобранный текст скрипта помогает всегда лучше, чем просто хелп...

Как вы знаете, с помощью великого и ужасного .htaccess можно настроить в качестве интерпретируемых как PHP файлов файлы с расширениями .php, .php3, .php4, .phtml (естественно, можно настроить и файлы .prikol, просто эти - наиболее часто используемые). Если желаете, можно даже считать таковыми файлы .html, достаточно просто прописать в .htaccess следующее:


<br />RemoveHandler .html .htm<br />AddType application/x-httpd-php .php .htm .html .phtml<br />

Я крайне не рекомендую этого делать, советую называть файлы PHP так, чтобы расширением было .php. Эта рекомендация связана с тем, что файл .php явно является скриптом, в отличие от html, который запросто может и не содержать скриптовых включений (а нагрузка на сервер остается). По этой же причине я не советую и настраивать .html файлы на исполнение Includes (SSI), но тут уж выбор за вами. В крайнем случае в файл .shtml можно добавить PHP-включение стандартной директивой


<!--#include virtual="privet.php" -->


Ни коем случае не пытайтесь назначать файлы одного расширения сразу и на интерпретацию PHP, и SSI! Это приведет к непредсказуемым последствиям.
Как вы уже догадались, подключение к MySQL производится двумя командами: сначала соединяемся с сервером MySQL, потом выбираем используемую базу данных, вот так:


<br />MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");<br /><br />@mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");<br />

Переменные, отвечающие за пароль, логин и прочее, лучше задавать отдельно. Собака перед командой означает то, что сообщения об ошибках этой команды не выводятся. Не забудьте потом закрыть соединение с MySQL!


mysql_close();


Вот так. Теперь самое интересное. Как выясняется, вы можете довольно просто манипулировать содержимым базы данных с помощью команды mysql_query. Например, мы создаем простую формочку с полями name, email и password:


<br /><br /><br /><br /><form method="post"><br />Your name:<br /><br /><input type="text" name="name" /><br /><br />Your e-mail:<br /><br /><input type="text" name="email" /><br>><br />Your password:<br /><br /><input type="password" name="password" /><br /><br /><input type="checkbox" name="del" /> Delete<br /><br />Drop?<br /><input type="text" name="drop" /><br /><br /><input type="submit" /><br /></form><br /><br /><br />

После этого мы должны создать файл database.php, обрабатывающий эти данные. Нетрудно догадаться, что в нем мы будем иметь готовые переменные name, email, password, drop, del, которые и предстоит обработать. Обработка будет заключаться в том, что если галочка "Del" не установлена, то значение в БД добавляется, иначе - удаляются все такие значения (должны полностью соответствовать все три основных поля).


<br /><?<br />$username="mixailo";<br />$passwd="passwd";<br />$dbname="clients";<br />$hostname="localhost";<br /><br />MYSQL_CONNECT ($hostname, $username, $passwd) or<br /> die ("Cannot connect to database...");<br /><br />@mysql_query("create database clients");<br /><br />@mysql_select_db($dbname) or die ("cannot select database");<br />

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


<br />mysql_query("create table clients (name varchar(15), email varchar(35),<br />password varchar(15))") or ($err = MYSQL_QUERY("select *<br />from clients") or die ("can't create table"));<br />

Теперь проверяем, отмечена ли галочка del


if (empty($del))


И если она пуста, то добавляем значения в таблицу


<br />{<br />mysql_query("insert into clients values ('$name', '$email',<br />'$password')") or die ("Cannot insert values");<br />}<br />

Иначе пытаемся удалить значения, точно соответствующие шаблону:


<br />elseif (!empty($del))<br />{<br />mysql_query("delete from clients where name='$name' and<br /> email='$email' and password='$password'") or die ("Can't delete");<br />}<br />

Проверяем, написал ли пользователь в поле drop слово "drop", если да - удаляем из БД всю таблицу:


<br />if ($drop=="drop")<br />{<br />MYSQL_QUERY("DROP TABLE clients") or<br />die ("cannot drop");<br />}<br />

В принципе, теперь осталось только закрыть соединение и написать закрывающий тег ?>, но мы ведь хотим посмотреть, что у нас получилось? Делаем так:


<br />$vopr=mysql_query("select * from clients") or<br /> die ("No way. Can't select.");<br />while ($line = mysql_fetch_array ($vopr))<br /><br />{<br /> print "<hr />";<br /> extract($line);<br /> print"$name,$email,$password";<br />}<br />print "<HR />";<br />mysql_close();<br /><br />?><br />

Вот и все, простая программа манипуляции базой данных готова. Замечу, что восклицательный знак перед функцией означает логическое НЕ, т.е. !empty($line) означает "НЕ (пустая ли переменная $line?)", и будет иметь значение ИСТИНА (TRUE), если $line непустая. Функция extract(аргумент) выделяет из выдачи MySQL, которую мы не можем просто так распечатать, переменные, соответствующие названиям полей в таблице; в нашем случае это $name, $email, $password - так и называются поля в таблице clients.

Источник: www.programmers.kz

Популярное