【问题标题】:Getting value from two checkboxes and inserting into mysql从两个复选框中获取值并插入 mysql
【发布时间】:2012-10-20 10:32:53
【问题描述】:

我遇到了一个问题...我有一对复选框,我已经命名并编号了。我需要标记复选框并将它们插入到我的数据库中。以下是我创建复选框的方式:

<div class="check"><input type="checkbox" name="acharge1" value="1"> <span style="color: #0C0">$$</span><input type="checkbox" name="amenities1" value="1">Amenity 1</div>
<div class="check"><input type="checkbox" name="acharge2" value="1"> <span style="color: #0C0">$$</span><input type="checkbox" name="amenities2" value="1">Amenity 2</div>
<div class="check"><input type="checkbox" name="acharge3" value="1"> <span style="color: #0C0">$$</span><input type="checkbox" name="amenities3" value="1">Amenity 3</div>
<div class="check"><input type="checkbox" name="acharge4" value="1"> <span style="color: #0C0">$$</span><input type="checkbox" name="amenities4" value="1">Amenity 4</div>

其中一些会被检查,而另一些则不会。此外,它们并不总是成对检查,​​但我必须成对将它们上传到我的数据库。换句话说:acharge1 和ities1 将不会被检查,但acharge2 和ities2 会被检查。所以我尝试了一个 foreach 循环,但没有奏效。我也尝试了一个while循环,但我不知道要检查什么。所以这就是我现在所拥有的:

$aa = 1;
    echo "Amenity: ".$_POST['amenities'.$aa];
    $aa++;
    while(isset($_POST['amenities'.$aa])){
        $amen = $_POST['amenities'.$aa];
        if(isset($_POST['acharge'.$aa])){
        $acharge = $_POST['acharge'.$aa];
        }else{
            $acharge = "0";
            }
        echo "Amen: ". $amen." charge: ".$acharge;  
        mysql_query("INSERT INTO hotel_amenities (amenity_code, hotel_id, charge) VALUES ('$amen','$hotel_id','$acharge')") or die(mysql_error());
        echo $aa;
        $aa++;
        }

但正如您所见,这不起作用,因为如果未检查便利设施 1,它将不会通过其他人执行 while 循环。无论如何,任何关于我如何实现这一目标的帮助都将不胜感激!

编辑** 这是概念,因此您可以看到,有时他们的钱箱会与便利设施一起检查,有时则不会。 http://www.cancunelitetravel.com/ale/Capture.PNG

【问题讨论】:

  • 它们必须插入mysql的同一行。

标签: php loops checkbox


【解决方案1】:

你的做法是完全错误的。如果你不确定可用的选项数量,你应该这样写:

$cnt = 0;
foeach ($_POST as $option => $value) {
    if (preg_match("/(?:acharge|amenities)(\\d+)/", $option, $matches)) {
        $cnt = max($cnt, intval($matches[1]));
    }
}
for ($i = 0; $i < $cnt; $i ++) {
    $amenity = $_POST['amenities' . $i];
    $value = "0";
    if (array_key_exists("acharge" . $i, $_POST)) {
        $value = "1";
    }
    mysql_query("INSERT INTO hotel_amenities (amenity_code, hotel_id, charge) VALUES ('$amenity','$hotel_id','$value')") or die(mysql_error());
}

我认为这会为您解决问题。这是假设您之前已经建立了连接并处理了$hotel_id 的值。

【讨论】:

  • 这不完全正确,$amen 是我需要获取的另一个输入复选框。他们是两个。一个是酒店设施,另一个是旁边的复选框,表示是否需要额外收费。
  • 我为 gt 添加了一个更好的主意。非常感谢!
  • 我试过这个并得到一个错误:警告:preg_match()[function.preg-match]:分隔符不能是字母数字或第 79 行 C:\wamp\www\olympus-backend\inc\add-hotel.php 中的反斜杠
  • 对不起,忘记装箱正则表达式。现在将编辑答案以提供更好的答案。
  • 顺便说一下,这将为amenity_code 插入相同的值,因为您的HTML 中aminitiesxxvalue 属性始终为1。如果不正确,您应该更改它。
猜你喜欢
  • 2015-07-07
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 2014-11-18
相关资源
最近更新 更多