여러 확인란에서 $ _POST 받기


159

여러 개의 확인란이있는 1 개의 양식이 있습니다 (각각 코드가 있음).

<input type="checkbox" name="check_list" value="<? echo $row['Report ID'] ?>">

어디 $row['Report ID']데이터베이스의 기본 키는 있으므로 각 값이 다릅니다.

어떤 확인란이 선택되었는지 어떻게 알 수 있습니까? (아마도 여러)

이것은받은 편지함 시스템을위한 것이며 $row['Report ID']확인란을 선택한 모든 메시지 (ids :)를 삭제하기 위해 버튼을 클릭 하십시오.

답변:


334

양식에서 이름을로 설정하면 check_list[]모든 확인란에 배열 ( $_POST['check_list'][]) 로 액세스 할 수 있습니다 .

요청한 샘플은 다음과 같습니다.

<form action="test.php" method="post">
    <input type="checkbox" name="check_list[]" value="value 1">
    <input type="checkbox" name="check_list[]" value="value 2">
    <input type="checkbox" name="check_list[]" value="value 3">
    <input type="checkbox" name="check_list[]" value="value 4">
    <input type="checkbox" name="check_list[]" value="value 5">
    <input type="submit" />
</form>
<?php
if(!empty($_POST['check_list'])) {
    foreach($_POST['check_list'] as $check) {
            echo $check; //echoes the value set in the HTML form for each checked checkbox.
                         //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5.
                         //in your case, it would echo whatever $row['Report ID'] is equivalent to.
    }
}
?>

4
하나의 check_list [] 체크 상자를 echo (ing)의 예를 들어 주시겠습니까? (그리고 선택한 두 사람과 비슷할까요?) 감사합니다.
제임스 앤드류

2
또한 HTML에 값이 설정되어 있지 않으면 $check같 도록 지정해야합니다 on.
Sean Walsh

9
if($_POST)-쓸모 $_POST없고 항상 사실입니다. !empty($_POST['check_list'])대신 확인해야 합니다.
Mārtiņš Briedis

3
배열 인덱스가 존재하지 않으면 범위를 벗어난 배열 인덱스를 발생시키는 @ MārtiņšBriedis 더 나은 점검은array_key_exists('check_list', $_POST) && !empty($_POST['check_list'])
Tyzoid

2
@Tyzoid empty()는이 오류를 발생시키지 않습니다. 매뉴얼에서 :empty() does not generate a warning if the variable does not exist.
Mārtiņš Briedis

22

편집하다 하려면 @Marc 아래의 코멘트에 말을 반영합니다.

게시 된 모든 값을 반복 할 수 있습니다.

HTML :

<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />

PHP :

foreach($_POST['check_list'] as $item){
  // query to delete where item = $item
}

1
이상한 오류 : 경고 : 30 행의 /home1/mountgam/public_html/zombiewrath/reports.php에서 foreach ()에 잘못된 인수가 제공되었습니다 = =
Andrew Andrew

2
[]필드 정의에서 구문 을 사용 하면 PHP가 $ _POST 값을 배열로 만들 수 있습니다. 그렇지 않으면 단일 비 배열 값이되어 foreach () 루프가 폭발합니다.
Marc B

1
두 가지를 모두 시도했지만 다시 시도하겠습니다 ([/ 형식없이])
James Andrew

16

확인란의 이름을 적절하게 지정해야합니다.

<input type="checkbox" name="check_list[]" value="…" />

그런 다음 모든 확인란에 액세스 할 수 있습니다

// loop over checked checkboxes
foreach($_POST['check_list'] as $checkbox) {
   // do something
}

추신. 출력을 올바르게 이스케이프해야합니다 ( htmlspecialchars())


12
<input type="checkbox" name="check_list[<? echo $row['Report ID'] ?>]" value="<? echo $row['Report ID'] ?>">

그리고 포스트 후에, 당신은 그것들을 반복 할 수 있습니다 :

   if(!empty($_POST['check_list'])){
     foreach($_POST['check_list'] as $report_id){
        echo "$report_id was checked! ";
     }
   }

또는 이전 페이지에서 게시 된 특정 값을 얻으십시오.

if(isset($_POST['check_list'][$report_id])){
  echo $report_id . " was checked!<br/>";
}

