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']);
여기에는 주로 두 가지 방법이 있습니다.
다음과 같은 방법으로 데이터를 직렬화합니다.
$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()
단, 배열 값에서 발생하는 구분(또는 이스케이프)에 문자를 사용하지 않아야 하며 이 방법으로는 배열 키를 전송할 수 없습니다.
특수 이름 있는 입력 요소의 속성을 사용합니다.
$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); ?>">
: "Discrivate 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 어레이를 복원할 수 있습니다.
다음과 같이 할 수 있습니다.
<input type="hidden" name="result" value="<?php foreach($postvalue as $value) echo $postvalue.","; ?>">
언급URL : https://stackoverflow.com/questions/6547209/passing-an-array-using-an-html-form-hidden-element
'source' 카테고리의 다른 글
MySQL - 우편번호 앞에 "0"을 붙이는 방법 (0) | 2022.11.05 |
---|---|
부울 필드를 인덱싱하면 성능이 향상됩니까? (0) | 2022.11.05 |
복잡한 v-if 문을 사용하지 않고 VueJ가 비동기 상태를 가져옵니다. (0) | 2022.11.05 |
MySQL Nested 선택 쿼리? (0) | 2022.11.05 |
PHP에서 컬 타임아웃 설정 (0) | 2022.11.05 |