За последние 24 часа нас посетили 127820 программистов и 6636 роботов. Сейчас ищет 1991 программист ...

Сокращение кода PHP помощ

Тема в разделе "PHP для новичков", создана пользователем slipsteel, 6 авг 2018.

  1. slipsteel

    slipsteel Новичок

    С нами с:
    4 авг 2018
    Сообщения:
    13
    Симпатии:
    0
    Добрый день , имею код такого типа
    PHP:
    1. if(isset($_POST['save']))
    2. {
    3.    
    4. $pole102 = strip_tags(trim($_POST['pole102']));
    5. $pole103 = strip_tags(trim($_POST['pole103']));  
    6. $pole104 = strip_tags(trim($_POST['pole104']));
    7. $pole105 = strip_tags(trim($_POST['pole105']));
    8. $pole106 = strip_tags(trim($_POST['pole106']));
    9. $pole107 = strip_tags(trim($_POST['pole107']));
    10. $pole108 = strip_tags(trim($_POST['pole108']));
    11. $pole109 = strip_tags(trim($_POST['pole109']));
    12. $pole121 = strip_tags(trim($_POST['pole121']));
    13. $pole122 = strip_tags(trim($_POST['pole122']));
    14. .......
    15.  
    16.  
    17. if ( $pole324 == 0 && $pole324 == NULL ){
    18.   mysql_query("DELETE FROM `oc_customer_group_price` WHERE `oc_customer_group_price`.`customer_group_id` ='$checked'  AND `category_id`='$value'");
    19. } else {
    20. mysql_query("replace INTO `oc_customer_group_price` (`customer_group_id`, `category_id`, `price`, `type`,`customer_id`) VALUES ('$checked','324' ,'$pole324','1',$Id)");
    21. }
    22. if ( $pole333 == 0 && $pole333 == NULL ){
    23.   mysql_query("DELETE FROM `oc_customer_group_price` WHERE `oc_customer_group_price`.`customer_group_id` ='$checked'  AND `category_id`='$value'");
    24. } else {
    25. mysql_query("replace INTO `oc_customer_group_price` (`customer_group_id`, `category_id`, `price`, `type`,`customer_id`) VALUES ('$checked','333' ,'$pole333','1',$Id)");
    26. }
    27. if ( $pole342 == 0 && $pole342 == NULL ){
    28.   mysql_query("DELETE FROM `oc_customer_group_price` WHERE `oc_customer_group_price`.`customer_group_id` ='$checked'  AND `category_id`='$value'");
    29. } else {
    30. mysql_query("replace INTO `oc_customer_group_price` (`customer_group_id`, `category_id`, `price`, `type`,`customer_id`) VALUES ('$checked','342' ,'$pole342','1',$Id)");
    31. }
    32. ........
    33.  
    34.  
    35. }
    Можно ли его как то сократить через цикл ? Спасибо
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    нужно изучить возможности SQL чтобы делать это одним запросом, а еще про SQL-injection почитать, ващи Strip_tags(trim)) как мертвому припарки
     
  3. slipsteel

    slipsteel Новичок

    С нами с:
    4 авг 2018
    Сообщения:
    13
    Симпатии:
    0
    П.с все вот эти $pole324 зарание известны а точнее цыфра которая стоит возле слова поле
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    вообще сдается мне какой там неправильных подход вообще... когда 200-300 переменных передается
    но если надо... то лучше:
    1) сформировать в цикле строку/массив с ид которые нужно удалить
    2) сделать запрос вида delete from t where id IN(1,444,5,4,33) - то что в скобках - сформировано в п 1
    3) аналогично сформировать в цикле строку/массив с значениями и ид обновляемых элементов - так же выполнить запрос
     
  5. slipsteel

    slipsteel Новичок

    С нами с:
    4 авг 2018
    Сообщения:
    13
    Симпатии:
    0
    В том то и дело что все работает , вот хочу скоротить как-то через цикл да мозгов уже нехватает
     
  6. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Вы часом не индус?
    PHP:
    1. $arrayFields = [];
    2.  
    3. foreach($_POST as $key => $val) {
    4.   if(strstr($key, 'pole')) $arrayFields[$key] = $val;
    5. }
    6.  
    7. foreach($arrayFields as $field) {
    8. if($field === 0 && is_null($field)) {
    9.   //db query
    10. }
    11. }
     
  7. slipsteel

    slipsteel Новичок

    С нами с:
    4 авг 2018
    Сообщения:
    13
    Симпатии:
    0
    Да не просто руки крюки . мыслей много а реализовать получается только кустарным методом , но вот в этот код как вставить запрос ?
     
  8. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Далее вы уже сами. Прочитать можете что написано в коде?
     
    slipsteel нравится это.
  9. slipsteel

    slipsteel Новичок

    С нами с:
    4 авг 2018
    Сообщения:
    13
    Симпатии:
    0
    1. $arrayFields = [102,103,104,105.......и так дале ];

    2. foreach($_POST as $key => $val) {
    3. if(strstr($key, 'pole')) $arrayFields[$key] = $val;
    4. }
    5. Я правильно понял ?
     
  10. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Неа, массив будет заполнен после цикла.Типа:
    PHP:
    1. $arrayFields = ['pole1' => 'text', 'pole2' => 'text'...]
    Про strstr - http://www.php.net/strstr
     
  11. slipsteel

    slipsteel Новичок

    С нами с:
    4 авг 2018
    Сообщения:
    13
    Симпатии:
    0
    ниче не понял читаю про вот эти циклы фроач , понимаю как его использовать при такой конструкции а тут ниче не пойму ( ладно
    --- Добавлено ---
    <?php
    $arr = array("pole" => "102",
    "pole" => "103",
    "pole" => "104");
    ?>
    <?php
    foreach($arr as $key => $value)
    {
    if ( $key == 0 && $key == NULL ){
    mysql_query("DELETE FROM `oc_customer_group_price` WHERE `oc_customer_group_price`.`customer_group_id` ='$checked' AND `category_id`='$value'");
    } else {
    mysql_query("replace INTO `oc_customer_group_price` (`customer_group_id`, `category_id`, `price`, `type`,`customer_id`) VALUES ('$checked','$value' ,'$key','1',$Id)");
    }
    }
    ?>
    я предполагал чтото такого типа но почему то тянет только $value а кей нет или наоборот
     
  12. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    [ key => value ]
    [ pole123 => string ]
    Намек понял?
    Читай про массивы
     
  13. slipsteel

    slipsteel Новичок

    С нами с:
    4 авг 2018
    Сообщения:
    13
    Симпатии:
    0
    Все равно непонял , тугой я чёт.(
     
  14. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    для начала научитесь обрамлять свой код (ну или что там) в спец теги на данном форуме
     
    villiwalla нравится это.
  15. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Сопоставь две строки, как для уравнения только не крест на крест а вертикально.
     
  16. slipsteel

    slipsteel Новичок

    С нами с:
    4 авг 2018
    Сообщения:
    13
    Симпатии:
    0
    PHP:
    1. $arr = ["pole102"=>102];
    2.     foreach ($arr as $key=>$elem) {
    3.         mysql_query("replace INTO `oc_customer_group_price` (`customer_group_id`, `category_id`, `price`, `type`,`customer_id`) VALUES ('$checked','$elem' ,'".$_POST[$key]."','1',$Id)");
    4.  
    5.     }
    Вас всеравно не понял , но сделал вот так и все заработало на ура. может кому пригодиться
     
  17. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Скачайте себе книгу или видео с торрента о php или ютуб используйте, не мучайте жопу.
     
  18. slipsteel

    slipsteel Новичок

    С нами с:
    4 авг 2018
    Сообщения:
    13
    Симпатии:
    0
    Осталось только проверку вставить как то на проверку ключа на не нулевое значение и пустое )))
     
  19. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Я вижу, что в термины въезжаете а цикл так и не освоили
     
  20. slipsteel

    slipsteel Новичок

    С нами с:
    4 авг 2018
    Сообщения:
    13
    Симпатии:
    0
    прочитаю обизательтельно как закончу с этим .) пока только на примерах учусь,
     
  21. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    @slipsteel, на плохих примерах. Расширения mysql уже нету в php современных версий. Значения в запрос поставляются как есть, т.е. здравствуй sql-инъекция (хотя и в старом расширении можно было защититься).
    https://www.ozon.ru/context/detail/id/139127353/ - вот, купи (скачай) и учись.
     
  22. slipsteel

    slipsteel Новичок

    С нами с:
    4 авг 2018
    Сообщения:
    13
    Симпатии:
    0
    Спасибо , прочитаю обязательно , но проблему уже решил с помощью указаний форумчанина , исходя из этого на данном форуме нужно быть либо знать все и ошибаться либо как я незнать ничего и будут обсуждать то как ты пишешь.))
     
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Ну формально решил, SQL-инъекции остались, на новой версии PHP код не будет работать
     
    villiwalla нравится это.