Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка в справочнике мускула, или я что то не верно делаю!
 
 автор: Diablo_   (07.12.2006 в 12:30)   письмо автору
 
 

Добрый день. У меня есть скрипт для счётчика просмотра (какое кол-во раз посмотрели статью). Выглядит он вот так:

<?
$my
->sql_query="select * from path where id='".@$_REQUEST['id']."'";
$my->sql_execute();
$coun_num='0';
if (@
mysql_num_rows($my->sql_res)!=0)
{
while (
$element1 mysql_fetch_array($my->sql_res)) {
        
$coun_num=$element1['counts'];
        
$coun_num++;
        
$keys=$element1['keys'];
        
$my->sql_query="Update  `path` set `counts`='".$coun_num."' where `keys`='".$keys."'";
        
$my->sql_execute();
    }    
}
?>

Работает на уро и без ошибок, всё счетает, каждый клик.
Прочитал на сайте мускула, что можно оптимизировать подобный код, вот таким образом:

<?
$my
->sql_query="select * from path where id='".addslashes(htmlspecialchars(@$_REQUEST['id']))."'";
$my->sql_execute();
if (@
mysql_num_rows($my->sql_res)!=0)
{
while (
$element1 mysql_fetch_array($my->sql_res)) {
        
$keys=$element1['keys'];
    }    
        
$my->sql_query="Update  `path` set counts=counts+1 where `keys`='".$keys."'";
        
$my->sql_execute();    
}
?>

Мол подобный вид, будет намного быстрее! На счёт скорости, сказать не могу, но вот точто он перестал считать половину кликов, это точно!
В чём косяк?

   
 
 автор: Serrrgio   (07.12.2006 в 12:59)
 
   для: Diablo_   (07.12.2006 в 12:30)
 

нужно почитать про безопасные запросы в мускул, про htmlspecialchars и addslashes, последние тут вообще не нужны.

если поле id в таблице path уникальное, то ваша задача решается в 2 строчки:

$my->sql_query="UPDATE path SET counts=counts+1 WHERE id='".intval(@$_REQUEST['id'])."'"; 
$my->sql_execute();

   
 
 автор: Diablo_   (07.12.2006 в 13:03)   письмо автору
 
   для: Serrrgio   (07.12.2006 в 12:59)
 

поле id, не уникальное!
А вот keys да уникум

   
 
 автор: Serrrgio   (07.12.2006 в 13:11)
 
   для: Diablo_   (07.12.2006 в 12:30)
 

тогда в вашем последнем скрипте вместо
$my->sql_query="select * from path where id='".addslashes(htmlspecialchars(@$_REQUEST['id']))."'";
написать
$my->sql_query="select * from path where id='".intval(@$_REQUEST['id'])."'";
надеюсь поле id имеет тип integer?

   
 
 автор: Diablo_   (07.12.2006 в 13:16)   письмо автору
 
   для: Serrrgio   (07.12.2006 в 13:11)
 

нет, не int оно может быть и буквенным
Но проблема в том, что он не все клики считает!!!
И я не понимаю почему!

   
 
 автор: Serrrgio   (07.12.2006 в 13:34)
 
   для: Diablo_   (07.12.2006 в 13:16)
 

а что вобще находится в id?

   
 
 автор: Diablo_   (07.12.2006 в 13:42)   письмо автору
 
   для: Serrrgio   (07.12.2006 в 13:34)
 

имя страницы!
например forum_page

   
 
 автор: Serrrgio   (07.12.2006 в 15:31)
 
   для: Diablo_   (07.12.2006 в 12:30)
 

тогда может так заработает?

<?
$id
=addslashes((get_magic_quotes_gpc()) ? stripslashes(@$_REQUEST['id']) : @$_REQUEST['id']); 
$my->sql_query="select * from path where id='$id'"
$my->sql_execute(); 
if (@
mysql_num_rows($my->sql_res)!=0

while (
$element1 mysql_fetch_array($my->sql_res)) { 
        
$keys=$element1['keys']; 
    }     
        
$my->sql_query="Update  `path` set counts=counts+1 where `keys`='".$keys."'"
        
$my->sql_execute();     

?>

покажите ваш сайт pls

   
 
 автор: Diablo_   (07.12.2006 в 15:47)   письмо автору
 
   для: Serrrgio   (07.12.2006 в 15:31)
 

Да нет, он и до этого работал, но не все клики считал! То через раз то ещё как то!

   
 
 автор: Diablo_   (08.12.2006 в 00:15)   письмо автору
 
   для: Diablo_   (07.12.2006 в 15:47)
 

Ошибка была каварная!!!:)
Обратите внимание, в первом посте на два кода, особое внимание на ФИГУРНЫЕ СКОБКИ!
Всем спасибо!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования