숨겨진 필드에 배열을 게시하려고하는데 PHP에서 양식을 제출 한 후 해당 배열을 검색하고 싶습니다.
$postvalue = array("a", "b", "c");
<input type="hidden" name="result" value="<?php echo $postvalue; ?>">
하지만 게시 된 값을 인쇄 한 후 배열 문자열 만 얻습니다. 그렇다면 어떻게 해결할 수 있습니까?
숨겨진 필드에 배열을 게시하려고하는데 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']);
name="result[][]"
이를 달성하는 데는 주로 두 가지 가능한 방법이 있습니다.
어떤 방식 으로든 데이터를 직렬화합니다.
$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(). 그러나 배열 값에서 발생하는 분리 (또는 이스케이프)에 문자를 사용해서는 안되며이 메서드로 배열 키를 전송할 수 없습니다.
명명 된 특수 입력 요소의 속성을 사용합니다.
$postvalue = "";
foreach ($array as $v) {
$postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />';
}
이와 같이 $_POST['result']양식이 전송되면 변수에 전체 배열을 가져옵니다 . 이것은 배열 키를 전송하지 않습니다. 그러나 result[$key]각 필드의 이름 으로 사용하여이를 달성 할 수 있습니다 .
이 모든 방법에는 고유 한 장점과 단점이 있습니다. 이 모든 방법을 사용하여 최소한의 데이터를 보내야하기 때문에 사용하는 것은 주로 배열의 크기에 따라 다릅니다.
이를 달성하는 또 다른 방법은 어레이를 클라이언트 측에서 전송하는 대신 서버 측 세션에 저장하는 것입니다. 이와 같이 $_SESSION변수를 통해 배열에 액세스 할 수 있으며 양식을 통해 아무것도 전송할 필요가 없습니다. 이를 위해 php.net 세션의 기본 사용 예를 살펴보십시오 .
value속성 주위에 작은 따옴표를 사용해야했습니다 . 그렇지 않으면 직렬화 된 버전의 첫 번째 큰 따옴표에서 데이터가 잘 렸습니다.
클라이언트 측에서 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'])
항목을 검색하려면