За последние 24 часа нас посетили 22554 программиста и 1116 роботов. Сейчас ищут 655 программистов ...

Помогите оптимизировать скрипт

Тема в разделе "PHP для новичков", создана пользователем Виктор К., 20 янв 2017.

Метки:
  1. Виктор К.

    Виктор К. Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    139
    Симпатии:
    6
    Адрес:
    Украина
    Здраствуйте. Помогите оптимизировать код. Суть в чем: есть один Select с name="food", при нажатии на кнопку добавляется еще один с именем "food2", потом с "food3" и тд. Также возле каждого Select есть поле food-weight (food-weight2 и тд). В обрабатывающем скрипте нужно обработать (извиняюсь за тавтологию) каждую такую пару, которая есть на странице. Есть какой то способ такое реализовать, кроме как вариант снизу (скорее всего совершенно не имеющий права на жизнь)?


    PHP:
    1. <?php
    2.  
    3. if ($_POST['food1'] and !$_POST['food2'] and $_POST['enter']) {
    4.     $Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `water`, `sugar` FROM `food` WHERE `id` = '$_POST[food1]'"));
    5.     $Water = ($Row['water'] * $_POST['food-weight']);
    6.     $Sugar = ($Row['sugar'] * $_POST['food-weight']);
    7. }
    8.  
    9. else if ($_POST['food1'] and $_POST['food2'] and !$_POST['food3'] and $_POST['enter']) {
    10.     $Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `water`, `sugar` FROM `food` WHERE `id` = '$_POST[food1]'"));
    11.     $Row2 = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `water`, `sugar` FROM `food` WHERE `id` = '$_POST[food2]'"));
    12.     $Water = ($Row['water'] * $_POST['food-weight'] + $Row2['water'] * $_POST['food-weight2']);
    13.     $Sugar = ($Row['sugar'] * $_POST['food-weight'] + $Row2['sugar'] * $_POST['food-weight2']);
    14. }
    15.  
    16. else if ($_POST['food1'] and $_POST['food2'] and $_POST['food3'] and !$_POST['food4'] and $_POST['enter']) {
    17.     $Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `water` FROM `food` WHERE `id` = '$_POST[food1]'"));
    18.     $Row2 = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `water` FROM `food` WHERE `id` = '$_POST[food2]'"));
    19.     $Row3 = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `water` FROM `food` WHERE `id` = '$_POST[food3]'"));
    20.     $Water = ($Row['water'] * $_POST['food-weight'] + $Row2['water'] * $_POST['food-weight2'] + $Row3['water'] * $_POST['food-weight3']);
    21.     $Sugar = ($Row['sugar'] * $_POST['food-weight'] + $Row2['sugar'] * $_POST['food-weight2'] + $Row3['sugar'] * $_POST['food-weight3']);
    22. }
    23.  
    24. // и так далее...
    25.  
    26. ?>
     
  2. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Почему это не имеющий? Это работает? Как говорится, пока оно работает - ничего не трогай))) Так и живём) Хотя код, конечно - бяка.
     
  3. Виктор К.

    Виктор К. Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    139
    Симпатии:
    6
    Адрес:
    Украина
    Если код бяка - его надо переписывать. Но мой уровень знаний в php, к сожалению, не позволяет что то сделать с этим скриптом. Может тут у кого-то появится идея...
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    можно сделать фудвейт равным нулю у тех, которые не включены. Тогда при умножении там в формуле будет ноль и пох. Т.е. можно будет оставить только третий вариант.
     
    Виктор К. нравится это.
  5. Виктор К.

    Виктор К. Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    139
    Симпатии:
    6
    Адрес:
    Украина
    Да, спасибо за идею, попробую.
     
  6. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Мне такое пришло на ум
    PHP:
    1. <?php
    2. $num = count($_POST)/2;
    3. for($i=0; $i < $num; $i++){
    4. $food = 'food'.$i;
    5. $foodweight = 'food-weight'.$i;
    6. echo $_POST[$food];
    7. echo $_POST[$foodweight];
    8. }
     
    Виктор К. нравится это.