Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите продвинутся дальше!
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Помогите продвинутся дальше!

Страниц (1): [1]
 

1. pastevgen - 27 Августа, 2010 - 01:51:10 - перейти к сообщению
Написал такой код но когда дошло до автоматизации тут то все идеи и закончились!
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
  4. $ext = $cat;
  5. $zapyatyh = substr_count($ext, ",");
  6. $proverka = substr(strrchr($ext, ","),0,1);
  7. if ($proverka==',')
  8. {
  9. $cat_posled = substr(strrchr($ext, ","),1);
  10.  
  11. $cat1 = substr($ext, 0, -strlen(strstr ($ext, ",")));
  12.  
  13. $ext =  substr($ext,1+strlen($cat1));
  14. $cat2 = substr($ext, 0, -strlen(strstr ($ext, ",")));
  15.  
  16. $ext =  substr($ext,1+strlen($cat2));
  17. $cat3 = substr($ext, 0, -strlen(strstr ($ext, ",")));
  18.  
  19. if ($zapyatyh > 0){$zapros="cat IN ('$cat1','$cat2','$cat3','$cat_posled')";}
  20. }
  21. else {$zapros = "cat='$cat'";}
  22.  
  23. $baza = mysql_query ("SELECT * FROM zametki WHERE $zapros",$db);
  24. ?>
  25.  


Если кому интересно рад буду любой Вашей помощи!
Да и количество cat может быть любым, тут то и хотелось сделать автоматизацию!
2. Саныч - 27 Августа, 2010 - 12:45:16 - перейти к сообщению
1) Зачем переменной $cat присваивать значение $_GET['cat'], а потом $ext значение $cat?
2) Если $_GET['cat'] не существует, то $cat не будет объявлена и уже вот эта стока $ext = $cat; вызовет ошибку...
3) Зачем этот геморой $zapros="cat='$cat1' OR cat='$cat2' OR cat='$cat3' OR cat='$cat_posled'";? Лучше так $zapros="cat IN ('$cat1','$cat2','$cat3')";
3. garvey - 27 Августа, 2010 - 12:59:20 - перейти к сообщению
Cогласен, Саныч. Только пункт 2 не вызовет ошибки. Просто переменная $ext будет NULL.
4. biperch - 27 Августа, 2010 - 13:06:44 - перейти к сообщению
Как то не чувствуется что толком входит и чего вы хотите добится толком
5. Саныч - 27 Августа, 2010 - 13:13:45 - перейти к сообщению
garvey пишет:
Просто переменная $ext будет NULL.

Разве??? Хм... Мне казалось, если переменная не определена, то это вызывает ошибку... Только что специально проверил и действительно вылазит только Notice: Undefined variable: cat in... Теперь буду знать Улыбка Спасибо
6. garvey - 27 Августа, 2010 - 13:16:30 - перейти к сообщению
В PHP нет срогого определения переменных и их типов. Пожалуйста.
7. pastevgen - 27 Августа, 2010 - 17:16:56 - перейти к сообщению
Лучше так $zapros="cat IN ('$cat1','$cat2','$cat3')";
Спасибо исправил!

Суть в том что приходит cat из ссылки в разном значении, к примеру так cat=5,8,3,4 или так cat=7,9,6,4,3,2,1,55. И каждый раз количество разное, вот и хотелось бы это автоматизировать! Улыбка
8. Мелкий - 27 Августа, 2010 - 17:38:43 - перейти к сообщению
pastevgen пишет:
И каждый раз количество разное, вот и хотелось бы это автоматизировать!

А если поэлегантнее немного сделать, в одну строку:
PHP:
скопировать код в буфер обмена
  1. $zapros = "cat IN ('".implode("','",explode(",",$_GET['cat']))."')";

Хотя скорее, конечно, так:
PHP:
скопировать код в буфер обмена
  1. $zapros = "cat IN ('".str_replace(",","','",$_GET['cat']),"')";
9. pastevgen - 28 Августа, 2010 - 04:51:39 - перейти к сообщению
Долго смеялся и понял что одна голова хорошо, а умная лучше! Радость
Отдельное и большое спасибо Саныч и Мелкий

И вот оказывается решение!
Исправил опечатку

PHP:
скопировать код в буфер обмена
  1.  
  2. $zapros = "cat IN ('".str_replace(",","','",$_GET['cat'])."')";
  3.  


Ещё б напоследок хотелось услышать что нибудь о безопасности этого кода!
И можно тему закрывать!
10. Саныч - 28 Августа, 2010 - 11:38:19 - перейти к сообщению
pastevgen пишет:
Ещё б напоследок хотелось услышать что нибудь о безопасности этого кода!

Ну дла начала можно и вот так
PHP:
скопировать код в буфер обмена
  1. $zapros = "cat IN ('".str_replace(",","','",mysql_escape_string($_GET['cat']))."')";
11. pastevgen - 29 Августа, 2010 - 05:59:34 - перейти к сообщению
Мне тут пришла вот такая идея. Как Вы думаете не сильно бредово получится!?
Или я обратно усложняю!?

PHP:
скопировать код в буфер обмена
  1.  
  2. $proverka = str_replace(",","",$_GET['cat']);
  3.         if(!preg_match("|^[\d]+$|",$proverka) && !empty($proverka)) exit("<p>Неверный формат запроса! Проверьте URL!</p>");
  4. $zapros = "cat IN ('".str_replace(",","','",mysql_escape_string($_GET['cat']))."')";
  5.  

 

Powered by ExBB FM 1.0 RC1