Дорогие друзья, хотелось бы сделать небольшое отступление и поздравить Вас всех с наступающим Новым Годом! Надеюсь, в следующем, 2014 году, каждый сможет осуществить свои задуманные мечты и превратить их в реальность! Ну, а теперь перейдем к теме сегодняшнего урока, это PHP передача параметров GET через адресную строку. Тема скорее всего для начинающих веб программистов, думаю будет очень полезна, ведь в дальнейшем, могу сказать со сто процентной вероятностью, она Вам ни раз еще пригодится! Данную передачу GET параметров Вы можете наблюдать и на нашем сайте и практически на любом другом, когда в адресную строку подставляются параметры. Есть и другие уроки, например, постраничная навигация, в которой тоже используется передача параметров GET посредством PHP в адресную строку после перехода. Так же похож еще урок добавление и удаление полей, можете посмотреть и увидите такой же просто передачи параметров.
Для начала, давайте создадим базу данных get с привилегиями логин - "root", пароль - "".
В ней будут храниться три таблицы, а именно materials - таблица с материалами, cat - таблица с категориями материалов и author - таблица с авторами материалов.
-- -- Table structure for table `materials` -- CREATE TABLE IF NOT EXISTS `materials` ( `id` int(10) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `cat` int(5) NOT NULL, `author` int(5) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ; -- -- Dumping data for table `materials` -- INSERT INTO `materials` (`id`, `title`, `cat`, `author`) VALUES (1, 'Volvo', 1, 2), (2, 'Apple', 2, 1), (3, 'Mercedes', 1, 1), (4, 'Microsoft', 2, 2);
-- -- Table structure for table `cat` -- CREATE TABLE IF NOT EXISTS `cat` ( `id` int(5) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ; -- -- Dumping data for table `cat` -- INSERT INTO `cat` (`id`, `title`) VALUES (1, 'Машины'), (2, 'Компьютеры');
-- -- Table structure for table `author` -- CREATE TABLE IF NOT EXISTS `author` ( `id` int(5) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ; -- -- Dumping data for table `author` -- INSERT INTO `author` (`id`, `title`) VALUES (1, 'Роман'), (2, 'Евгений');
С таблицами мы завершили, теперь перейдем к понимаю принципу реализации передачи GET параметров через адресную строку. Допустим, у нас есть таблица с материалами, у каждого материала есть свой идентификатор id, который имеет название title, категорию cat и автора author. Последние два поля хранятся, в соответствии, с идентификаторами других таблиц cat и author. У таблиц cat и author есть два поля идентификатор id и название title.
Теперь суть в чем, если мы допустим, судя по выше написанным дампам и структурам MySQL каждой таблицы, наберем такую строчку в адресной строке http://сайт.домен/index.php?id=2&cat=2&author=1, то получим полнейшее совпадение и взаимодействие трех таблиц, а именно то, что мы набрали: index.php - файл, ? - знак вопроса, после которого можно прописывать параметры get, id=2 - открываем материал с идентификатором 2 из таблицы materials, а именно Apple, & - обозначение идет как "и", то есть после него еще следуют какой то параметр, cat=2 - открываем категорию с идентификатором 2 из таблицы cat, а именно Компьютеры, далее опять идет "и" &, после которого последний параметр, author=1 - передаем автора с идентификатором 1 из таблицы author, а именно Роман.
"Теперь, что же у нас получилось: Открываем файл index.php в котором идентификатор материалов равен одному и имеет название Apple, категория у него Компьютеры и автор материала Роман." Переходим к коду и для начала подключимся к базе данных.
/* Подключение к базе данных get, с логином "root" и пустым паролем ""*/ $db = mysql_connect ("localhost", "root", ""); mysql_select_db ("get", $db); /* Проверка соединения */ if (!$db) echo mysql_error();
Делаем запрос к таблицам и получаем нужные параметры.
/* Устанавливаем запрос к таблице materials и выбираем все поля */ $sql = mysql_query("select id, title, cat, author from materials"); $res = mysql_fetch_array($sql); do { /* Выводи ссылку с передаваемыми параметрами id - материала, категории и автора, а также название материала*/ echo"<a href='index.php?id=$res[id]&cat=$res[cat]&author=$res[author]'>$res[title]</a>"; } while($res = mysql_fetch_array($sql)); /* Проверка на глобальные переменные: материала, категории и автора */ if (isset ($_GET['id'])) {$id=$_GET['id']; } if (!isset($id)) {$id==1;} if (isset ($_GET['cat'])) {$cat=$_GET['cat']; } if (!isset($cat)) {$cat==1;} if (isset ($_GET['author'])) {$author=$_GET['author']; } if (!isset($author)) {$author==1;} /* Устанавливаем запрос к таблице материалы и выводим оттуда все поля, а также взаимодействии с другими таблицами выводим названии категории и авторов, после устанавливаем условие, где id=$id - глобальное переменной материалов и проделываем тоже самое для других параметров и переменных таблицы cat и author */ $sql_get = mysql_query("select materials.id, materials.title, (select cat.title from cat where cat.id=materials.cat) as cat, (select author.title from author where author.id=materials.author) as author from materials where id=$id and cat=$cat and author=$author"); @$res_get = mysql_fetch_array($sql_get); do { /* Выводим материал, категорию и автора */ echo" <strong>$res_get[title]</strong><br> <strong>Категория: </strong>$res_get[cat]<br> <strong>Автор: </strong>$res_get[author]"; } while(@$res_get = mysql_fetch_array($sql_get));
Большое спасибо Вам за внимание, еще раз с наступающим Новым Годом, всего наилучшего! Удачи!