Странность PHP-массива при добавлении строк в листы Google - PullRequest
0 голосов
/ 22 декабря 2018

Я использовал часы с Google и методом проб и ошибок, но не могу найти ответ или хорошее решение.Мои навыки кодирования не так велики, так что это может быть очевидно для гуру ... Пожалуйста, кто-нибудь, скажите мне, что происходит: D

Я пишу заказ из интернет-магазина на листы Google.Чтобы все было в правильном порядке, я создаю массив $ temparray, который затем подается на листы Google.

По какой-то причине загрузка работает только тогда, когда я делаю этот неприятный трюк взрыва и взрыва внутренних массивов.(после нескольких часов разочарования я только начал пробовать случайные вещи и обнаружил, что это помогает)

Wtf не так с моим массивом?

foreach ($_SESSION["ticketdata"] as $key => $value) {
    if ($_SESSION["debug"] == 1) {
        print $key." ";
    }
    $temparray[$key-1][0] = $_SESSION["ticketdata"][$key]["ticketid"];
    $temparray[$key-1][1] = $_SESSION["tickettype"];
    $temparray[$key-1][2] = $_SESSION["ticketdata"][$key]["ticketname-l"];
    $temparray[$key-1][3] = $_SESSION["ticketdata"][$key]["ticketname-f"];
    $temparray[$key-1][4] = $_SESSION["ticketdata"][$key]["ticketemail"];
    $temparray[$key-1][5] = $_SESSION["ticketdata"][$key]["ticketemployer"];
    $temparray[$key-1][6] = $_SESSION["ticketdata"][$key]["prews"];
    $temparray[$key-1][7] = $_SESSION["ticketdata"][$key]["ws26"];
    $temparray[$key-1][8] = $_SESSION["ticketdata"][$key]["ws27"];
    $temparray[$key-1][9] = $_SESSION["ticketdata"][$key]["diet-lactose"];
    $temparray[$key-1][10] = $_SESSION["ticketdata"][$key]["diet-gluten"];
    $temparray[$key-1][11] = $_SESSION["ticketdata"][$key]["diet-open"];
    $temparray[$key-1][12] = $_SESSION["orderid"];
    if ($key == 1) {
        $temparray[$key-1][13] = $_SESSION["totalprice"];
        $temparray[$key-1][14] = "";                        // placeholder
        $temparray[$key-1][15] = $_SESSION["bill-email"];
        $temparray[$key-1][16] = $_SESSION["bill-type"];
        $temparray[$key-1][17] = $_SESSION["bill-v-address"];
        $temparray[$key-1][18] = $_SESSION["bill-v-operator"];
        $temparray[$key-1][19] = $_SESSION["bill-additional"];
        $temparray[$key-1][20] = "";                        // placeholder
        $temparray[$key-1][21] = "";                        // placeholder
        $temparray[$key-1][22] = $_SESSION["customername-l"];
        $temparray[$key-1][23] = $_SESSION["customername-f"];
        $temparray[$key-1][24] = $_SESSION["customeremail"];
        $temparray[$key-1][25] = $_SESSION["customerphone"];
        $temparray[$key-1][26] = $_SESSION["customeremployer"];
        $temparray[$key-1][27] = date('Y-m-d H:i:s');
    }

    $temparraystr = implode("°§",$temparray[$key-1]); // Why do I need to do this?
    $temparray[$key-1] = explode("°§",$temparraystr); // mitä *ttua miksei toimi muuten????
}

// the google sheets part:
// getClient() copypasted from here: https://developers.google.com/sheets/api/quickstart/php
$client = getClient();
$service = new Google_Service_Sheets($client);    

$spreadsheetId = 'sheet id not shown on stack overflow :)';
$range = "tilaukset!A3:AB";

$valueRange = new Google_Service_Sheets_ValueRange();
$valueRange->setValues($temparray);

$conf = ["valueInputOption" => "RAW"];
$service->spreadsheets_values->append($spreadsheetId, $range, $valueRange, $conf);

Без хитрости я получаю это не такПолезное сообщение об ошибке

 PHP Fatal error:  Uncaught exception 'Google_Service_Exception' with
 message '{\n  "error": {\n    "code": 400,\n    "message": "Invalid JSON
 payload received. Unknown name \\"1\\" at 'data.values': Cannot find
 field.\\nInvalid JSON payload received. Unknown name \\"2\\" at
 'data.values': Cannot find field.",\n    "errors": [\n      {\n
        "message": "Invalid JSON payload received. Unknown name \\"1\\"
 at 'data.values': Cannot find field.\\nInvalid JSON payload received.
 Unknown name \\"2\\" at 'data.values': Cannot find field.",\n 
       "domain": "global",\n        "reason": "badRequest"\n      }\n
    ],\n    "status": "INVALID_ARGUMENT"\n  }\n}\n'

Вывод print_r ($ temparray), по-видимому, в точности совпадает с трюком «взрыва и взрыва» или без него.Это:

Array
(
    [0] => Array
        (
            [0] => SfGotLbD-1545531504-HZ2WGmpJ
            [1] => evy
            [2] => Secondname
            [3] => Firstname
            [4] => email@host
            [5] => employer
            [6] => 1
            [7] => ph
            [8] => ekg
            [9] => 
            [10] => 
            [11] => 
            [12] => 1545531504-HZ2WGmpJ
            [13] => 1050
            [14] => 
            [15] => email2@host
            [16] => verkkolasku
            [17] => 
            [18] => 
            [19] => 
            [20] => 
            [21] => 
            [22] => Secondname
            [23] => Firstname
            [24] => email@host
            [25] => 555 555555
            [26] => employer
            [27] => 2018-12-23 04:20:04
        )

)

1 Ответ

0 голосов
/ 30 января 2019

Проблема в неправильном типе данных в массиве.Это должна быть строка.

С данными, проходящими через strval(), чтобы убедиться, что они преобразованы в строку, это работает.

Для данных, которые уже известны как строки, это не будет обязательным.

Пример:

$temparray[$key-1][0] = strval($_SESSION["ticketdata"][$key]["ticketid"]);
$temparray[$key-1][1] = strval($_SESSION["tickettype"]);
$temparray[$key-1][2] = strval($_SESSION["ticketdata"][$key]["ticketname-l"]);
$temparray[$key-1][3] = strval($_SESSION["ticketdata"][$key]["ticketname-f"]);
$temparray[$key-1][4] = strval($_SESSION["ticketdata"][$key]["ticketemail"]);
$temparray[$key-1][5] = strval($_SESSION["ticketdata"][$key]["ticketemployer"]);
...