Поиск пропавших котов — сценарий

Сохранение сообщений в базе данных

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

Для этих целей используется база данных MySQL. И ваша задача — сохранить сообщение в базе данных. База данных MySQL представляет собой набор таблиц, в колонках и рядах которых хранятся данные определённым образом. Удобство баз данных заключается в том, что мы можем извлечь информацию по определённому критерию, например, получить сообщения за прошедшую неделю или только сообщения от пользователей по имени Васька и т.д. Таким образом вы можете анализировать данные.

В большинстве случаев для работы с базами данных MySQL используют популярную программу phpMyAdmin, которая также написана на PHP.

Многие хостинговые компании используют именно эту утилиту для работы с базами данных, поэтому мы тоже будем использовать её. О том, как подключиться к phpMyAdmin, узнавайте у вашего хостера.

Чтобы ввести SQL-запрос в phpMyAdmin, нужно нажать сначала кнопку SQL и в текстовом поле ввести команду. Чтобы выполнить запрос, нужно нажать кнопку OK.

Но мы не будем вводить запросы вручную, так как все необходимые команды будет выполнять PHP-код.

Чтобы вставить новые данные в таблицу базы данных, используется команда INSERT INTO:

INSERT INTO имя_таблицы (имя_колонки1, имя_колонки2, . ) VALUES ('значение1', 'значение2', . )

Ключевое слово INSERT INTO сообщает, что мы собираемся вставить данные.

Читайте также:  Python numpy array создать

Далее идёт имя таблицы, в которую нужно вставить данные.

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

После идёт ключевое слово VALUES, которое сообщает, что далее последует список значений для колонок.

И, наконец, в скобках идёт список данных через запятую, которые нужно вставить в колонки. Количество данных должно совпадать с количеством колонок. А также важен порядок. Первые данные попадут в первую колонку и т.д.

Таблица для сохранения сообщений с сайта может выглядеть следующим образом:

first_name last_name when email msg

Тогда запрос можно составить таким образом:

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

Создадим таблицу в соответствии с скриптом:

 CREATE TABLE `abduction` ( `first_name` VARCHAR(30), `last_name` VARCHAR(30), `when` VARCHAR(30), `email` VARCHAR(30), `msg` VARCHAR(30) ); 

Теперь мы можем вручную добавлять данные в таблицу при помощи команды INSERT INTO. Но это не совсем удобно. Нужна автоматизация. PHP позволяет самостоятельно добавлять данные в базу данных, когда пользователь будет заполнять форму.

Осуществление MySQL-запроса с помощью РНР-сценария требует от вас:

  1. установки соединения с базой данных
  2. создания запроса в виде РНР-строки. Он не будет выполнен до тех пор, пока вы не отправите его на сервер баз данных
  3. закрытия соединения после того, как вы завершите выполнение всех запросов к базе данных

Существуют три основные РНР-функции, используемые для обмена информацией с базой данных MySQL:

Кстати, существуют старые функции с префиксом mysql_, которые не следует использовать. Буква i обозначает «улучшенный» (improved).

Функция mysqli_connect() открывает соединение с базой данных MySQL, используя информацию, содержащуюся в четырех параметрах. Укажите адрес размещения сервера (1), имя пользователя (2) и его пароль (3), а также имя базы данных, так как соединение осуществляется с конкретной базой. Как правило, первые три параметра выдаются хостером. Имя базы данных можно задать самостоятельно или тоже выдаётся хостером. Все параметры являются строками и их следует заключить в кавычки. Существует аналогичная функция с первыми тремя параметрами без указания имени базы данных в четвёртом. В этом случае вы можете указать имя базы данных в функции mysqli_select().

Функция mysqli_query() осуществляет запрос к базе данных MySQL (добавление или извлечение данных). Очень часто для имени переменной используют $query.

Сам запрос в методе mysqli_query() может быть очень длинным. Для удобства строку можно разбить для большей читаемости на несколько маленьких строк. Для склейки строк в PHP используется символ точки (.).

