我遇到了一个问题...我有一对我已命名和编号的复选框。我需要标记复选框并将其插入我的数据库。以下是我创建复选框的方法:
<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和amenities1将不会被检查,但acharge2和amenities2将是。所以我尝试了一个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++;
}
但是你可以看到这不起作用,因为如果不检查amenities1,它将不会通过其他进行while循环。无论如何,我将非常感谢您对如何实现这一目标的任何帮助!
编辑**这是一个概念,因为你可以看到,有时他们的钱箱将用舒适性进行检查,有时它不会。 http://www.cancunelitetravel.com/ale/Capture.PNG
答案 0 :(得分:3)
你这样做的方式是完全错误的。如果您不确定可用选项的数量,您应该这样写:
$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
的值。