首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP复选框问题

PHP复选框问题
EN

Stack Overflow用户
提问于 2010-07-13 09:22:25
回答 4查看 1.5K关注 0票数 2

我在这里要发疯了,我从一个表单中得到了一个复选框数组,我正在尝试使用$_POST。除复选框外,我的表单上的所有内容都很好。这些复选框会发邮件,但顺序不对。例如,当我想要checkbox[0]checkbox[2]时,我实际上得到了checkbox[0]checkbox[1]

我尝试过许多不同的方法来获得复选框的值,包括isset,但是我仍然有同样的问题。如果确实选中了复选框,我只需要将on的复选框值存储在数据库中。

我的密码在下面。$in_production是复选框。如果需要,我也可以提供生成复选框的代码。

提前谢谢。

代码语言:javascript
运行
复制
if ($_GET['action'] == 'Edit_Product'){

    include("../dbinfo.php");

    $q_id = $_GET['q_id'];

    for ($i = 0; $i < count($_POST['p_id']); $i++){

        $result = mysql_query('SELECT * FROM products WHERE q_id = '.$q_id);
        $num = mysql_num_rows($result);

        $p_id = ($_POST['p_id'][$i]);
        $in_production = ($_POST['in_production'][$i]);
        $p_name = ($_POST['p_name'][$i]);
        $p_price = ($_POST['p_price'][$i]);

        $p_name_conflict = FALSE;

        for ($ii = 0; $ii < $num; $ii++){
            $row = mysql_fetch_array($result);
            $p_name_conflict_check = $row['p_name'];
            $p_id_conflict_check = $row['p_id'];

            if($p_name_conflict_check == $p_name &&
              $p_id_conflict_check != $p_id){
                $p_name_conflict = TRUE;
            }

        }

        if ($p_name_conflict == FALSE){
            $query = "UPDATE products SET p_name='$p_name',
              p_price='$p_price', in_production='$in_production',
              last_modified=CURDATE() WHERE p_id = '$p_id'";
            mysql_query($query);
        }

        else{
            $update_failures =+1;
        }

    }

    mysql_close($link);

    if($update_failures == 0){
        header("Location: Products_Updated.html");
    }

    elseif ($update_failures != 0){
        header("Location: Products_Exist.php?update_failures=".$update_failures);
    }

}

我不知道为什么但是代码块图标现在不存在.所以我的代码不全是漂亮的。而且,我知道我的代码效率很低,但我现在只是想让它正常工作,然后再进行微调。我也愿意听取效率方面的建议,但这不是我对这个问题的主要目标。

编辑:这是来自HTML.HTML的表单

代码语言:javascript
运行
复制
        <form id="form" name="form" method="post" action="/Management/Products/Product_Management.php?action=Edit_Product&q_id=<?php echo "$q_id" ?>">

                <?php

                    include("../dbinfo.php");   

                    $result = mysql_query('SELECT * FROM products WHERE q_id =' . $q_id);
                    $num = mysql_num_rows($result);
                    mysql_close($link);

                    for ($i = 0; $i < $num; $i++){
                        $row = mysql_fetch_array($result);

                        $p_id = $row['p_id'];
                        $p_name = $row['p_name'];               
                        $p_price = $row['p_price'];
                        $in_production = $row['in_production'];
                        $date_added = $row['date_added'];
                        $last_modified = $row['last_modified'];

                        if($in_production == 'on'){
                            $checked = 'checked';
                        }

                        else{
                            $checked = '';
                        }

                        echo "<div>Product ID# " . $p_id . "<label style=\"font-style:italic\"> (Originally added on " . $date_added . ", last modified on " . $last_modified . ")</label></div><br/>";
                        echo "<input id=\"p_id" . $p_id . "\" class=\"text\" type=\"hidden\" name=\"p_id[]\" value=\"" . $p_id . "\"/>";

                        echo "<label>Product Name *</label><br/>";
                        echo "<div><label style=\"font-style:italic\">(Product still in production <input type=\"checkbox\" name=\"in_production[]\"" . $checked . " style=\"width:15px\"/>)</label></div>";    
                        echo "<input id=\"p_name" . $p_id . "\" class=\"text\" type=\"text\" name=\"p_name[]\" maxlength=\"20\" onfocus=\"on_focus(this)\" onblur=\"on_blur(this)\" value=\"" . $p_name . "\"/><br/><br/>";

                        echo "<label>Product Price *</label><br/>";
                        echo "<div><label style=\"font-style:italic\">(Without taxes)</label></div>";
                        echo "<input id=\"p_price" . $p_id . "\" class=\"text\" type=\"text\" name=\"p_price[]\" maxlength=\"6\" onkeypress=\"return currency(this, event)\" onchange=\"currency_format(this)\" onfocus=\"on_focus(this)\" onblur=\"on_blur(this)\" value=\"" . $p_price . "\"/><br/><br/><br/><br/>";

                    }

                ?>

            <input class="button" type="button" value="Submit" onclick="product_edit_form_check()"/><br/><br/>

        </form>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-13 09:29:23

如果您能够发布一些HTML部分,这样我们就可以看到您是如何创建表单的,这将是有帮助的。似乎在数组中没有索引的情况下生成复选框,所以所有复选框都有名称/id "checkbox[]",如果您不关心索引,这是可以的,但是如果发布,数组将从"0“开始编号,然后计数,这就是即使选中了"0”和"2“,也会出现"0”和"1“的原因。

在生成HTML时,尝试给出复选框的名称/id号,比如“复选框”、"checkbox1“、"checkbox2”等等。因此,当选中复选框0和2时,您应该发布这些值(包括正确的索引)。

票数 3
EN

Stack Overflow用户

发布于 2010-07-13 09:26:27

在HTML复选框中,您必须记住的是,它们只在选中时才会发布值。如果他们不被检查,他们就不会被张贴。

考虑到这一点,您应该给每个复选框一个名称,然后在POST中对其进行测试,以检测它是否已被传回。

代码语言:javascript
运行
复制
if (isset($_POST['MyCheckbox'])) {

} // else it wasn't checked!
票数 3
EN

Stack Overflow用户

发布于 2010-07-13 09:33:50

向我们展示复选框的HTML。

另外,还会发生SQL注入攻击--用户可以在查询结束时获取他们喜欢的任何SQL。类似这样的内容说明了您应该如何处理不受信任的数据:

代码语言:javascript
运行
复制
//we're expect a number, so ensure we get one
$q_id = intval($_GET['q_id']); 

//get into the habit of quoting query params, 
//or better yet, use a wrapper library to help you
$sql="select * from products where q_id='".mysql_real_escape_string($q_id)."'";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3235743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档