12

죄송합니다, 이전 주제이지만 @JamesRattray 및 다른 사람들이 문제를 겪었던 것에 대해 언급해야 할 중요한 부분입니다.

PHP 스크립트에 여러 값을 게시하려고 할 때 input태그를 직접 닫지 마십시오 (를 사용하여 />). 태그를 자체 닫으면 태그가 배열 정의를 종료하고 제출시 스크립트에 단일 값만 게시됩니다. 실제로 @Scone의 답변은 />이 변경 될 때까지 작동하지 않을 수 있습니다 .

이것이 원인입니다 Warning: Invalid argument supplied for foreach() in /home1/... 경우 PHP 오류가 .

편집 : 아래 의견에서 언급했듯이 추가 연구에 따르면 이것이 DOCTYPE에 의존적입니다. XHTML에 DOCTYPE을 설정 한 경우 입력 태그를 닫아야합니다. DOCTYPE이 HTML5로 설정되어 있으면 입력 태그를 닫지 않아야합니다. 또한 사용자가 페이지를보고있는 브라우저와 코드에 지정된 DOCTYPE을 얼마나 잘 따르는 지에 따라 이것이 결정될 수 있습니다.


잘못되었습니다. 자체 결산 입력 태그는 PHP로 전달되는 값에 영향을 미치지 않습니다.
랩터

@Raptor 추가 연구에서 예, AND에 영향을 줄 수 있습니다. 그러나 추가 연구에서 DOCTYPE이 설정된 경우에만 영향을받습니다. HTML5는 태그가 닫혀있는 것으로 인식하지 않으며 닫히면 유효하지 않습니다. XHTML에서는 태그를 닫아야합니다. 여기에 W3Schools 정보 페이지를 참조하십시오 : link
Jon Gallup

@Raptor W3Schools는 오류로 가득 차있을 수 있지만 W3Schools (및 다른 웹 사이트)가 제공 할 수있는 정보는 문제에 대해 일관성이 있다는 점에 유의해야합니다. 나는 단지 문제를 해결하기 위해 어떤 정보라도 문제를 해결하는 과정에서 NO 정보보다 낫다는 것을 말하고 있습니다. 이 경우 다른 참조를 원하면 W3 은 입력 태그가 비준수이므로 어떤 식 으로든 닫을 수 없도록 지정합니다. DOCTYPE을 반영하여 원래 답변을 편집하겠습니다.
Jon Gallup 2012 년

5

꽤 간단합니다. 주의를 기울이면 바로 얻을 수 있습니다! :)

html 배열을 만든 다음 php 배열로 보냅니다. html 코드는 다음과 같습니다.

<input type="checkbox" name="check_list[1]" alt="Checkbox" value="checked">
<input type="checkbox" name="check_list[2]" alt="Checkbox" value="checked">
<input type="checkbox" name="check_list[3]" alt="Checkbox" value="checked">

어디는 [1] [2] [3]있습니다 ID당신 것 의미, 메시지의의echo 당신 $row['Report ID']자신을 대신합니다.

그런 다음 양식을 제출하면 PHP 배열은 다음과 같습니다.

print_r($check_list)

[1] => checked [3] => checked

어느 것이 확인되었고 어떤 것이 아닌지에 따라.

이 시점부터 계속할 수 있다고 확신합니다.


6
그보다 check_list[]는로 시작 한다는 것을 기억하십시오 . check_list[0]check_list[1]
Arbiter

1
value = "checked"는 비생산적입니다. 값을 지정하지 않으면 'on'이됩니다. 값 속성에 제출하려는 값을 지정하면 PHP 배열 인덱스가 될 필요가없는 거의 임의의 데이터를 보낼 수 있다는 장점이 있습니다. foreach로 배열 값을 반복하는 것도 키를 반복하는 것보다 쉽습니다.
Rudiger W.

0

밸로와 안타깝게도 matriz.

    // Primero paso las matrices del post a valores separados por coma.
    foreach($_POST as $n => $v) if (is_array($v)) $_POST[$n] = implode(",", $v);

Coneto me aseguro que los valores sean 1 y separados por coma. MySQL에 대한 자세한 내용은 다음을 참조하십시오 :

Where id in ($_POST["id"])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.