PHP, обзорная статья о котором есть на нашем сервере, умеет не только рассылать сообщения о том, что яблоки распространяются бесплатно. На самом деле это довольно мощная вещь, позволяющая создавать крупные коммерческие системы, в том числе и корпоративные информационные системы (естественно, вкупе с MySQL). Все это рано или поздно будет казаться довольно легким, но сейчас, как я полагаю, вы ограничились написанием скрипта-примера, который у вас не работает, потому что путь к sendmail (которого на Windows-платформах нет) указан неверно. Мне всегда казалось, что разобранный текст скрипта помогает всегда лучше, чем просто хелп...
Как вы знаете, с помощью великого и ужасного .htaccess можно настроить в качестве интерпретируемых как PHP файлов файлы с расширениями .php, .php3, .php4, .phtml (естественно, можно настроить и файлы .prikol, просто эти - наиболее часто используемые). Если желаете, можно даже считать таковыми файлы .html, достаточно просто прописать в .htaccess следующее:
RemoveHandler .html .htm AddType application/x-httpd-php .php .htm .html .phtml
Я крайне не рекомендую этого делать, советую называть файлы PHP так, чтобы расширением было .php. Эта рекомендация связана с тем, что файл .php явно является скриптом, в отличие от html, который запросто может и не содержать скриптовых включений (а нагрузка на сервер остается). По этой же причине я не советую и настраивать .html файлы на исполнение Includes (SSI), но тут уж выбор за вами. В крайнем случае в файл .shtml можно добавить PHP-включение стандартной директивой
<!--#include virtual="privet.php" -->
Ни коем случае не пытайтесь назначать файлы одного расширения сразу и на интерпретацию PHP, и SSI! Это приведет к непредсказуемым последствиям. Как вы уже догадались, подключение к MySQL производится двумя командами: сначала соединяемся с сервером MySQL, потом выбираем используемую базу данных, вот так:
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
@mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");
Переменные, отвечающие за пароль, логин и прочее, лучше задавать отдельно. Собака перед командой означает то, что сообщения об ошибках этой команды не выводятся. Не забудьте потом закрыть соединение с MySQL!
mysql_close();
Вот так. Теперь самое интересное. Как выясняется, вы можете довольно просто манипулировать содержимым базы данных с помощью команды mysql_query. Например, мы создаем простую формочку с полями name, email и password:
<html> <body>
<form action=database.php method=post> Your name:<br> <input type=text name=name><br> Your e-mail:<br> <input type=text name=email><br>> Your password:<br> <input type=password name=password><br> <input type=checkbox name=del> Delete<br> Drop? <input type=text name=drop><br> <input type=submit> </form> </body> </html>
После этого мы должны создать файл database.php, обрабатывающий эти данные. Нетрудно догадаться, что в нем мы будем иметь готовые переменные name, email, password, drop, del, которые и предстоит обработать. Обработка будет заключаться в том, что если галочка "Del" не установлена, то значение в БД добавляется, иначе - удаляются все такие значения (должны полностью соответствовать все три основных поля).
<? $username="mixailo"; $passwd="passwd"; $dbname="clients"; $hostname="localhost";
MYSQL_CONNECT ($hostname, $username, $passwd) or die ("Cannot connect to database...");
@mysql_query("create database clients");
@mysql_select_db($dbname) or die ("cannot select database");
Это обычный выбор базы данных, интереса не представляет. Как известно, при попытке создать в БД таблицу, которая уже существует, сервер выдает ошибку. Поэтому можно довольно легко проверить таблицу на существование, и, если ее нет, создать ее:
mysql_query("create table clients (name varchar(15), email varchar(35), password varchar(15))") or ($err = MYSQL_QUERY("select * from clients") or die ("can't create table"));
Теперь проверяем, отмечена ли галочка del
if (empty($del))
И если она пуста, то добавляем значения в таблицу
{ mysql_query("insert into clients values ('$name', '$email', '$password')") or die ("Cannot insert values"); }
Иначе пытаемся удалить значения, точно соответствующие шаблону:
elseif (!empty($del)) { mysql_query("delete from clients where name='$name' and email='$email' and password='$password'") or die ("Can't delete"); }
Проверяем, написал ли пользователь в поле drop слово "drop", если да - удаляем из БД всю таблицу:
if ($drop=="drop") { MYSQL_QUERY("DROP TABLE clients") or die ("cannot drop"); }
В принципе, теперь осталось только закрыть соединение и написать закрывающий тег ?>, но мы ведь хотим посмотреть, что у нас получилось? Делаем так:
$vopr=mysql_query("select * from clients") or die ("No way. Can't select."); while ($line = mysql_fetch_array ($vopr))
{ print "<hr>"; extract($line); print"$name,$email,$password"; } print "<HR>"; mysql_close();
?>
Вот и все, простая программа манипуляции базой данных готова. Замечу, что восклицательный знак перед функцией означает логическое НЕ, т.е. !empty($line) означает "НЕ (пустая ли переменная $line?)", и будет иметь значение ИСТИНА (TRUE), если $line непустая. Функция extract(аргумент) выделяет из выдачи MySQL, которую мы не можем просто так распечатать, переменные, соответствующие названиям полей в таблице; в нашем случае это $name, $email, $password - так и называются поля в таблице clients.
Mixailo |