Функция mysqli_close() закрывает соединение с базой данных. Если вы не закроете соединение, то ничего страшного не произойдёт. Но сервер баз данных позволяет иметь несколько соединений, работающих одновременно. И при сложном проекте незакрытые соединения, которые вам больше не нужны, будут вызывать тормоза.

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

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

Код будет выглядеть следующим образом (для файла report.php).

       

Сообщения о поиске моего кота

Сообщение будет добавлено в базу данных

'; echo 'Кота похитили ' . $when . '
'; echo 'Похитители: ' . $description . '
'; echo 'Ваш email: ' . $email; $db = mysqli_connect('hosting.com', 'tehnolog', 'qwerty', 'mydatabase') or die('Error in established MySQL-server connect'); $query = "INSERT INTO abduction (first_name, last_name, email, date, msg) VALUES ('$first_name', '$last_name', '$email', '$when', '$description')"; $result = mysqli_query($db, $query) or die ('Error in query to database'); mysqli_close($db); ?>

Неожиданно встретился с проблемой, когда сценарий не работал. Оказалось, что столбец when конфликтует с ключевым словом when и код не выполнялся. Я заменил имя столбца на date. Строго говоря, это имя тоже является ключевым словом, но почему-то это сработало. Возможно, это из-за особенностей конкретного хостера и его настроек. Но в любом случае лучще давать столбцам таблицы имена, которые не будут совпадать с ключевыми словами воз избежание недоразумений.

Источник

От инфо-окна к БД: сохраняем информацию, введенную пользователем

Кросс-пост четвертого перевода туториалов по Google Maps из моего блога. В нем рассказывается о добавлении пользователем информации при помощи инфо-окна.

Эта третья статья, в которой мы будем пользоваться связкой из PHP и MySQL совместно с Google Maps API. Если Вы PHP-разработчик, то Вас могут заинтересовать две предыдущие статьи, в которых мы загружали маркеры из БД и создавали KML-файл.

Введение

Создание таблицы БД

picture

Когда создаете таблицу, прежде всего, Вы должны уделить внимание параметрам lat (широта) и lng (долгота) карты. При текущей разрешающей способности Google Maps нам понадобятся только 6 цифр после десятичного знака. Чтобы свести дисковое пространство, занимаемое БД к минимуму, для значений lat (широты) и lng (долготы) рекомендуется выбрать тип данных FLOAT с параметром 10,6. Этот тип позволяет хранить до 6-ти знаков после запятой и до 4-х перед запятой, например -123,456789 градуса. Ваша таблица должна иметь поле id, которое будет первичным ключом для доступа к записям, а также – поле type, в котором будет записан тип заведения (ресторан или бар).
Если Вы предпочитаете создавать таблицы в БД с помощью phpMyAdmin, то ниже расположен скриншот создания таблицы:

Если же Вы не имеете доступ к phpMyAdmin или отдаете предпочтение чистому SQL, то ниже приведен код SQL-запроса:

CREATE TABLE `markers` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR ( 60 ) NOT NULL ,
`address` VARCHAR ( 80 ) NOT NULL ,
`lat` FLOAT ( 10, 6 ) NOT NULL ,
`lng` FLOAT ( 10, 6 ) NOT NULL ,
`type` VARCHAR ( 30 ) NOT NULL
) ENGINE = MYISAM ;

Добавление информации в БД при помощи PHP

