Strict Standards: Resource ID#34 used as offset, casting to integer (34) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#36 used as offset, casting to integer (36) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: PHP + MySQL
ТвойWeb » WebMaster класс » PHP/Perl » PHP + MySQL

Страниц (6): [1] 2 3 4 5 6 »
 

1. Systemnik - 11 Марта, 2008 - 08:33:10 - перейти к сообщению
Приветик всем.
/// Удалено by Systemnik тк код неправильный.. ///
2. Furax - 11 Марта, 2008 - 22:07:42 - перейти к сообщению
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).
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).

Спасибо! Растерялся
4. Systemnik - 12 Марта, 2008 - 03:09:29 - перейти к сообщению
Вот выложен поправленный код:

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);
?>


ноль эмоции Огорчение
5. Ray Wen - 12 Марта, 2008 - 04:19:52 - перейти к сообщению
Systemnik
if(count($sql)) - вполне достаточно чтобы узнать нашлось ли... Если там что-нибудь есть, то вернется 1...
6. Systemnik - 12 Марта, 2008 - 05:49:30 - перейти к сообщению
стоп спасибо я все понял а теперь можете поподробне о теории.. этот count()
когда работает где используется только ли в мускуле? Растерялся



CODE:
while($strings = @mysql_fetch_row($sql))
{
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...
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("Данной страницы не существует.");
}


ноль эмоции.. а естати объясните уважаемый Furax что означает
CODE:

" . (int)$_GET['page'] . "

зачем эти точни и что такое (int)???
9. Ray Wen - 12 Марта, 2008 - 10:29:37 - перейти к сообщению
Systemnik
Тут я тебя в заблуждение ввел, привык к запросам через функции 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("Данной страницы не существует.");
}

ноль эмоции

Furax для чего написано
CODE:
" . (int)$_GET['page'] . "

а не
CODE:
"$_GET['page']"

??

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0471]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33