LoginSignup
0
2

More than 3 years have passed since last update.

【初心者向け】PHP フォームの入力値をGoogleスプレッドシートに自動で書き込むざっくり手順と私がつまづいたこと(Google Sheet API & Google APIs Client Library for PHP)

Last updated at Posted at 2021-01-31

経緯

サイトで使用しているPHPフォームからの送信内容をgoogleスプレッドシートに反映したいという依頼があった。
初めての作業だったので色々調べまくって時間がかかったため備忘録。
私のような初心者向けの内容です。

かかった時間

3〜4時間ぐらい
慣れれば1時間ぐらいでできそう

参考にしたページなど

非常にざっくりとした手順

  1. Googleスプレッドシートをつくる
  2. Google APIでGoogle Sheet APIを有効化(認証情報とかも作る)(参考サイト見てね)
  3. Googleスプレッドシートの「編集者」に[2]で作ったメールアドレス追加
  4. Google APIs Client Library for PHPをサイトにインストール(私はFTPでアップしました)
  5. [1]でDLした鍵jsonを[2]でインストールしたディレクトリにアップ(このとき「credentials.json」と改名
  6. PHPフォームの送信後アクションの{}内に下記追記
送信後アクション
if (!empty($clean['btn_submit'])) { この中に下記を追記 }
追記するPHP(★のところは直してね)
//googleスプレッドシート連携
    require_once __DIR__ . '/★ディレクトリ相対パス/vendor/autoload.php';
    define('APPLICATION_NAME', 'test');
    define('CLIENT_SECRET_PATH', './★ディレクトリ相対パス/credentials.json');
    // スコープの設定
    define('SCOPES', implode(
        ' ',
        array(
            Google_Service_Sheets::SPREADSHEETS
        )
    ));
    // アカウント認証情報インスタンスを作成
    $client = new Google_Client();
    $client->setScopes(SCOPES);
    $client->setAuthConfig(CLIENT_SECRET_PATH);
    /// シートのインスタンスを生成
    $service = new Google_Service_Sheets($client);
    try {
        $spreadsheetId = '★スプレッドシートID入れてね(英数字混じってるめっちゃ長いやつ)';
        $range = '★シート名入れてね';
        $values = array(
            array(
//連携したスプレッドシートの最終行に「A列(一番左)」から順に追記されるよ
                date('Y-m-d'),//★日付
                $clean['XXXX'],//★フォームの入力値の取得(複数ある場合は増やしてね)
            ),
        );

        $appendBody = new Google_Service_Sheets_ValueRange([
            'values' => $values
        ]);

        $params = [
            'valueInputOption' => 'USER_ENTERED'
        ];
        $result = $service->spreadsheets_values->append($spreadsheetId, $range, $appendBody, $params);
        echo $result->getUpdates()->getUpdatedCells();
    } catch (Google_Exception $e) {
        $errors = json_decode($e->getMessage(), true);
        $err = "code : " . $errors["error"]["code"] . "\r\n";
        $err .= "message : " . $errors["error"]["message"];
        echo "Google_Exception" . $err;
    }

私がつまずいたポイントと解決策

参考サイト通りにやってうまいことできないときは下記を確認すると幸せになれるかも知れません。

FTP経由で「Google APIs Client Library for PHP」をアップしたい

GithubのファイルだとどれをUPすればいいのか私はよくわからなかったので、下記からDLしてサーバーにUPしました。※サーバーのPHPバージョンを確認してください。
https://github.com/googleapis/google-api-php-client/releases

google 400 redirect_uri_mismatch... みたいなエラー文が出る

スプレッドシートは「.xlsx」形式になっていませんか?
.xlsxの場合連携がうまくいきません。
googleスプレッドシート形式に変換してください。

スプレッドシートが更新されない

仮にGoogleスプレッドシートのURLが下記だとしたら
https://docs.google.com/spreadsheets/d/XXXXXXXXXXXX-XXXXXXXX-XX/edit#gid=00000000
$spreadsheetId に入力するのはXXXXXXXXXXXX-XXXXXXXX-XXの方です。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2