На этом шаге Вы должны заполнить пустую таблицу, которая называется markers . Для этого нужно написать небольшой код на PHP, при выполнении которого информация, помещенная в URL, будет записываться как строка в БД. Используемые функции должны работать как в PHP4, так и в PHP5. Если же Вы никогда не писали на PHP код, при выполнении которого происходит подключение к БД, то посетите php.net и почиатйте о функциях mysql_connect , mysql_select_db , my_sql_query , и mysql_error .
Во-первых, вынесем всю информацию о подключении к БД в отдельный файл. Ниже приведен PHP-код, в котором Вы должны прописать собственные имя пользователя, пароль и имя БД:
$username=»username»;
$password=»password»;
$database=»username-databaseName»;
?>
Теперь приступим к коду, при выполнении которого в таблицу БД будет добавляться строка с данными. Первая часть этого кода будет отвечать за выбор нужной информации из URL, а вторая – за подключение к БД и передачу в нее полученной информации с помощью запроса INSERT INTO . Если же в процессе обработки или отправки этих данных произойдут какие-нибудь ошибки, то на экран выведется сообщение, которое поможет Вам узнать, в чем проблема. Чтобы проверить правильность работы скрипта необходимо в URL добавить следующие параметры ( name= , address= , lat= , lng= , type= ): http://www.yoursite.com/?name=Best%20Bar%20Ever&address=123%20Main%20St&lat=-37.12345&lng=122.12345&type=bar.
Если на экран не было выведено сообщений об ошибке, то скрипт работает правильно. Только не забудьте удалить из таблицы БД строки, которыми Вы проверяли работоспособность скрипта.
А вот и код:
require(«phpsqlinfo_dbinfo.php»);

// Получаем данные из параметров URL
$name = $_GET[‘name’];
$address = $_GET[‘address’];
$lat = $_GET[‘lat’];
$lng = $_GET[‘lng’];
$type = $_GET[‘type’];

// Соединяемся с сервером MySQL
$connection=mysql_connect («localhost», $username, $password);
if (!$connection) die(‘Нет соединения : ‘ . mysql_error());
>

// Выбираем БД, с которой будем работать
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) die (‘Невозможно использовать БД : ‘ . mysql_error());
>

// Вставляем пользовательские данные
$query = sprintf(«INSERT INTO markers » .
» (id, name, address, lat, lng, type ) » .
» VALUES (NULL, ‘%s’, ‘%s’, ‘%s’, ‘%s’, ‘%s’);»,
mysql_real_escape_string($name),
mysql_real_escape_string($address),
mysql_real_escape_string($lat),
mysql_real_escape_string($lng),
mysql_real_escape_string($type));

if (!$result) die(‘Неверный запрос: ‘ . mysql_error());
>

Создание карты и пользовательского интерфейса

Теперь, когда весь серверный код у нас готов, приступим к созданию самой карты. Если Вы никогда не работали с Google Maps API, то изучите, пожалуйста, основы.

Создаем маркеры и инфо-окна
После создания и отцентровки карты, Вы можете добавить события, которые будут происходить при клике мышкой по карте. Функция, которая будет выполняться при клике, будет создавать маркер по координатами щелчка и будет устанавливать свойство перетаскивания маркера в » true «. Затем, при клике по самому маркеру, будет открываться инфо-окно. В этом окне будет содержаться HTML-форма с полями для заполнения, выпадающим списком и кнопкой «Save». Каждый элемент нашей формы будет иметь атрибут id , и, когда мы кликнем по кнопке «Save», сработает функция saveData , описанная ниже.

  • Сохранять значения координат маркера и значения заполненных полей формы;
  • Конструировать URL;
  • Помещать новый URL в качестве первого параметра функции GDownloadUrl ;
  • Проверять, что статус-код, возвращенный функцией GDowloadUrl , равен 200. Это означает, что все данные были успешно переданы;
  • Проверять длину получившейся строки с данными. Если все нормально, то будет выводится сообщение о том, что информация добавлена.

function initialize() if (GBrowserIsCompatible()) var map = new GMap2( document .getElementById( «map_canvas» ));
map.setCenter( new GLatLng(37.4419, -122.1419), 13);

function saveData() var name = escape( document .getElementById( «name» ).value);
var address = escape( document .getElementById( «address» ).value);
var type = document .getElementById( «type» ).value;
var latlng = marker.getLatLng();
var lat = latlng.lat();
var lng = latlng.lng();

picture

  • Пусть пользователи рисуют многоугольники на Вашей карте, отмечая тем самым какие-либо регионы. Об этом будет рассказано в других уроках;
  • Пользователи могут ставить оценки понравившимся местам на карте;
  • Можно выводить всю пользовательскую информацию на карту.

Источник

Оцените статью