а как узнать выполнился ли запрос?

dimagolov

Новичок
Safary, возьми и протестируй. если заметишь существенную разницу, то будешь думать, стоит ли тратить силы на парсинг и потом на возможный поиск по родителю или все же сделаешь проще и надежнее и будешь искать по мд5
 

Safary

Новичок
ну да, скорость незначительно тут меняется думаю. я не знаю как проверять скорость запроса пока что =)
Так какие тут силы тратить... Тут и так всё просто, проще некуда.
Поиска по родителю нету, тут просто находится по имени категория и её линк сверяется с урлом и всё. Очень надежно, надежнее чем мд5, тут просто ошибки не может быть, все уникально и делается проще. Вверху код есть, он очень маленький.
Существенной разницы нету в скорости, но это проще делается и тут надежнее а ещё и разница в скорости лучше, поэтому этот вариант буду юзать. Не знаю, чем он вам не понравился, может просто код мой особо не изучали, помоему идеальный вариант...

-~{}~ 14.03.09 22:06:

ещё я не пойму почему при выборе из базы такие дурацкие массивы получаются, с повторами... Вот щас выбрал, вот какой массив вышел:
PHP:
Array ( [0] => 9 [id] => 9 [1] => 8 [pid] => 8 [2] => 8.9 [path] => 8.9 [3] => 1 [level] => 1 [4] => /lessons/photoshop/ [link] => /lessons/photoshop/ [5] => photoshop [section] => photoshop [6] => Adobe Photoshop [name] => Adobe Photoshop [7] => уроки Adobe photoshop [description] => уроки Adobe photoshop [8] => Здесь собрана коллекция авторских уроков Adobe Photoshop. [text] => Здесь собрана коллекция авторских уроков Adobe Photoshop. [9] => [img] => )
почему не такой массив?
PHP:
Array ([id] => 9 [pid] => 8 [path] => 8.9 [level] => 1 [link] => /lessons/photoshop/ [section] => photoshop [name] => Adobe Photoshop [description] => уроки Adobe photoshop [text] => Здесь собрана коллекция авторских уроков Adobe Photoshop. [img] => )
 

x-yuri

Новичок
ещё я не пойму почему при выборе из базы такие дурацкие массивы получаются, с повторами... Вот щас выбрал, вот какой массив вышел
внимательно почитай ман по используемой тобой функции

-~{}~ 15.03.09 04:05:

ну да, скорость незначительно тут меняется думаю. я не знаю как проверять скорость запроса пока что =)
в данном случае у тебя 1-ый вариант - запрос + цикл, 2-ой - запрос. Можешь определять скорость в php:
PHP:
$start = microtime(TRUE); 
... 
print microtime(TRUE)-$start;
делай много повторов и находи среднее время выполнения. Для своего варианта можешь посчитать среднее время выполнения для случаев, когда искомая запись будет 1-ой, 2-ой и т.д. Используй SELECT SQL_NO_CACHE... чтобы запрос каждый раз выполнялся, а не доставался из кэша

Так какие тут силы тратить... Тут и так всё просто, проще некуда
имхо
PHP:
$q=mysql_query("SELECT * FROM structure WHERE link='".md5($_SERVER['REQUEST_URI'])."'");
if(mysql_num_rows($q)) { echo 'категория существует!'; }
проще, чем
PHP:
$path=$_SERVER['REQUEST_URI']; 
$apath=explode('/',$path); 
$apath=clear_arr($apath); 
$path_count=count($apath); 

$q=mysql_query("SELECT * FROM structure WHERE section='".$apath[$path_count]."'"); 
while($s=mysql_fetch_array($q)){ 
if($path==$s['link']){echo 'категория существует!'; break;} 
}

function clear_arr() {
...
}
+ код для защиты от SQL Injection, про который ты забыл (http://phpfaq.ru/slashes)

помоему идеальный вариант...
не бывает таких, бывают наиболее подходящие для некоторой ситуации
 

Safary

Новичок
x-yuri, ну да, теперь получается что мой вариант сложнее. но он лучше имхо. Вот про sql-иньекции действительно не думал, но разве тут он нужен?

мой случай:
PHP:
"SELECT * FROM structure WHERE section='".$apath[$path_count]."'"
вместо
PHP:
 $apath[$path_count]
могут че угодно вставить

ваш случай:
PHP:
"SELECT * FROM structure WHERE link='".md5($_SERVER['REQUEST_URI'])."'");
точно также в request url можно любой код прописать и он будет искаться в link... в чем разница?

Кстати почему-то твой код измерения скорости почему-то всегда разное время показывает...

-~{}~ 16.03.09 05:59:

ну скажите... как тут sql-иньекцию можно к моему коду применить?
 

x-yuri

