Обрисую ситуацию. Гдето месяц-полтора назад, устав от траты времени на работе по вечерам (работаю на тех поддержке), решил заняться изучением PHP и MySQL. Прикупил 2 учебника "PHP/MySQL для начинающих" и "Самоучитель MySQL 5". Постепенно начал появляться интерес к языку. Поставил себе задачу написать телефонный справочник конторы (телефоны лежат в экселевской таблице), дабы принести пользу конторе, да и самому разобраться как и что работает. С поставленной задачей как-то стимул обучения не пропадает :) .
Установил appserv-win32-2.5.10 (сборка Apache 2.2.8 + PHP 5.2.6 + MySQL 5.0.51b + phpMyAdmin-2.10.3)
Создал базу (пока 4 таблицы)
Дамп базы:
Свернутый текст
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Май 03 2012 г., 13:07
-- Версия сервера: 5.0.51
-- Версия PHP: 5.2.6
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- База данных: `phone`
--
-- --------------------------------------------------------
--
-- Структура таблицы `name`
--
CREATE TABLE `name` (
`id_name` int(3) NOT NULL auto_increment,
`surname` tinytext NOT NULL,
`nphname` tinytext NOT NULL,
`birthday` date default '0000-00-00',
`id_otdel` int(3) NOT NULL,
`id_phone` int(3) NOT NULL,
PRIMARY KEY (`id_name`),
KEY `id_otdel` (`id_otdel`),
KEY `id_phone` (`id_phone`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=164 ;
--
-- Дамп данных таблицы `name`
--
INSERT INTO `name` VALUES (7, 'Фамилия Имя Отчество', '', '0000-00-00', 0, 0);
-- --------------------------------------------------------
--
-- Структура таблицы `otdel`
--
CREATE TABLE `otdel` (
`id_otdel` int(3) NOT NULL auto_increment,
`otdel` tinytext NOT NULL,
`boss` int(11) default NULL,
`id_name` int(3) NOT NULL,
`id_spec` int(3) NOT NULL,
`id_phone` int(3) NOT NULL,
PRIMARY KEY (`id_otdel`),
KEY `it_name` (`id_name`),
KEY `id_spec` (`id_spec`),
KEY `id_phone` (`id_phone`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=17 ;
--
-- Дамп данных таблицы `otdel`
--
INSERT INTO `otdel` VALUES (1, 'Администрация', 0, 0, 0, 0);
INSERT INTO `otdel` VALUES (2, 'Канцелярия', 0, 0, 0, 0);
-- --------------------------------------------------------
--
-- Структура таблицы `phone`
--
CREATE TABLE `phone` (
`id_phone` int(3) NOT NULL auto_increment,
`inphone` int(20) default NULL,
`cityphone` int(20) default NULL,
`mobphone` int(20) default NULL,
`ipphone` int(20) default NULL,
`otherphone` int(20) default NULL,
`email` tinytext,
`skype` tinytext,
`id_name` int(3) NOT NULL,
`id_otdel` int(3) NOT NULL,
`id_spec` int(3) NOT NULL,
PRIMARY KEY (`id_phone`),
KEY `id_name` (`id_name`,`id_otdel`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--
-- Дамп данных таблицы `phone`
--
-- --------------------------------------------------------
--
-- Структура таблицы `spec`
--
CREATE TABLE `spec` (
`id_spec` int(3) NOT NULL auto_increment,
`spec` tinytext NOT NULL,
`id_name` int(3) NOT NULL,
`id_phone` int(3) NOT NULL,
PRIMARY KEY (`id_spec`),
KEY `id_name` (`id_name`),
KEY `id_phone` (`id_phone`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=83 ;
--
-- Дамп данных таблицы `spec`
--
INSERT INTO `spec` VALUES (1, 'Администратор', 0, 0);
INSERT INTO `spec` VALUES (2, 'Администратор системный', 0, 0);
Сверстал по быстрому шаблон сайта на Adobe Dreamweaver CS5.5. (2 колонки)
панель навигации выгладит так:
Свернутый текст
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>телефонный справочник</title>
</head>
<body>
<table width="100%" border="0">
<tr>
<td width="30%" rowspan="3"><img src="pic/logo.gif" width="273" height="56" align="middle"></td>
<td height="45" colspan="2">
<form action="search.php" target="mainFrame" method="post">
<br />
<strong>Поиск: </strong>
<input type="text" name="search" onclick="search.value='';"/>
<input type="submit" name="submit" value="Найти"/>
</form></td>
</tr>
<tr>
<td height="32" colspan="2"><p><strong>Отдел:</strong>
<label for="otdel"></label>
<select name="otdel" id="otdel">
<option>Все</option>
</select>
</td>
</tr>
<tr>
<td width="8%" height="56"><strong>Филиалы:</strong></td>
<td width="62%" valign="middle"><p>Город:
<label for="city"></label>
<select name="city" id="city">
</select>
Юр. лицо
<select name="company" id="company">
</select>
№ Филиала:
<select name="apt" id="apt">
</select>
</p></td>
</tr>
</table>
</body>
</html>
Далее, в нете нашол простенький поиск search.php
Свернутый текст
<?
//Подключаемся к базе
$db=mysql_connect("localhost", "phone", "");
mysql_select_db("phone", $db);
// Обрабатываем полученные данные из формы
if(isset($_POST["search"])and($_POST["search"]!=='')){
$search=$_POST["search"];
$search=trim($search);
$search=htmlspecialchars($search);
$search=stripslashes($search);
if(strlen($search)>=4){
//Вытаскиваем из базы всё по этому запросу
$result=mysql_query("SELECT surname FROM name WHERE MATCH (text) AGAINST ($search)");
$myrow=mysql_fetch_array($result);
//Если что-то есть, то выводим
if(!empty($myrow["id"])){
echo $myrow["title"]."<br />".$myrow["description"]."<br /><br />";
}else{
die("По Вашему запросу ни чего не найдено");
}
}else{
die("Длина текста должна быть не менее четырёх символов");
}
}else{
die("Вы не ввели данные для поиска");
}
?>
На данный момент при запуске поиска выдет ошибку:
"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\AppServ\www\phone\search.php on line 14"
Возможно, что для написания такого телефонного справочника не нужен ни MySQL ни PHP, но задачу поставил именно для того, чтобы с пользой изучить язык. Буду очень сильно признателен, если поможете поднатаскаться в нем. :) Мне это интерестно, но часто тупиковые ситуации раздражают. А помощи могу попросить только тут, так как рядом гуру php не нашол :(.
Спустя 2 минуты, 19 секунд (3.05.2012 - 13:55) Nikitian написал(а):
После запроса сделайте echo mysql_error();
У вас ошибка в запросе.
У вас ошибка в запросе.
Спустя 29 минут, 17 секунд (3.05.2012 - 14:24) YADikby написал(а):
Вставил, после mysql_fetch_array():
Вот такая ошибка появляется:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�амилия)' at line 1
Когда поставил одинарнык кавычки в строке "$result=mysql_query("SELECT 'surname' FROM 'name' WHERE MATCH (text) AGAINST ($search)");" Вышло вот что.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''name' WHERE MATCH (text) AGAINST (Фамилия)' at line 1
Для поиска использую "Фамилия".
Вот такая ошибка появляется:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�амилия)' at line 1
Когда поставил одинарнык кавычки в строке "$result=mysql_query("SELECT 'surname' FROM 'name' WHERE MATCH (text) AGAINST ($search)");" Вышло вот что.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''name' WHERE MATCH (text) AGAINST (Фамилия)' at line 1
Для поиска использую "Фамилия".
Спустя 5 минут, 5 секунд (3.05.2012 - 14:29) T1grOK написал(а):
$result=mysql_query("SELECT `surname` FROM `name` WHERE MATCH (`text`) AGAINST ('{$search}')
имена полей "закавычиваются" апострофами(там где буква ё(или тильда ~)), а значения одинарными кавычками.
Спустя 4 часа, 23 минуты, 11 секунд (3.05.2012 - 18:53) YADikby написал(а):
Цитата (T1grOK @ 3.05.2012 - 12:29) |
имена полей "закавычиваются" апострофами(там где буква ё(или тильда ~)), а значения одинарными кавычками. |
А можете поподробнее?
Делаю, как Вы написали, но чет не помагает :(
Указанная строка
$result=mysql_query("SELECT `surname` FROM `name` WHERE MATCH (`text`) AGAINST ('{$search}')
воспринимается как ошибка, до конца кода.
Срабатывает только когда правлю на
$result=mysql_query("SELECT surname FROM name WHERE MATCH (`text`) AGAINST ('{$search}')");
выдает
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\AppServ\www\phone\search.php on line 15
Unknown column 'text' in 'where clause'По Вашему запросу ни чего не найдено
И {$search} подсвечивается красным, не синим.
Спустя 13 часов, 24 минуты, 35 секунд (4.05.2012 - 08:17) T1grOK написал(а):
Unknown column 'text' in 'where clause'
Дают же ясно понять "Неизвестное поле text". Такое поле в таблице name вообще есть? И создан ли для него полнотекстовый индекс?
Дают же ясно понять "Неизвестное поле text". Такое поле в таблице name вообще есть? И создан ли для него полнотекстовый индекс?
Спустя 3 часа, 57 минут, 24 секунды (4.05.2012 - 12:15) YADikby написал(а):
Поле заменил, полнотекстовый индекс поставил. Спасибо!
Теперь при зрабатывании ошибок не выдает, но ничего и не ищет Через phpmyadmin заполненные поля показывает корректно, но в коммандной строке при комманде SELECT surname FROM name; данные выводит краказябами.
Теперь при зрабатывании ошибок не выдает, но ничего и не ищет Через phpmyadmin заполненные поля показывает корректно, но в коммандной строке при комманде SELECT surname FROM name; данные выводит краказябами.