Angular 6 и PHP зацикливаются на массиве json, отправленном через HttPClient, давая неверный аргумент в цикле foreach - PullRequest
0 голосов
/ 07 сентября 2018

Я отправляю массив с другими данными, используя HttpClient угловой 6.

И как уже упоминалось в этом посте на github , отправка массивов с помощью HttpClient по-прежнему недоступна, поэтому у меня возникла проблема с чтением массивов при получении в PHP, и var_dump показывал мне нулевые объекты.

Я нашел решение, преобразовав массив в JSON с использованием json.stringify(array), и оно сработало, поскольку полученный массив правильно отображается в var_dump:

this.auth.saveUnitData(
  unit_type, 
  location_id,
  user, 
  number_of, 
  status, 
  add_date, 
  JSON.stringify(arrayOfActualities))
  .subscribe(
    (data)=>{
      console.log(data);
    },
    (error)=>{
      console.log(error);
    }
  )

var_dump() результат:

(
    [unit_type] => 1

    [location_id] => 1

    [user] => 1

    [number_of] => 2

    [status] => Active

    [add_date] => 2018-09-13

    [arrayOfActualities] => 

[{"legalId":"","protectionId":"1","situationId":"","addDate":"2018-09-13"}]

)

В коде PHP, а иногда внешний ключ может быть нулевым, поскольку одна из фактических данных, отправляемых через массив, не существует, я написал следующий скрипт:

$arrayOfActualities = json_encode($arrayOfActualities);
if(sizeof($arrayOfActualities)>0)
{
    foreach($arrayOfActualities as $array)
    {
        if($array['situationId']==="")
        {
            $situation_id=null;
        }
        else{
            $situation_id = $array['situationId'];
        }
        if($array['legalId']==="")
        {
            $legal_id=null;
        }
        else{
            $legal_id = $array['legalId'];
        }
        if($array['protectionId']==="")
        {
            $protection_id=null;
        }
        else{
            $protection_id = $array['protectionId'];
        }

        $status = "Active";

        try{
            $sqlActualities = "INSERT into unit_situation_legal_protection( 
            unit_situation_legal_protection_status, 
            unit_situation_legal_protection_date_added, 
            legal_id, situation_id, protection_id, user_id)
                                VALUES(:actStatus, :dateAdded, :legal,
                                        :situation, :protection, :userId)";
            $sqlActExec = $this->conn->prepare($sqlActualities);
            $sqlActExec->bindValue('actStatus', $status);
            $sqlActExec->bindValue('dateAdded', $dateAdded);
            $sqlActExec->bindValue('legal', $legal_id);
            $sqlActExec->bindValue('situation', $situation_id);
            $sqlActExec->bindValue('protection', $protection_id);
            $sqlActExec->bindValue('userId', $user_id);
            $sqlActExec->execute();

            return "success";
        }
        catch(PDOException $e)
        {
            return $e->getMessage();
        }
    }        
}

Проблема в том, что в базу данных ничего не добавлено, и отображается следующая ошибка:

Предупреждение: неверный аргумент указан для foreach ()

Итак, если я изменился на:

foreach (json_decode ($ arrayOfActualities) как $ array)

Я получил следующую ошибку:

Неверное значение '['

Я думаю, что это ошибка, потому что массив, преобразованный в json и [, был добавлен перед каждой строкой json, поэтому php решил, что это значение или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...