[php] HTML 양식 숨겨진 요소를 사용하여 배열 전달

숨겨진 필드에 배열을 게시하려고하는데 PHP에서 양식을 제출 한 후 해당 배열을 검색하고 싶습니다.

$postvalue = array("a", "b", "c");
<input type="hidden" name="result" value="<?php echo $postvalue; ?>">

하지만 게시 된 값을 인쇄 한 후 배열 문자열 만 얻습니다. 그렇다면 어떻게 해결할 수 있습니까?



답변

사용하다:

$postvalue = array("a", "b", "c");
foreach($postvalue as $value)
{
    echo '<input type="hidden" name="result[]" value="'. $value. '">';
}

그리고 당신은 $_POST['result']배열로 얻을 것 입니다.

print_r($_POST['result']);


답변

이를 달성하는 데는 주로 두 가지 가능한 방법이 있습니다.

  1. 어떤 방식 으로든 데이터를 직렬화합니다.

    $postvalue = serialize($array); // Client side
    
    $array = unserialize($_POST['result']; // Server side
    

그런 다음 게시 된 값을 unserialize($postvalue). 이에 대한 자세한 정보는 여기 PHP 매뉴얼에 있습니다.

또는 json_encode()json_decode()함수를 사용하여 JSON 형식의 직렬화 된 문자열을 가져올 수 있습니다 . 전송 된 데이터를 축소 gzcompress()(성능 집약적 임)하고 전송 된 데이터를 보호 base64_encode()할 수 있습니다 (데이터가 8 비트가 아닌 깨끗한 전송 계층에서 유지되도록). 이것은 다음과 같이 보일 수 있습니다.

    $postvalue = base64_encode(json_encode($array)); // Client side

    $array = json_decode(base64_decode($_POST['result'])); // Server side

데이터를 직렬화하는 권장되지 않는 방법 (하지만 성능이 매우 저렴함)은 단순히 implode()배열에서 사용 하여 지정된 문자로 구분 된 모든 값이있는 문자열을 가져 오는 것입니다. 서버 측에서 배열을 검색 할 수 있습니다 explode(). 그러나 배열 값에서 발생하는 분리 (또는 이스케이프)에 문자를 사용해서는 안되며이 메서드로 배열 키를 전송할 수 없습니다.

  1. 명명 된 특수 입력 요소의 속성을 사용합니다.

    $postvalue = "";
    foreach ($array as $v) {
      $postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />';
    }
    

    이와 같이 $_POST['result']양식이 전송되면 변수에 전체 배열을 가져옵니다 . 이것은 배열 키를 전송하지 않습니다. 그러나 result[$key]각 필드의 이름 으로 사용하여이를 달성 할 수 있습니다 .

이 모든 방법에는 고유 한 장점과 단점이 있습니다. 이 모든 방법을 사용하여 최소한의 데이터를 보내야하기 때문에 사용하는 것은 주로 배열의 크기에 따라 다릅니다.

이를 달성하는 또 다른 방법은 어레이를 클라이언트 측에서 전송하는 대신 서버 측 세션에 저장하는 것입니다. 이와 같이 $_SESSION변수를 통해 배열에 액세스 할 수 있으며 양식을 통해 아무것도 전송할 필요가 없습니다. 이를 위해 php.net 세션의 기본 사용 예를 살펴보십시오 .


답변

클라이언트 측에서 serialize 및 base64_encode를 사용할 수 있습니다. 그런 다음 서버 측에서 unserialize 및 base64_decode를 사용하십시오.

처럼:

클라이언트 측에서 다음을 사용하십시오.

    $postvalue = array("a", "b", "c");
    $postvalue = base64_encode(serialize($array));

   // Your form hidden input
   <input type="hidden" name="result" value="<?php echo $postvalue; ?>">

서버 측에서 다음을 사용하십시오.

    $postvalue = unserialize(base64_decode($_POST['result']));
    print_r($postvalue) // Your desired array data will be printed here


답변

직렬화 :

$postvalue=array("a","b","c");
<input type="hidden" name="result" value="<?php echo serialize($postvalue); ?>">

수신시 : unserialize($_POST['result'])

또는 내파 :

$postvalue=array("a","b","c");
<input type="hidden" name="result" value="<?php echo implode(',', $postvalue); ?>">

수신시 : explode(',', $_POST['result'])


답변

배열을 게시하려면 다른 표기법을 사용해야합니다.

foreach ($postvalue as $value){
<input type="hidden" name="result[]" value="$value.">
}

이런 식으로 result []라는 이름의 입력 필드가 3 개 $_POST['result']있고 게시 되면 배열이됩니다.


답변

<input type="hidden" name="item[]" value="[anyvalue]">

반복 모드로두면이 요소를 양식에 배열로 게시하고

print_r($_POST['item'])

항목을 검색하려면


답변

먼저 JSON 문자열로 인코딩 한 다음 Base64로 인코딩하는 것이 좋습니다 (예 : 서버 측에서 역순). 먼저 base64_decode 함수를 사용한 다음 json_decode 함수를 사용합니다. 따라서 PHP 배열을 복원합니다.