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 매뉴얼을 참조하십시오.

Alternalley를 사용할 수 있습니다.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']배열이 됩니다.