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

Форум PHP

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

 

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

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

тема: Упрощение выбора действия
 
 автор: sergafan   (14.03.2017 в 06:20)   письмо автору
 
 

Доброго времени суток, перелопатил весь гугл но нигде не нашел ответа.
нужна помощь в упрощении кода(если это так можно назвать)

if (isset($_GET['b']) and isset($_GET['c']) and isset($_GET['floor'])) // если выбрано каталог бред и раздел
    {$bced="WHERE catalog='".$_GET['c']."' AND brand='".$_GET['b']."' AND tip='".$_GET['floor']."' ";}
        else{
            if (isset($_GET['b']) and isset($_GET['c'])) // если выбрали бред и каталог
                { $bced="WHERE catalog='".$_GET['c']."' AND brand='".$_GET['b']."' ";}
                    else{    
                        if (isset($_GET['floor']) and isset($_GET['b'])) // если выбрали бред и каталог Муж Жен Дет
                            { $fl="WHERE tip='".$_GET['floor']."' AND brand='".$_GET['b']."' ";}
                                else{
                                    if (isset($_GET['c'])){ $c="WHERE catalog='".$_GET['c']."' ";}// если выбрали каталон
                                        else{
                                            if (isset($_GET['b'])){ $b="WHERE brand='".$_GET['b']."' ";}//если выбрали бренд
                                                else{
                                                    if (isset($_GET['floor'])){ $floor ="WHERE tip='".$_GET['floor']."' "; }// если выбрали каталог Муж Жен Дет
                                            }    
                        
                                    }
                                }

                        }
                    }


$result = mysql_query("SELECT * FROM foto_img $c $b $bced $floor $fl ORDER by id DESC LIMIT $start, $num");


вообще можно ли так делать?
как упростить выборку из базы таким методом?

  Ответить  
 
 автор: confirm   (14.03.2017 в 09:59)   письмо автору
 
   для: sergafan   (14.03.2017 в 06:20)
 

<?
$field 
= array(
    
'b' => 'brand',
    
'c' => 'catalog',
    
'floor' => 'tip'
);

if(
$post array_intersect_key($field$_GET)) {
    
//если  'brand', 'catalog',  'tip', это строковые значения или среди этого набора есть строковые значения
    //то 'intval' заменить на sql экранирование и убрать array_diff() из этой операции
    //вставлять непосредственно в запросы данные извне, это самоубийство
    //и вообще, пора в помойку оригинальное расширение MySQL и использовать mysqli или PDO 
    
$where array_diff(
        
array_map('intval'array_combine(
            
array_flip($post), array_replace(
                
$postarray_intersect_key(
                    
$_GET$post
                
)
            )
        )
    ), array(
0));
    
    
$where 'WHERE ' implode(' AND 'array_map(function($k$v) {
        return 
$k '=' .$v;
    }, 
array_keys($where), $where));


//не заставляйте лишний раз ковыряться парсер в строках, используя переменные в строке с двойными кавычкамии, что руки отсохнут написать так?  
$sql 'SELECT * FROM foto_img '.$where.' ORDER by id DESC LIMIT ' $start .','$num;
    
$result mysql_query($sql);

  Ответить  
Rambler's Top100
вверх

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