Без описания |
Поиск в теме | Версия для печати |
Furax |
Отправлено: 11 Марта, 2008 - 22:07:42
|
Бледнотик
Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007
Откуда: Иркутск, Сибирь, СССР
Карма 32
|
Systemnik
Первое. Что за дебильные имена столбцов БД? Почему нельзя заюзать нормальные слова (id, title, text)?
Второе. Не в коем случае нельзя загружать всё из базы данных в PHP-скрипт и средствами PHP производить фильтрацию! Во-первых, когда у тебя будет несколько тысяч записей, всё станет страшно тормозить; во-вторых, теряются все преимущества от использования базы данных; в третьих, лишний трафик между PHP-машиной и сервером MySQL; и т. д. и т. д. и т. д.
Запрос нужно делать так:CODE:$sql = @mysql_query("SELECT * FROM x_name WHERE `$11` = " . (int)$_GET['page'] . " LIMIT 1")
Третье.У тебя для каждой полученной строки из базы выполняется проверка, и в случае неудачи выводится сообщение "404 - нет такой записи в бд". Соответственно, когда у тебя будет 10 000 записей, будет 9 999 раз написано "404" и только один - то, что надо. Причина? См. второй пункт. Извлекай из базы только то, что действительно нужно использовать. Вместо твоего условия должна быть проверка на то, извлеклось ли хоть что-то (mysql_num_rows($sql) != 0).
Червёртое.
Это всё были общеидейные замечания. А ошибка в твоём случае в том, что данные извлекаются в переменную $strings (строка 14), а проверяется значение переменной $tablerows (строки 16, 18). |
|
|
Systemnik |
Отправлено: 12 Марта, 2008 - 02:56:19
|
ExBB Developer Team
Покинул форум
Сообщений всего: 778
Дата рег-ции: Дек. 2007
Карма 0
|
Цитата:Первое. Что за дебильные имена столбцов БД? Почему нельзя заюзать нормальные слова (id, title, text)?
Заюзаю это просто первый раз пишу для теста..
Цитата:Второе. Не в коем случае нельзя загружать всё из базы данных в PHP-скрипт и средствами PHP производить фильтрацию! Во-первых, когда у тебя будет несколько тысяч записей, всё станет страшно тормозить; во-вторых, теряются все преимущества от использования базы данных; в третьих, лишний трафик между PHP-машиной и сервером MySQL; и т. д. и т. д. и т. д.
Кажется я понял в каком случае я буду использовать мой ариант...
при построении таблицы!
Цитата:Третье.У тебя для каждой полученной строки из базы выполняется проверка, и в случае неудачи выводится сообщение "404 - нет такой записи в бд". Соответственно, когда у тебя будет 10 000 записей, будет 9 999 раз написано "404" и только один - то, что надо. Причина? См. второй пункт. Извлекай из базы только то, что действительно нужно использовать. Вместо твоего условия должна быть проверка на то, извлеклось ли хоть что-то (mysql_num_rows($sql) != 0).
Да точно так.. я уже увидел.
Цитата:Червёртое.
Это всё были общеидейные замечания. А ошибка в твоём случае в том, что данные извлекаются в переменную $strings (строка 14), а проверяется значение переменной $tablerows (строки 16, 18).
Спасибо! |
|
|
Systemnik |
Отправлено: 12 Марта, 2008 - 03:09:29
|
ExBB Developer Team
Покинул форум
Сообщений всего: 778
Дата рег-ции: Дек. 2007
Карма 0
|
Вот выложен поправленный код:
CODE:<?php
// Информация для досутпа к бд MySQL
$dbserver = "localhost"; // Имя сервера
$dbuser = "$$$$"; // Имя пользователя
$dbpasswd = "$$$$$"; // Пароль
$dbname = "$$$$$"; // Имя базы данных
// Основые запросы для начала работы с бд
@mysql_connect($dbserver,$dbuser,$dbpasswd);
@mysql_select_db($dbname);
// Работа с генерацией страницы засчет базы данных
$sql = @mysql_query("SELECT * FROM site_stranichki WHERE `id` = " . (int)$_GET['page'] . " LIMIT 1");
while($strings = @mysql_fetch_row($sql))
{
echo($strings[1]);
}
@mysql_close($db);
?>
Вот поправленый дамп:
CODE:
CREATE TABLE IF NOT EXISTS `site_stranichki` (
`id` char(1) NOT NULL default '',
`title` text NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
INSERT INTO `site_stranichki` (`id`, `title`, `text`) VALUES
('1', 'Chetatam 1', 'Polnii text'),
('2', 'Chetatam 2', 'Polnii text 2');
У меня остались неболшие вопросы.. теперь как сделать так.. что бы если в бд нужной информации не находилось выскакивал текст 404 не найдено
Кстати пробовал так:
CODE:<?php
// Информация для досутпа к бд MySQL
$dbserver = "localhost"; // Имя сервера
$dbuser = "$$$$"; // Имя пользователя
$dbpasswd = "$$$$$"; // Пароль
$dbname = "$$$$$"; // Имя базы данных
// Основые запросы для начала работы с бд
@mysql_connect($dbserver,$dbuser,$dbpasswd);
@mysql_select_db($dbname);
// Работа с генерацией страницы засчет базы данных
$sql = @mysql_query("SELECT * FROM site_stranichki WHERE `id` = " . (int)$_GET['page'] . " LIMIT 1");
while($strings = @mysql_fetch_row($sql))
{
if($_GET['page'] == $strings[0])
{
echo($strings[1]);
} else {
echo("Данной страницы не существует.");
}
}
@mysql_close($db);
?>
ноль эмоции (Отредактировано автором: 12 Марта, 2008 - 03:16:06) |
|
|
Systemnik |
Отправлено: 12 Марта, 2008 - 09:21:38
|
ExBB Developer Team
Покинул форум
Сообщений всего: 778
Дата рег-ции: Дек. 2007
Карма 0
|
Ray Wen пишет:Где ты видел в моем примере == true ???!
Смотрите, вы сказали:
Ray Wen пишет:if(count($sql)) - вполне достаточно чтобы узнать нашлось ли... Если там что-нибудь есть, то вернется 1...
Следовательно если возвращаемое значение 1 = true то функция выполнилась успешно вот я и проверяю
Systemnik пишет:if(count($sql) == true)
... простите если что не так понял.. я начинающий программер.. многово незнаю
Вот так сделал понял почему тут ненадо while
CODE:// Работа с генерацией страницы засчет базы данных
$sql = @mysql_query("SELECT * FROM site_stranichki WHERE `id` = " . (int)$_GET['page'] . " LIMIT 1");
$strings = @mysql_fetch_row($sql);
if(count($sql))
{
echo($strings[1]);
} else {
echo("Данной страницы не существует.");
}
ноль эмоции.. а естати объясните уважаемый Furax что означает
CODE:
" . (int)$_GET['page'] . "
зачем эти точни и что такое (int)???(Отредактировано автором: 12 Марта, 2008 - 09:22:31) |
|
|
Systemnik |
Отправлено: 12 Марта, 2008 - 10:34:24
|
ExBB Developer Team
Покинул форум
Сообщений всего: 778
Дата рег-ции: Дек. 2007
Карма 0
|
CODE:$sql = @mysql_query("SELECT * FROM site_stranichki WHERE `id` = " . (int)$_GET['page'] . " LIMIT 1");
$strings = @mysql_fetch_row($sql);
if(count($strings))
{
echo($strings[1]);
} else {
echo("Данной страницы не существует.");
}
ноль эмоции
Furax для чего написано
CODE:" . (int)$_GET['page'] . "
а не
??(Отредактировано автором: 12 Марта, 2008 - 10:37:41) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (6): [1] 2 3 4 5 6 » |
Сейчас эту тему просматривают: 5 (гостей: 5, зарегистрированных: 0, скрытых: 0) |
« PHP/Perl » |
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
|
|
|