【问题标题】:Post checkbox id to php via AJAX通过 AJAX 将复选框 id 发布到 php
【发布时间】:2018-12-03 20:42:44
【问题描述】:

我想使用复选框创建网络图。如果我选择 1 个或多个复选框,然后单击按钮,我想从选定的复选框中绘制网络图。它实际上有效,但如果我选择超过 1 个,它只会打印 1 个节点,但如果我只选择 1 个,它工作得很好。我该如何解决这个问题?

index.php

<td align="center"><input id="'.$row["id2"].'" class="checkboxes" type="checkbox" value="'.$row["id2"].'"</td>

<script>
            $(document).ready(function(){
                $('.relations').click(function(e){  
                    e.preventDefault();
                    $("#dataModal3").modal("hide");

                    // Checkboxes
                    var insert=[];
                    $('.checkboxes').each(function(){
                        if($(this).is(":checked")){
                            insert.push($(this).val());
                        }
                    });
                    insert=insert.toString();

                    var data_id = $(this).attr("id");  
                    $.ajax({  
                        url:"nodes.php",
                        method:"post",
                        dataType: "json",
                        data:{data_id:data_id,insert:insert},  
                        success:function(data){  
                            $('#moreInfo').html(data);  
                            $('#dataModal').modal("show");  
                            var nodeDatas = new vis.DataSet();
                            nodeDatas = data;

                            $.ajax({
                                method:"post",
                                dataType: "json",
                                url: "edges.php",
                                data:{data_id:data_id},
                                success: function(data){
                                    var edgeDatas = new vis.DataSet();
                                    edgeDatas = data;
                                    var myDiv = document.getElementById("moreInfo");

                                    data={
                                        nodes: nodeDatas,
                                        edges: edgeDatas
                                    };

                                    var options = {

                                    };

                                    var network = new vis.Network(myDiv, data, options);
                                }
                            });
                        }  
                    }); 
                });
            });
        </script>

nodes.php

if(isset($_POST["insert"])){

            $sql2=$conn->prepare("SELECT id, data
                FROM table1

                WHERE id=?
                GROUP BY id");

            $sql2 -> bind_param('i', $_POST['insert']);
            $sql2 -> execute();
            $result2 = $sql2 -> get_result();
            $sql2 -> close();

            while($row = mysqli_fetch_assoc($result2)){
                $id2 = $row['id'];
                $data = $row['data'];


                $arr[] = array("id" => $id2,
                    "label" => $data);
            }

        }

【问题讨论】:

  • 尝试将WHERE id=? 更改为WHERE id in (?)

标签: javascript php ajax checkbox


【解决方案1】:

使用下面的查询,需要使用mysql的IN参数。

$sql2=$conn->prepare("SELECT id, data FROM table1 WHERE id IN (".$_POST['insert'].") GROUP BY id");

【讨论】:

  • 不!不要使用这个!这是一个安全漏洞。你正在准备一份声明。执行语句时传递 $_POST 值。该变量没有任何验证!这非常适合 SQL 注入。
  • 真正的 $_POST 从未直接使用过,但问题是 SQL 函数只需要使用 IN 函数而不是等于。
  • 如果我用"); drop table table1; -- * 发送一个POST,它会在里面插入那个SQL 代码。这是一个巨大的安全漏洞!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 2021-10-18
  • 1970-01-01
  • 2013-03-26
相关资源
最近更新 更多