Приветик всем.
/// Удалено by Systemnik тк код неправильный.. ///
1. Systemnik - 11 Марта, 2008 - 08:33:10 - перейти к сообщению
2. Furax - 11 Марта, 2008 - 22:07:42 - перейти к сообщению
Systemnik
Первое. Что за дебильные имена столбцов БД? Почему нельзя заюзать нормальные слова (id, title, text)?
Второе. Не в коем случае нельзя загружать всё из базы данных в PHP-скрипт и средствами PHP производить фильтрацию! Во-первых, когда у тебя будет несколько тысяч записей, всё станет страшно тормозить; во-вторых, теряются все преимущества от использования базы данных; в третьих, лишний трафик между PHP-машиной и сервером MySQL; и т. д. и т. д. и т. д.
Запрос нужно делать так:
Третье.У тебя для каждой полученной строки из базы выполняется проверка, и в случае неудачи выводится сообщение "404 - нет такой записи в бд". Соответственно, когда у тебя будет 10 000 записей, будет 9 999 раз написано "404" и только один - то, что надо. Причина? См. второй пункт. Извлекай из базы только то, что действительно нужно использовать. Вместо твоего условия должна быть проверка на то, извлеклось ли хоть что-то (mysql_num_rows($sql) != 0).
Червёртое.
Это всё были общеидейные замечания. А ошибка в твоём случае в том, что данные извлекаются в переменную $strings (строка 14), а проверяется значение переменной $tablerows (строки 16, 18).
Первое. Что за дебильные имена столбцов БД? Почему нельзя заюзать нормальные слова (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).
3. Systemnik - 12 Марта, 2008 - 02:56:19 - перейти к сообщению
Цитата:
Первое. Что за дебильные имена столбцов БД? Почему нельзя заюзать нормальные слова (id, title, text)?
Заюзаю это просто первый раз пишу для теста..
Цитата:
Второе. Не в коем случае нельзя загружать всё из базы данных в PHP-скрипт и средствами PHP производить фильтрацию! Во-первых, когда у тебя будет несколько тысяч записей, всё станет страшно тормозить; во-вторых, теряются все преимущества от использования базы данных; в третьих, лишний трафик между PHP-машиной и сервером MySQL; и т. д. и т. д. и т. д.
Кажется я понял в каком случае я буду использовать мой ариант...
при построении таблицы!
Цитата:
Третье.У тебя для каждой полученной строки из базы выполняется проверка, и в случае неудачи выводится сообщение "404 - нет такой записи в бд". Соответственно, когда у тебя будет 10 000 записей, будет 9 999 раз написано "404" и только один - то, что надо. Причина? См. второй пункт. Извлекай из базы только то, что действительно нужно использовать. Вместо твоего условия должна быть проверка на то, извлеклось ли хоть что-то (mysql_num_rows($sql) != 0).
Да точно так.. я уже увидел.
Цитата:
Червёртое.
Это всё были общеидейные замечания. А ошибка в твоём случае в том, что данные извлекаются в переменную $strings (строка 14), а проверяется значение переменной $tablerows (строки 16, 18).
Это всё были общеидейные замечания. А ошибка в твоём случае в том, что данные извлекаются в переменную $strings (строка 14), а проверяется значение переменной $tablerows (строки 16, 18).
Спасибо!
4. Systemnik - 12 Марта, 2008 - 03:09:29 - перейти к сообщению
Вот выложен поправленный код:
Вот поправленый дамп:
У меня остались неболшие вопросы.. теперь как сделать так.. что бы если в бд нужной информации не находилось выскакивал текст 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))
{
echo($strings[1]);
}
@mysql_close($db);
?>
// Информация для досутпа к бд 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');
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);
?>
// Информация для досутпа к бд 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);
?>
ноль эмоции
5. Ray Wen - 12 Марта, 2008 - 04:19:52 - перейти к сообщению
Systemnik
if(count($sql)) - вполне достаточно чтобы узнать нашлось ли... Если там что-нибудь есть, то вернется 1...
if(count($sql)) - вполне достаточно чтобы узнать нашлось ли... Если там что-нибудь есть, то вернется 1...
6. Systemnik - 12 Марта, 2008 - 05:49:30 - перейти к сообщению
стоп спасибо я все понял а теперь можете поподробне о теории.. этот count()
когда работает где используется только ли в мускуле?
ноль эмоции.. я пробовал 1 и true все равно true=1 false=0
когда работает где используется только ли в мускуле?
CODE:
while($strings = @mysql_fetch_row($sql))
{
if(count($sql) == true)
{
echo($strings[1]);
} else {
echo("Данной страницы не существует.");
}
}
{
if(count($sql) == true)
{
echo($strings[1]);
} else {
echo("Данной страницы не существует.");
}
}
ноль эмоции.. я пробовал 1 и true все равно true=1 false=0
7. Ray Wen - 12 Марта, 2008 - 06:13:39 - перейти к сообщению
Systemnik
Где ты видел в моем примере == true ???!
http://ru2.php.net/manual/ru/function.count.php
В условии любое значение не равное 0 является true...
В данном случае можешь вообще создать условие if(mysql_num_rows($sql)) (без всяких while, вообще не пойму к чему это здесь), а потом уже если есть строка, то работать с ней, если нету, то else...
Где ты видел в моем примере == true ???!
http://ru2.php.net/manual/ru/function.count.php
В условии любое значение не равное 0 является true...
В данном случае можешь вообще создать условие if(mysql_num_rows($sql)) (без всяких while, вообще не пойму к чему это здесь), а потом уже если есть строка, то работать с ней, если нету, то else...
8. Systemnik - 12 Марта, 2008 - 09:21:38 - перейти к сообщению
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("Данной страницы не существует.");
}
$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)$_GET['page'] . "
зачем эти точни и что такое (int)???
9. Ray Wen - 12 Марта, 2008 - 10:29:37 - перейти к сообщению
Systemnik
Тут я тебя в заблуждение ввел, привык к запросам через функции Joomla, а там результат сразу возвращается... count($strings) в твоем случае...
Тут я тебя в заблуждение ввел, привык к запросам через функции Joomla, а там результат сразу возвращается... count($strings) в твоем случае...
10. Systemnik - 12 Марта, 2008 - 10:34:24 - перейти к сообщению
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("Данной страницы не существует.");
}
$strings = @mysql_fetch_row($sql);
if(count($strings))
{
echo($strings[1]);
} else {
echo("Данной страницы не существует.");
}
ноль эмоции
Furax для чего написано
CODE:
" . (int)$_GET['page'] . "
а не
CODE:
"$_GET['page']"
??