За последние 24 часа нас посетили 17589 программистов и 1678 роботов. Сейчас ищут 1897 программистов ...

Функция работает только 1 раз

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

  1. mesate

    mesate Новичок

    С нами с:
    1 дек 2017
    Сообщения:
    4
    Симпатии:
    0
    Настраиваю апи для сервиса по их же документации и столкнулся с ситуацией, когда код не хочет отработать 2 запроса сразу. Т.е. если мы выполняем одно любое условие, все ок, отправка списка идет, функция работает корректно. НО если все два условия выполняются (true), то функция send_request выполняет только последняя. В данном случае идет только добавление. Если условия поменять местами, то будет происходить только удаление... Что ж не так?

    PHP:
    1.              $import_contacts_url = 'https://esputnik.com/api/v1/contacts';
    2.        
    3.             function send_request($url, $json_value, $user, $password) {
    4.                 $ch = curl_init();
    5.                 curl_setopt($ch, CURLOPT_POST, 1);
    6.                 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($json_value));
    7.                 curl_setopt($ch, CURLOPT_HEADER, 1);
    8.                 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json', 'Content-Type: application/json'));
    9.                 curl_setopt($ch, CURLOPT_URL, $url);
    10.                 curl_setopt($ch,CURLOPT_USERPWD, $user.':'.$password);
    11.                 curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
    12.                 curl_exec($ch);
    13.                 curl_close($ch);
    14.             }
    15.             // отправка удаления пользователей $user_to_delete
    16.             if (count($user_to_delete)>0){
    17.                     foreach ($user_to_delete as $key){
    18.                         $contact = new stdClass();
    19.                         $arrcontact[] = $contact;      
    20.                    
    21.                     }
    22.                    
    23.                     $request_entity = new stdClass();
    24.                     $request_entity->contacts = $arrcontact;                  
    25.                    
    26.                 send_request($import_contacts_url, $request_entity, $user, $password);
    27.                 $log .= " Удалили ".count($user_to_delete);
    28.             }
    29.             // отправляем новых пользователей.  user_to_add
    30.             if (count($user_to_add)>0){
    31.                     foreach ($user_to_add as $key){
    32.                         $contact = new stdClass();
    33.                         $contact->firstName = $key['firstName'];
    34.                         $contact->lastName = $key['lastName'];
    35.                         $arrcontact[] = $contact;      
    36.                    
    37.                     }
    38.                     $request_entity = new stdClass();
    39.                     $request_entity->contacts = $arrcontact;
    40.                     send_request($import_contacts_url, $request_entity, $user, $password);
    41.                    
    42.                     $log .=  " Добавили ".count($user_to_add);
    43.                 }
     
  2. SaRoman96

    SaRoman96 Новичок

    С нами с:
    19 мар 2017
    Сообщения:
    5
    Симпатии:
    0
    добавь функцию когда два условия выполняются типо
    Код (Text):
    1. if(count($user_to_delete)>0) &&(count($user_to_add)>0)
     
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @mesate, для начала - инициализируйте $arrcontact перед его исползованием в циклах.
     
  4. mesate

    mesate Новичок

    С нами с:
    1 дек 2017
    Сообщения:
    4
    Симпатии:
    0
    Sail , благодарю за подсказку. Сегодня с новыми силами понял в чем был косяк, как оказалось все довольно просто.
    $arrcontact во втором условии не очищался и получалось, что мы отправляем массив который содержит набор первых и вторых данных