2

この質問は、ドラッグアンドドロップのWYSIWYGオンラインフォームビルダーであるFormStackに精通していることを前提としています。

バックグラウンド

クライアントはFormStackを使用してフォームを管理しています。現在、フォームの送信は電子メールで送信され、データベースに手動で入力されます。予想通り、私の仕事はこのプロセスを自動化することです。これは、FormStackのWebHooks APIを使用すると十分に簡単です。フォームの送信をPHPスクリプトなどのURLに送信して、問題なく解析することができます。

質問

単純な識別子でFormStackフィールドに名前を付ける(またはタグを付ける)ことは可能ですか?

クライアントは、複数のフィールドが同じデータベース列にフィードされるようにフォームをカスタマイズできる必要があります。*ただし、FormStackは、私が知る限り、フィールドラベルを指定する方法しか提供してWhich of these trips interest you?いません。たとえば、プログラマー向けではありません。識別子、例えばTrip。私のスクリプトでは、ラベル(長さのためにタイプミスが発生しやすい)を文字列比較して、何をすべきかを判断する必要があります。この問題に対するいくつかの賢明な回避策は何ですか?

明確化*

同じデータベース列にフィードする複数のフィールドが存在する可能性がある理由は、クライアントが条件付きフィールドを使用するためです。たとえば、あるフィールドで「ユーザーが「ヨーロッパ」Where are you studying abroad? を選択した場合、ヨーロッパに関する選択肢を尋ねる条件付きフィールドが表示される場合があります。ただし、ユーザーが「アフリカ」を選択すると、同様のフィールドが表示される場合がありますが、アフリカに関する選択肢があります。FormStackでは、これらは実際には2つの異なるフィールドです。ただし、ご想像のとおり、値は同じデータベース列に属します。Which of these trips interest you?Which of these trips interest you?Trip

4

1 に答える 1

2

私は今のところハックに落ち着きました。FormStackでは、ラベルにHTMLマークアップを使用できますWhich of these trips interest you? <!--Trip-->。クライアントは、この方法でフィールドに「タグ付け」する用意があります。

他の誰かに役立つ可能性がある場合に備えて、このようなタグを解析するコードのスニペットを次に示します。

    require_once 'Formstack.php';
    $formstack = new Formstack($apiKey);
    $form = $formstack->form($_POST['FormID']);
    $taggedFields = array();
    foreach ($form['fields'] as $field)
    {
        if (preg_match('/<!--\s*([0-9A-Za-z]+)\s*-->/',
                       $field['label'],
                       $matches))
        {
            $taggedFields[$matches[1]] = $_POST[$field['id']];
        }
    }

実際、私はそれをもう少し洗練されたものにしなければなりませんでした。一部のFormStackフィールドタイプは、入力を(恐ろしい方法で)シリアル化します。たとえば、FormStackのNameフィールドタイプは複数のフィールド(プレフィックス、ファースト、ミドル、ラスト、イニシャル、サフィックス)を取り、結果を文字列に連結します。

'first = Andrew
initial = W
last = Cheong'

これを処理するために、次のようなラベルの構文を処理するコードを記述しました。Tell us your name! <!--FirstName=first--> <!--LastName=last--> <!--MiddleInitial=initial-->

コードは次のとおりです。

    require_once 'Formstack.php';
    $formstack = new Formstack($apiKey);
    $form = $formstack->form($_POST['FormID']);
    $taggedFields = array();
    foreach ($form['fields'] as $field)
    {
        if (preg_match_all('/<!--\s*([0-9A-Za-z]+)\s*(?:=\s*(\w+))?-->/',
                           $field['label'],
                           $matches,
                           PREG_SET_ORDER))
        {
            foreach ($matches as $captures)
            {
                if (count($captures) == 3 &&
                    preg_match('/(?:^|\n|\r)'.$captures[2].' = ([^\n\r]+)/',
                               $_POST[$field['id']],
                               $subcaptures))
                {
                    $taggedFields[$captures[1]] = $subcaptures[1];
                }
                else
                {
                    $taggedFields[$captures[1]] = $_POST[$field['id']];
                }
            }
        }
    }

うまくいけば、FormStackはすぐにフィールドに名前を付けたりタグを付けたりするネイティブな方法を追加するでしょう!

于 2012-05-08T15:17:07.193 に答える