จะอ่านอย่างไรถ้ามีการทำเครื่องหมายในช่อง PHP?


266

จะอ่านอย่างไรถ้ามีการทำเครื่องหมายในช่อง PHP?


8
คำถามนี้จริงๆแล้วหมายถึง " ถูกทำเครื่องหมาย" (เมื่อส่งแบบฟอร์ม) PHP พิจารณาว่าช่องทำเครื่องหมายถูกเลือกจะต้องมีการโทร Ajax เมื่อองค์ประกอบถูกสลับ
rybo111

คำตอบ:


342

หากหน้า HTML ของคุณมีลักษณะดังนี้:

<input type="checkbox" name="test" value="value1">

หลังจากส่งแบบฟอร์มคุณสามารถตรวจสอบกับ:

isset($_POST['test'])

หรือ

if ($_POST['test'] == 'value1') ...

57
ช่องทำเครื่องหมายสามารถมีค่าonเมื่อตรวจสอบแล้ว ดังนั้นเพื่อความเข้ากันได้มันใช้งานง่ายisset($_POST['checkboxName'])กว่า
Damiqib

13
เบราว์เซอร์บางตัวอาจสนับสนุนค่า "เปิด" เมื่อไม่ได้ตั้งค่าแอตทริบิวต์ แต่โดยทั่วไปจะเป็นการดีกว่าถ้าตั้งค่าแอตทริบิวต์และตรวจสอบเมื่อส่ง
m_vitaly

3
'Value1' เปลี่ยนแปลงหรือไม่หากทำเครื่องหมายในช่อง
MoralCode

10
@Developer_ACE เว้นแต่ว่าฉันเข้าใจผิดคุณคุณค่าในตัวอย่างนี้จะเป็นvalue1ถ้ามีการทำเครื่องหมายในช่องทำเครื่องหมาย หากไม่มีการตรวจสอบ$_POST['test']จะไม่มีอยู่จริง
rybo111

104

Zend Framework ใช้แฮ็คที่ดีในช่องทำเครื่องหมายซึ่งคุณสามารถทำเองได้:

ช่องทำเครื่องหมายทั้งหมดที่สร้างขึ้นจะเกี่ยวข้องกับเขตข้อมูลที่ซ่อนอยู่ในชื่อเดียวกันวางไว้ก่อนหน้าช่องทำเครื่องหมายและมีค่าเป็น "0" จากนั้นหากช่องทำเครื่องหมายของคุณเป็นค่า "1" คุณจะได้รับค่า '0' หรือ '1' เสมอใน GET หรือ POST ที่ได้

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1"> 

ฉันก็สังเกตเห็นเกี่ยวกับเรื่องนี้ แต่ฉันรู้สึกปลอดภัยที่จะใช้: Zend Framework ก็ทำเช่นกัน!
hpaknia

สิ่งนี้น่าสนใจ แต่มีความเป็นไปได้เล็กน้อยที่ตัวแทนผู้ใช้อาจส่งค่าแรกแทนที่จะเป็นค่าสุดท้ายโดยสมมติว่ามีการทำเครื่องหมายในช่องทำเครื่องหมาย
rybo111

@ rybo111 สำหรับตัวแทนผู้ใช้ฉันไม่คิดอย่างนั้น แต่สำหรับตัวแยกวิเคราะห์ฟอร์มจาวาสคริปต์ที่กำหนดเองคุณควรดูแล
regilero

ขออภัยมีคนอธิบายฉันได้ไหมว่ามันทำงานอย่างไร ฉันไม่เข้าใจ ทำไมฟิลด์ที่ซ่อนอยู่หากมีการส่งเฉพาะค่าสุดท้าย (ค่าinput[type="checkbox"]เดียว) เสมอ
tonix

6
เมื่อไม่ได้ทำเครื่องหมายที่ช่องทำเครื่องหมายจะไม่ถูกส่งในโพสต์ (ดังนั้นจะมีการส่งเฉพาะการซ่อนเท่านั้น) เมื่อตรวจสอบแล้วมันจะถูกส่งและจะเขียนทับค่าที่ซ่อนอยู่
regilero

53

เมื่อใช้ช่องทำเครื่องหมายเป็นอาร์เรย์:

<input type="checkbox" name="food[]" value="Orange">
<input type="checkbox" name="food[]" value="Apple">

คุณควรใช้in_array():

if(in_array('Orange', $_POST['food'])){
  echo 'Orange was checked!';
}

อย่าลืมตรวจสอบอาร์เรย์ที่ตั้งค่าไว้ก่อนเช่น:

