ver.2サポートサイト

HOMEAPIサンプルプログラムPHP郵便番号にハイフンを追加して登録する

郵便番号にハイフンを追加して登録する

サイトの郵便番号住所自動補完を使用した場合、フォームの郵便番号フィールドの入力フォーマットは「数字7桁」または「数字3桁-4桁」となります。

「数字7桁」または「数字3桁-4桁」のどちらかに統一してDBに登録したい場合、登録フォームの完了ステップでPHPを使用して登録しなおす方法があります。

下記は、「数字3桁-4桁」に統一して登録するサンプルプログラムです。

ページのPHP

<?php

//SPIRAL Ver2のAPI用のURL
$base_url = "https://api.spiral-platform.com/v1/";
$url = $base_url."apps/{appid}/dbs/{dbid}/records";

//APIキー
$apikey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

//ヘッダ
$header = array(
"Authorization:Bearer ".$apikey,
"Content-Type:application/json",
);

$registForm = $SPIRAL->getRegistrationForm("登録フォーム識別名");

//完了ステップでのみ実行する
if ($registForm->isCompletedStep()) {
  
  $record = $SPIRAL->getRecordValue();
  $recordId = $record['item']['_id'];
  $zipCode = $record['item']['zipCode'];
  //ハイフンなし7桁の郵便番号が登録されている場合に実行する
  if (preg_match("/^\d{7}$/",$zipCode)) {
    
    //urlの末尾に変更したいrecordIdを付加
    $url = $url ."/". $recordId;
    
    //ボディ
    $body = [
    //ハイフンなし7桁の郵便番号に「数字3桁-4桁」の形式でハイフンをつける
    "zipCode" => substr($zipCode, 0, 3) .'-'. substr($zipCode, -4),
    ];
    
    //配列をjson形式に変換
    $json_body = json_encode($body);
    
    // curlライブラリを使用して送信
    //セッションを初期化する
    $curl = curl_init();
    
    //実行結果を文字列で取得できるように設定
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    //urlを指定
    curl_setopt($curl, CURLOPT_URL , $url);
    //ヘッダを指定
    curl_setopt($curl, CURLOPT_HTTPHEADER , $header);
    //ボディを指定
    curl_setopt($curl, CURLOPT_POSTFIELDS , $json_body);
    //メソッドを指定
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST , 'PATCH');
    
    //セッションを実行し、その結果を取得
    $response = curl_exec($curl);
    //セッションを閉じる
    curl_close($curl);
    
    $response_json = json_decode($response, true);
    $zipCode = $response_json['item']['zipCode'];
  }
  //ブロックの登録フォーム完了ソース表示に使用
  $SPIRAL->setTHValue("message", "zipCode:". $zipCode);
}

ブロックの登録フォーム完了ソース

<div>
    <div th:if="${cp.result.isSuccess}">
        <div th:text="${cp.result.value['message']}"></div>
    </div>
    <div th:if="${!cp.result.isSuccess}">
        <div th:text="${cp.result.errorMessage}"></div>
    </div>
</div>

※ブロックのソースはテスト表示にのみ使用しますので、実際に使用する際には不要です。