0

我有一个联系表格,其中包含一些字段,例如姓名、电子邮件、订阅。订阅是一组复选框(数组),允许用户同时选择多个选项。

重要的:

请注意,我打算在没有 javascript 的情况下使表单工作,因此我需要输入名称为“订阅 []”。只需看一下复选框的 HTML 代码,您就会明白我的意思。

完整的源代码(我的调试):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>AJAX Posting of checkbox array</title>
</head>

<body>

<form id="frm_contact" name="frm_contact" method="post" action="ajax_contact_us.php">

<label for="name">Name</label>

<input type="text" name="name" id="name" class="text"  /><br />


<label for="email">Email</label>

<input type="text" name="email" id="email" class="text"  /><br />

<label for="subscribe">Subscribe</label>

<input type="checkbox" class="subscribe" name="subscribe" value="email" id="subscribe_0" />Email
<input type="checkbox" class="subscribe" name="subscribe" value="sms" id="subscribe_1" />SMS

<br />
<input type="submit" name="sbt_send" id="sbt_send" value="Send" class="btn_submit" />

</form>

<div id="test"></div>

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

<script type="text/javascript">
$(document).ready(function(){


    $('#sbt_send').click(function(e) {      

        $('#test').html();  

        var subscribe = new Array();
        $(".subscribe:checked").each(function() {
           subscribe.push($(this).val());
        });

        //Prepare data to be sent
        var dataString = $('#frm_contact').serialize();

        $.ajax({

          type: "POST",
          url: "ajax_contact_us11.php",
          data: dataString,
          dataType: 'json',
          cache: false,

          success: (function(response) 
            {
                if(response.error == 0)             
                {               
                    alert('yes');
                }
                else
                {
                    //alert('no');
                    $('#test').html('');                        

                    $('#test').append(  response.message['name'] + '<br />'+
                                        response.message['email'] + '<br />'+
                                        response.check );                                   
                }
            })                                                
        });                 


        e.preventDefault();

    });

});


</script>     
</body>
</html>

//ajax_contact_us11.php

<?php session_start();


$errors = array();

$str = '';

if( !isset( $_POST['name'] ) || trim( $_POST['name'] ) == '' )
{
    $errors['name'] = 'Enter name';
}

if( !isset( $_POST['email'] ) || trim( $_POST['email'] ) == '' )
{
    $errors['email'] = 'Enter email';
}

if( !isset( $_POST['subscribe'] ) || trim( $_POST['subscribe'] ) == '' )
{
    $errors['subscribe'] = 'Check at least one checkbox';
    $str = $errors['subscribe'];
}
else
{
    $str = $_POST['subscribe'];
}


if(count($errors))
{
    $error = 1;
    $message =  $errors;
}
else
{
    $error = 0;
    $message =  "success";
}   

print json_encode(array('error' => $error, 'message' => $message, 'check' => $str));
die(); 

?>

问题:

这里有2个问题。

  1. 如果我使用 subscribe[] 作为复选框输入名称,那么我无法获取复选框的任何值,即使它们都被选中或只选中其中一个。

  2. 如果我删除 [] 即仅使用“订阅”而不是“订阅 []”作为复选框的名称,那么即使选中了两个,我也只能检索复选框的一个值。

我假设如果使用“subscribe”而不是“subscribe[]”,解决这个问题会很容易,但我真的需要使用“subscribe[]”。当 JS 被禁用时,我可以使表单工作,但为了正确发布这两个值(如果两个复选框都被选中),我需要名称为“订阅 []”。

那么我如何检索复选框值并同时使用“订阅 []”作为名称?

请注意,我将一个冗长的表格简化为最基本的形式,例如清酒。我会在当前选项中添加更多复选框,以及一组具有其他名称的新复选框。因此,我会将这个问题的解决方案应用于我将添加到表单中的新输入集。

自从一天半以来,我一直在研究这个问题,尝试了 SO & Google 的许多解决方案,但不幸的是,没有任何帮助。

我感谢所有帮助。

4

1 回答 1

0

如果您[]在名称末尾使用 ,您将在$_POST条目中收到一个数组。所以如果你使用name="subscribe[]"你会得到$_POST['subscribe']一个数组

if( !isset( $_POST['subscribe'] ) || !is_array( $_POST['subscribe'] ))
{
    $errors['subscribe'] = 'Check at least one checkbox';
    $str = $errors['subscribe'];
}
else
{
    $str = $_POST['subscribe'];
}
于 2012-09-15T04:37:50.413 回答