if(isset($_POST['food']) && in_array(...

ช่องทำเครื่องหมายเป็นอาร์เรย์และforeach ($_POST['food'] as $selected_food)การทำงานในการตรวจสอบอย่างใดอย่างหนึ่งเป็นสิ่งที่ดีขอบคุณ
bcag2

42

ให้ html ของคุณสำหรับช่องทำเครื่องหมายของคุณจะเป็นเช่นนั้น

<input type="checkbox" name="check1">

จากนั้นหลังจากส่งแบบฟอร์มของคุณคุณต้องตรวจสอบเช่น

if (isset($_POST['check1'])) {

    // Checkbox is selected
} else {

   // Alternate code
}

สมมติว่าcheck1ควรเป็นชื่อช่องทำเครื่องหมายของคุณและวิธีการส่งแบบฟอร์มของคุณGETนั้นคุณต้องตรวจสอบกับ$_GETตัวแปรเช่น

if (isset($_GET['check1'])) {

   // Checkbox is selected
} 


6

ฉันใช้เคล็ดลับนี้มาหลายปีแล้วและทำงานได้อย่างสมบูรณ์แบบโดยไม่มีปัญหาใด ๆ กับสถานะช่องทำเครื่องหมายที่ถูกตรวจสอบ / ไม่ถูกตรวจสอบในขณะที่ใช้งานกับ PHP และฐานข้อมูล

รหัส HTML: (สำหรับเพิ่มหน้า)

<input name="status" type="checkbox" value="1" checked>

คำแนะนำ: ลบ "ช่องทำเครื่องหมาย" หากคุณต้องการแสดงเป็นไม่เลือกโดยค่าเริ่มต้น

รหัส HTML: (สำหรับแก้ไขหน้า)

<input name="status" type="checkbox" value="1" 
<?php if ($row['status'] == 1) { echo "checked='checked'"; } ?>>

รหัส PHP: (ใช้สำหรับเพิ่ม / แก้ไขหน้า)

$status = $_POST['status'];
if ($status == 1) {
$status = 1;
} else {
$status = 0;
}

คำแนะนำ: จะมีค่าว่างเสมอยกเว้นว่าผู้ใช้ตรวจสอบ ดังนั้นเรามีโค้ด PHP ที่จะจับมันแล้วเก็บค่าเป็น 0 จากนั้นเพียงใช้ตัวแปร $ status สำหรับฐานข้อมูล


1
นี่เป็นรูปแบบที่ดีจริงๆในการทำ php แบบง่าย ๆ แต่ต้องทราบว่าค่าของช่องทำเครื่องหมายเป็นสตริงเมื่อมันถูกเปิดใช้งานค่าที่ไม่มีอยู่หากมีการตรวจสอบ
Elvis Technologies

4

ในการตรวจสอบว่ามีการทำเครื่องหมายในช่องทำเครื่องหมายใช้เปล่า ()

เมื่อส่งแบบฟอร์มช่องทำเครื่องหมายจะถูกตั้งค่าเสมอเนื่องจากตัวแปรPOSTทั้งหมดจะถูกส่งพร้อมกับแบบฟอร์ม

ตรวจสอบว่าช่องทำเครื่องหมายถูกทำเครื่องหมายด้วยว่างเปล่าดังนี้:

//Check if checkbox is checked    
if(!empty($_POST['checkbox'])){
 #Checkbox selected code
} else {
 #Checkbox not selected code
}

3
หากไม่ได้ทำเครื่องหมายในช่องก็จะไม่ถูกโพสต์ดังนั้นจึงจะถูกตั้งค่าทันที
Wessam El Mahdy

^
Not

3

คุณสามารถตรวจสอบค่าที่สอดคล้องกันว่าถูกตั้งค่าและไม่ว่างเปล่าในอาร์เรย์ $ _POST หรือ $ _GET ขึ้นอยู่กับการกระทำของแบบฟอร์มของคุณ

ie: ด้วยฟอร์ม POST โดยใช้name"test" (เช่น: <input type="checkbox" name="test">คุณจะใช้:

if(isset($_POST['test']) {
   // The checkbox was enabled...

}

2

เรียนรู้เกี่ยวกับissetสิ่งที่เป็น "ฟังก์ชั่น" ในตัวที่สามารถใช้ในถ้าคำสั่งที่จะบอกว่าตัวแปรมีการใช้งานหรือการตั้งค่า

ตัวอย่าง:

    if(isset($_POST["testvariabel"]))
     {
       echo "testvariabel has been set!";
     }

2

ตัวอย่างข้างต้นใช้งานได้เฉพาะเมื่อคุณต้องการแทรกค่าไม่เป็นประโยชน์สำหรับการอัพเดทค่าที่แตกต่างไปยังคอลัมน์ต่าง ๆ ดังนั้นนี่คือเคล็ดลับเล็ก ๆ ของฉันในการอัปเดต:


//EMPTY ALL VALUES TO 0 
$queryMU ='UPDATE '.$db->dbprefix().'settings SET menu_news = 0, menu_gallery = 0, menu_events = 0, menu_contact = 0';
            $stmtMU = $db->prepare($queryMU);
            $stmtMU->execute();
if(!empty($_POST['check_menus'])) {
    foreach($_POST['check_menus'] as $checkU) {
try {
//UPDATE only the values checked
    $queryMU ='UPDATE '.$db->dbprefix().'settings SET '.$checkU.'= 1';
            $stmtMU = $db->prepare($queryMU);
            $stmtMU->execute();  
        } catch(PDOException $e) {
          $msg = 'Error: ' . $e->getMessage();}

        }
}
<input type="checkbox" value="menu_news" name="check_menus[]" />
<input type="checkbox" value="menu_gallery" name="check_menus[]" />

....

ความลับเป็นเพียงแค่อัปเดตค่าทั้งหมดก่อน (ในกรณีนี้เป็น 0) และเนื่องจากจะส่งเฉพาะค่าที่ตรวจสอบเท่านั้นนั่นหมายความว่าทุกสิ่งที่คุณได้รับควรถูกตั้งค่าเป็น 1 ดังนั้นทุกสิ่งที่คุณตั้งเป็น 1

ตัวอย่างคือ PHP แต่ใช้กับทุกอย่าง

มีความสุข :)


2

คุณสามารถทำได้ด้วยตัวย่อหาก:

$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;

หรือด้วย PHP7 ใหม่ Null coalescing operator

$check_value = $_POST['my_checkbox_name'] ?? 0;


1

การตรวจสอบบูลีนแบบเรียบง่ายพร้อมการรักษาตำแหน่งสวิตช์

<?php

$checked = ($_POST['foo'] == ' checked');

?>

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>

1
เมื่อให้คำตอบดีกว่าที่จะให้คำอธิบายว่าทำไมคำตอบของคุณจึงเป็นคำตอบ โดยเฉพาะอย่างยิ่งเมื่อตอบโพสต์เก่ามาก 11 คำตอบอื่น ๆ
Stephen Rauch

เป็นเรื่องที่ดีที่คุณตระหนักถึงความต้องการช่องทำเครื่องหมายเพื่อรักษาสถานะไว้ อย่างไรก็ตามรหัสของคุณในการทำเช่นนี้ไม่ถูกต้อง
Vern Jensen

1
<?php

  if (isset($_POST['add'])) {

    $nama      = $_POST['name'];
    $subscribe = isset($_POST['subscribe']) ? $_POST['subscribe'] : "Not Checked";

    echo "Name: {$nama} <br />";
    echo "Subscribe: {$subscribe}";

    echo "<hr />";   

  }

?>

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" >

  <input type="text" name="name" /> <br />
  <input type="checkbox" name="subscribe" value="news" /> News <br />

  <input type="submit" name="add" value="Save" />

</form>

คุณอธิบายเป้าหมายของคุณได้ที่นี่
Elvis Technologies

0

ใน BS3 คุณสามารถใส่

  <?php
                  $checked="hola";
                  $exenta = $datosOrdenCompra[0]['exenta'];
                  var_dump($datosOrdenCompra[0]['exenta']);
                  if(isset($datosOrdenCompra[0]['exenta']) and $datosOrdenCompra[0]['exenta'] == 1){

                      $checked="on";

                  }else{
                    $checked="off";
                  }

              ?>
              <input type="checkbox" id="exenta" name="exenta" <?php echo $checked;?> > <span class="label-text"> Exenta</span>

โปรดทราบการใช้งานของisset($datosOrdenCompra[0]['exenta'])



0

Wordpress มีchecked()ฟังก์ชั่น การอ้างอิง: https://developer.wordpress.org/reference/functions/checked/

checked( mixed $checked, mixed $current = true, bool $echo = true )

คำอธิบายเปรียบเทียบสองข้อโต้แย้งแรกและถ้าเครื่องหมายเหมือนกันตามที่ตรวจสอบ

พารามิเตอร์ $ checked (ผสม) (จำเป็น) หนึ่งในค่าที่จะเปรียบเทียบ

$ current (Mixed) (เป็นทางเลือก) (จริง) ค่าอื่น ๆ ที่จะเปรียบเทียบหากไม่ใช่แค่ค่าจริงค่าเริ่มต้น: true

$ echo (bool) (เป็นทางเลือก) ไม่ว่าจะเป็น echo หรือเพียงแค่ส่งคืนค่าเริ่มต้น: จริง

ส่งคืนแอตทริบิวต์ html #Return (สตริง) หรือสตริงว่าง


-3
<?php

if(isset($_POST['nameCheckbox'])){
    $_SESSION['fr_nameCheckbox'] = true;
}

?>

<input type="checkbox" name="nameCheckbox" 

<?php 

if(isset($_SESSION['fr_nameCheckbox'])){
    echo 'checked'; 
    unset($_SESSION['fr_nameCheckbox']);
} 

?>

ยินดีต้อนรับสู่ Stack Overflow! แม้ว่าข้อมูลโค้ดนี้อาจช่วยแก้ปัญหาได้ แต่ก็ไม่ได้อธิบายว่าทำไมหรือตอบคำถามอย่างไร โปรดระบุคำอธิบายสำหรับรหัสของคุณเนื่องจากช่วยปรับปรุงคุณภาพการโพสต์ของคุณได้อย่างแท้จริง จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและคนเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำรหัสของคุณ ผู้ตั้งค่าสถานะ / ผู้ตรวจทาน: สำหรับคำตอบที่เป็นรหัสเท่านั้นเช่นคำตอบลงคะแนนอย่าลบ!
Scott Weldon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.