1

このドキュメントとhereを使用して、Google Datastoreにフォームデータを投稿しようとしています。私はフォームデータをデータストアに投稿する方法を知ることに苦労していますが、私は次のエラーが発生したときにそれをクラックしたと思いました。Googleクラウドで「使用」を使用して解析エラーが発生しました

Parse error: syntax error, unexpected 'use' (T_USE) in record-usage.php on line 23 

だから私の質問は二つの部分である:

  1. は、どのように私は自分のフォームからデータストアにデータを投稿するのですか? (ドキュメントの例では、店舗への投稿方法が2種類あります)
  2. この構文エラーを修正するにはどうすればよいですか?

は、ここで(それは以下のサンプルで行実際に7です)私のコードです:

if(isset($_POST['submit'])) { 

    # Includes the autoloader for libraries installed with composer 
    require __DIR__ . '/vendor/autoload.php'; 

    # Imports the Google Cloud client library 
    use Google\Cloud\Datastore\DatastoreClient; 

    # Your Google Cloud Platform project ID 
    $projectId = 'room-usage'; 

    # Instantiates a client 
    $datastore = new DatastoreClient([ 
     'projectId' => $projectId 
    ]); 

    # The kind for the new entity 
    $kind = 'RoomUsage'; 

    # The name/ID for the new entity 
    $name = $roomname + $_POST('timestamp'); 

    # The Cloud Datastore key for the new entity 
    $taskKey = $datastore->key($kind, $name); 

    if($_POST('countinput') == '') { 
     $formdata->Headcount = $_POST('countslider'); 
    } else { 
     $formdata->Headcount = $_POST('countinput'); 
    } 
    $formdata->Timestamp = $_POST('timestamp'); 
    $formdata->EnteredBy = $_POST('userid'); 
    $formdata->RoomID = $_POST('roomid'); 
    $formdata->Activity = $_POST('activity'); 
    $formdata->Estimate = $_POST('estimate'); 
    $formdata->NotAudited = $_POST('notaudited'); 
    $formdata->Reason = $_POST('reason'); 

    function save_room_usage(DatastoreClient $datastore, $formdata) { 
    $RoomUsage = $datastore->RoomUsage(); 

    $transaction->updateBatch([$formdata]); 
    $transaction->commit(); 
    } 
    # Prepares the new entity 
    $task = $datastore->entity($taskKey, 
           ['Timestamp' => $_POST('timestamp'), 
           'Headcount' => $formdata->Headcount, 
           'EnteredBy' => $_POST('userid'), 
           'RoomID' => $_POST('roomid'), 
           'Activity' => $_POST('activity'), 
           'Estimate' => $_POST('estimate'), 
           'NotAudited' => $_POST('notaudited'), 
           'Reason' => $_POST('reason')]); 

    # Saves the entity 
    $datastore->upsert($task); 

    $status = 'Saved ' . $task->key() . ': ' . $task['description']; 


} 
+1

Hey Yvonne。 Google Cloud PHPのDatastoreの使用に関するドキュメントは、https://googlecloudplatform.github.io/google-cloud-php/#/docs/cloud-datastore/v0.1.0/datastore/datastoreclientにあります。クライアントを作成しました。あなたがドキュメントで答えられていない質問があるなら、私に教えてください! – jdp

+1

私はまた、あなたのコードの実用的なバージョンの簡単な実例をまとめました。それはあなたがそれをどのように使用しているのかは100%ではありませんが、それはあなたに仕事をするためのテンプレートを与えるはずです。最終的なアプリケーションでは、悪意のあるユーザーがスクリプトを利用できないように、入力検証を行う必要があります。しかし、この例の範囲外です。 https://gist.github.com/jdpedrie/a9973a3835535e9cef13b2fa5b3c6f96 – jdp

+0

本当に助けてくれてありがとう。しかし、このエラーが発生しました。「致命的なエラー:クラス 'Google \ Cloud \ Datastore \ DatastoreClient'が/base/data/home/apps/e~brookes-room-usage/1.399853826395726238/record-usage.phpに見つかりませんおそらく私はそのクラス(OO PHPは私の強い訴訟ではない、申し訳ありません)に正しく私のアプリケーションを指摘していません –

答えて

3

使用

あなたが関数内useを持つことはできません。それは輸入のように考えてください。

代わりに、メソッド外に移動して名前空間内に配置します。簡単な方法はファイルの先頭に移動することです。このコードを見てみると

書き込みデータ

$transaction->updateBatch([$formdata]); 
$transaction->commit(); 

は、私はあなたがtransaction documentationを誤解したと思います。 $fromAccount$toAccountキーとの適切なエンティティであることの例では

$transaction->updateBatch([$fromAccount, $toAccount]); 

:コード例では、それが最初のバッチ検索を経由してデータストアからエンティティを読み取って、提示し、その後でバッチとしてそれらを書き戻します。

この例では、ランダムなデータだけを一括して書き込みます。 1つのレコードしか書いていないので、そのコードを削除する必要があります。

コードの2番目の部分でエンティティを作成し、次にそれをうまく動作させる必要があります。トランザクションに複数のエンティティを書き込む必要が生じた場合は、生データではなくupdateBatchメソッドで使用する$taskです。

+0

、ありがとうございました。データストアにデータを投稿するためのサンプルコードがどこにありますか?この他のSO投稿以来、PHPのサポートが追加されたが、私はドキュメントを見つけられなかったhttp://stackoverflow.com/questions/19219748/can-google-cloud-datastore-access-with-php/28573652#28573652投稿非常に便利です(私の記事の前文を参照)。 –

+0

追加情報ありがとうございました - それを試みます –

関連する問題