Новичок
x-yuri, ну да, теперь получается что мой вариант сложнее. но он лучше имхо. Вот про sql-иньекции действительно не думал, но разве тут он нужен?
не знаю, как в данном конкретном случае... но лучше уж заэкранировать лишнее
к вопросу какой из вариантов проще: защиту можно не учитывать - максимум 1 строчка

ваш случай:
"SELECT * FROM structure WHERE link='".md5($_SERVER['REQUEST_URI'])."'");
точно также в request url можно любой код прописать и он будет искаться в link... в чем разница?
strpos(md5($_SERVER['REQUEST_URI']), '\'') === FALSE

Кстати почему-то твой код измерения скорости почему-то всегда разное время показывает...
а составляющие запросы выполняются всегда за одинаковое время?
 

Safary

Новичок
x-yuri,
я не очень пойму, почему опасно, что у меня есть вхождение символа '\' ?

кстати что значит оператор ===? в двух учебниках не нашел такого даже...

и на счет защиты подскажи, я не пойму чем опасно то, что есть вхождение и размеется не могу защитить приложение )

Насчет запросов понял, думал всегда за одно время выполняются =)
 

x-yuri

Новичок
я не очень пойму, почему опасно, что у меня есть вхождение символа '\' ?
буфер обмена глючит?

кстати что значит оператор ===? в двух учебниках не нашел такого даже...
значит учебники такие, читай мануал:
http://ua.php.net/manual/en/language.operators.comparison.php

и на счет защиты подскажи, я не пойму чем опасно то, что есть вхождение и размеется не могу защитить приложение )
http://ua.php.net/manual/en/security.database.sql-injection.php
 

Safary

Новичок
ага, понял )
Тока всетаки чем вредны слеши, из этого мануала не особо понял. типа их за комманду может SQL принять?
ну и надо что-то типа того написать:
PHP:
str_replace('/','//',$REQUEST_URL)
, а в базе хранить такие пути //programs//graphics//photoshop//

Всё верно?
 

Фанат

oncle terrible
Команда форума
ты не различаешь, в какую сторону палочка наклонена?
 

Safary

Новичок
да, но вот такой-то у меня нету - \

-~{}~ 21.03.09 18:05:

а вы говорите что такая опасна - /
ну я че-то совсем запутался...
 

dimagolov

Новичок
Safary, научись читать только то, что тебе пишут. и не придумывать то, чего не пишут.
теоретически в $_SERVER['REQUEST_URI'] может быть все что угодно, поэтому, если запоминать его в базе или сравнивать с базой, то надо слешить это значение

а вот если не страдать фигней, которую сам выдумал, а послушать советов и и хранить и искать в базе не сам $_SERVER['REQUEST_URI'], а md5($_SERVER['REQUEST_URI']), то никаких проблем быть не может, так как md5 ВСЕГДА возвращает строку из 32-х 16-ричных цифр и ничего кроме 0-9A-F там встретиться не может
 

Safary

Новичок
dimagolov, ну а вдруг не уникальные попадутся. мало вероятности, но вдруг... я же параноик :)

так, просто надо REQUEST от мусора отчистить, ну чтоб там были только такие символы:
_ / - . 0-9 a-Z

до? :)

-~{}~ 21.03.09 22:26:

Кстати, я теперь делать решил не по REQUEST_URL, а с помощью $_GET[];

Это ведь решает проблемму или не?

у меня настройки мод_реврайта такие:
RewriteRule ^([a-z0-9_-]*)/([a-z0-9/-_]*) /index.php?section=$1&path=$2

Ну и типо в $_GET[] обратные слеши и прочая **й** не попадет ведь :) всё правильно?
 

Harling

Новичок
да что вы паритесь))) Safary иди обратись в сервис inphp.org пускай тебе уж там все растусуют, а то у тебя столько прихотей ппц, то так то этак, а может стоит узнать как лучше??? и как будет эффективнее с точки зрения кодинга. в общем смотри конечно сам, но если что напиши, может помогут тебе с твоими заморочками))) :D
 

Safary

Новичок
хахах... ну я идеалист, че поделаешь :)
Кароче ниче у меня не взломают, у меня RewriteRule тока нужные символы перезаписывает =)

-~{}~ 22.03.09 01:16:

блин... тока могут же написать вот так:
?section=злой_код

И модреврайту ненадо ниче перезаписывать...
Как тут поступить? я че-то туплю, не пойму как переменную проверить перед тем, как вставить в запрос...

точнее знаю как, но мне не нравится вариант...
функция нужна, типа если встречаются говносимволы в коде, то инклудим страницу, где говорим хакеру, что его айпи записан и передан в ФБР =)))

Подскажите функцию и всё, обещаю, больше ниче спрашивать не буду :)

-~{}~ 22.03.09 01:17:

не регуляркой же делать... и str_pos не подходит...
 
Сверху