2012-05-07 7 views
2

이 질문은 드래그 앤 드롭 WYSIWYG 온라인 양식 작성기 FormStack에 익숙하다고 가정합니다.간단한 식별자로 FormStack 필드의 이름을 지정할 수 있습니까?

배경

클라이언트 양식을 관리 할 수 ​​FormStack을 사용하고 있습니다. 현재 양식 제출이 전자 메일로 전송 된 다음 수동으로 데이터베이스에 입력됩니다. 예상대로, 내 임무는이 과정을 자동화하는 것입니다. FormStack의 WebHooks API를 사용하면 충분히 간단합니다. URL에 양식 제출을 할 수 있습니다 (예 : PHP 스크립트를 사용하고 행복하게 파싱합니다.

질문

는 이름 (또는 태그) FormStack 필드 단순한 식별자 가능한가?

클라이언트는 여러 필드가 동일한 데이터베이스 열에 입력 될 수 있도록 양식을 사용자 지정할 수 있어야합니다. * FormStack 그러나 내가 알 수있는 한 필드 레이블을 지정하는 방법 만 제공합니다. Which of these trips interest you?은 프로그래머가 쉽게 사용할 수있는 식별자가 아닙니다. Trip. 내 스크립트는 무엇을 할 것인지 결정하기 위해 문자열 비교 (길이 때문에 오타가 더 많이 발생 함)해야합니다. 이 문제에 대한 합리적인 해결 방법은 무엇입니까?

해명

이유는 동일한 데이터베이스 컬럼으로 공급 여러 필드가 존재할 수 * 클라이언트가 조건부 필드를 사용한다는 것이다. 예를 들어, 한 필드에서 묻는 메시지는 Where are you studying abroad? "유럽"을 선택하면 Which of these trips interest you?이라는 조건부 필드가 나타나고 유럽과 관련된 선택 사항이 표시 될 수 있습니다. 사용자가 "Africa"을 선택하면 비슷한 입력란이 표시 될 수 있습니다. Which of these trips interest you?이지만 아프리카와 관련된 선택 사항이 있습니다. FormStack에서는 실제로 두 개의 별개 필드가 있습니다. 그러나 상상할 수 있듯이 값은 동일한 데이터베이스 열 Trip에 속합니다.

답변

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의 이름 필드 형이 (마지막 접두사, 처음, 중간, 초기, 접미사) 여러 필드를 소요하고 문자열로 결과를 연결합니다 :

'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이 필드 이름을 지정하거나 태그를 추가하는 방법을 곧 추가 할 예정입니다.

+0

'일부 FormStack 필드 유형 serialize 입력 '- JSON이 사용되면 연결이 발생하지 않습니다. – Piero