【问题标题】:Check which dynamic buttons (input type button) the user has click on server side php检查用户点击了服务器端php的哪些动态按钮(输入类型按钮)
【发布时间】:2013-04-18 11:33:14
【问题描述】:

首先我要感谢你们每一天的帮助,回答问题。你为我节省了很多时间,我也学到了很多东西。

我在表单上说这个按钮。

<button type="button" value="Adventurous" name="adv" id="adv">Adventurous</button>
<button type="button" value="Discovery" name="disc" id="disc">Discovery</button>
<button type="button" calue="Easy-going" name="easy" id="easy">Easy-going</button>

当用户单击一个按钮以指定他在我们的示例中的感觉时,我在 jquery 上有以下代码来更改按钮的状态为选中并更改类(以不同的颜色显示等)

$(".tailor_field .tailor_mood_btn button").click(function() {
         var checked = $(this).attr('checked');
         $the_image = $(this).find("img");
        if(checked){
            $(this).removeClass("mood_on");
            $(this).attr('checked', false);
            $the_image.attr("src", templateDir+"/images/btn_on.png");
        }
        else{
            $(this).addClass("mood_on");
            $(this).attr('checked', true);
            $the_image.attr("src", templateDir+"/images/btn_off.png");
        }
    });

所以当用户按下提交时,我想在服务器端 (php) 上检查用户点击了哪些按钮?

其次,我想动态插入按钮。即在我的数据库中有一个字符串,将其分解为一个数组并循环每个元素以创建按钮等。如果我从一开始就不知道有多少按钮及其名称,我将如何知道要检查什么?也许有会话(如果有其他解决方案,我想避免它)?

非常感谢!

【问题讨论】:

    标签: php jquery forms button


    【解决方案1】:

    我会这样做:

    var checkedButtons = $(".tailor_field .tailor_mood_btn button[checked=true]");
    
    $("form").submit(function() {
      var data = [];
      checkedButtons.each(function(index, element) {
        var name = element.attr('name');
        var value = element.val();
        data[name] = value;
      });
    
      $.post('file.php', data);
    });
    

    data 变量是一个数组,其中键是单击按钮的名称,这些键的值是这些按钮的值。稍后向需要此数据的文件(file.php)发出 ajax 请求,其中数据数组在超全局 $_POST 中可用(例如$_POST['adv'] = "Adventurous"

    【讨论】:

    • 感谢您的回答。我最后用复选框做到了,但我保留你对未来项目的答案,我将在其中使用这种方法。在表格中,我还有其他元素。使用 $.post('file.php', data);其他元素也被发布或只有数据数组?您还说我可以采用 $_POST['adv'] = "Adventurous" 之类的值。问题是我不知道按钮的值(冒险等)。所以我必须像 ie data = $_POST['data'] 这样的数据数组对吗?
    • 在这个例子中,无论你在 file.php 中需要什么,你都必须放入 data 变量(其他表单值也可以,但你可以使用 $('form').serialize() 函数来帮助你和那个)。如果您不知道按钮的名称,则 data var 是一个数组,您可以在 file.php 中循环访问,并获取每个 key=>value 对。另外,请注意这是一个 AJAX 请求(异步),因此不会刷新页面,就像使用普通表单提交一样。如果您不熟悉 AJAX,我建议您学习它(如果您使用 jquery api.jquery.com/?p=291,这很容易),这是一项很棒的技术!
    • 感谢和抱歉迟到的回复!我对 AJAX 有点熟悉,但我现在正在学习它。非常感谢你的回答。你很有帮助
    【解决方案2】:

    我认为最好的答案是只使用复选框列表。这就是它们的目的。

    如果您想使用特殊按钮,这里有一种使用隐藏文件作为输入的方法,而不是实际按钮。我不知道元素“按钮”是否具有选中的属性。

    我只是使用了一个简单的小 javascript 来更改输入的值,您可以调整您当前的功能。请注意,我给可点击按钮一个新的 ID,将“_button”附加到数据库中的名称。

    <?php
    
    $string = "Adventerous,Discovery,Easy-Going"; /* this is from your database */
    $delimiter = ",";
    $button_values = explode($delimiter, $string);
    
    ?>
    <html>
    <body>
    <script type="text/javascript" >
    function checkbutton(id) {
             var val = document.getElementById(id).value;
             if (val == 0) 
                val = 1;
             else 
                val = 0;
    
             document.getElementById(id).value = val;
             alert("Clicked: " + id);
    }
    </script>
    <form action="form-catch.php" method="post">
    <?php
    
    foreach($button_values as $value) {
        echo '<button type="button" 
                    onClick="checkbutton(\''.$value.'\')">'.$value .'</button>
        <input type="hidden" name="'.$value.'" id="'. $value .'" value="0" ><br>';
    
    }
    
    ?>
    <input type="submit" value="submit">
    </form>
    </body></html>
    

    然后在服务器上,表单将从字符串中发送按钮名称,如果该按钮被选中,则发送 0 或 1。

    <?php 
    /* quick form checker to show what was clicked in the other form */
    foreach($_POST as $key => $val)
        echo "<br>    $key : $val";   
    ?>
    

    即使你不使用确切的代码,我希望这个概念能让你朝着正确的方向前进。

    1) 将数据作为表单输入发送。

    2) 遍历发送过来的所有内容并检查设置值。

    【讨论】:

    • 谢谢!是的,您对复选框是正确的。我避免使用它们,因为我想设置它们的样式,但是 IE8 不支持:checked 伪类,但最后我用复选框做了它,暂时忘记了 IE8。正如您所说,我认为处理数据更容易。关于你的回答。表单也有其他元素,不仅是按钮,那么在 foreach 循环中我如何将它们分开?即检查输入字段是否为空....做一些事情.....获取所有按钮并打印它们。
    • 这有点令人困惑。您的意思是当您从数据库中获取字符串时将它们分开?在这种情况下,您需要在数据库中进行某种组织,例如按钮列和文本字段之一。在两个循环中读取它们,附加类型如name="button_$value" 但是如果您的意思是在提交表单后将它们分开?然后就是使用附加的字符串来知道那一侧是什么。 if (strpos('button',$key) &gt; 0){
    • 对不起,我的英语不好。我的意思是在表格提交之后。您通常采用这样的提交值:$adv = $_POST['adv']。但是如果值是动态插入的,那么你可以做什么,所以你不知道你应该要求什么值来获取它并做你想做的任何事情。即 '$name = $_POST['name']' 但是使用按钮你是怎么做到的? '$buttons = $_POST[??]' ??谢谢!
    • 上例中的for循环(auick form checker ...)会将所有发布的信息读入某种可用的变量中。但是,如果您真的不知道它们发布时的按钮名称是什么,您就不能很容易地检查它们。您只能一般地处理它们,将它们存储在某个地方并稍后查看它们。因此,请确保在将它们放入数据库之前,通过 sql 攻击预防功能传递名称和值。例如:db_col_button_value = '". mysqli_real_escape_string($val),
    • 如果您知道哪些值将作为按钮提供,那么您可以在处理脚本上硬编码一个数组,或者查询数据库以找出已作为按钮输入的内容,然后使用该数组查看是否有一些重复项。也许您只是随机获得一个单词的问题答案,并且只想计算相同单词被回答的次数。在这种情况下,查询数据库是一种方式。您可以随时向现有回复添加计数或插入新回复。
    猜你喜欢
    • 2022-01-05
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多