2014-02-05 14 views
0

我有一个表单,其中有9个复选框,每个将值1传递给提交页面,根据是否选中复选框来更新SQL 。

if (isset($_POST["cinn"])) { 
    $cinn = $_POST["cinn"]; 
} else { 
    $cinn = 0; 
} if (isset($_POST["suga"])) { 
    $suga = $_POST["suga"]; 
} else { 
    $suga = 0; 
} if (isset($_POST["bana"])) { 
    $bana = $_POST["bana"]; 
} else { 
    $bana = 0; 
} if (isset($_POST["toba"])) { 
    $toba = $_POST["toba"]; 
} else { 
    $toba = 0; 
} if (isset($_POST["spic"])) { 
    $spic = $_POST["spic"]; 
} else { 
    $spic = 0; 
} if (isset($_POST["mint"])) { 
    $mint = $_POST["mint"]; 
} else { 
    $mint = 0; 
} if (isset($_POST["sour"])) { 
    $sour = $_POST["sour"]; 
} else { 
    $sour = 0; 
} if (isset($_POST["nutt"])) { 
    $nutt = $_POST["nutt"]; 
} else { 
    $nutt = 0; 
} if (isset($_POST["glas"])) { 
    $glas = $_POST["glas"]; 
} else { 
    $glas = 0; 
} 

您已经可以说出这看起来有多糟糕。因为我想插入0或1到SQL中,从我的理解我需要检查每个复选框的$ _POST名称是否有效(选中),并从中设置一个变量。在这里使用数组真的很不错,但是由于每个复选框都有不同的名称,我不认为我可以。

我喜欢像下面,而不是垃圾我目前有:

//checkbox sends either a 1 if checked or 0 if unchecked via $_POST 
//no if/else complex is needed; individual variables aren't even needed 
//can just reference $_POST instead of initializing 

三元运营商将减少线路的数量,但是这整个布尔检查我想象是不必要的。

$cinn = isset($_POST["cinn"]) ? $_POST["cinn"] : 0; 
$suga = isset($_POST["suga"]) ? $_POST["suga"] : 0; 
$bana = isset($_POST["bana"]) ? $_POST["bana"] : 0; 
$toba = isset($_POST["toba"]) ? $_POST["toba"] : 0; 
$spic = isset($_POST["spic"]) ? $_POST["spic"] : 0; 
$mint = isset($_POST["mint"]) ? $_POST["mint"] : 0; 
$sour = isset($_POST["sour"]) ? $_POST["sour"] : 0; 
$nutt = isset($_POST["nutt"]) ? $_POST["nutt"] : 0; 
$glas = isset($_POST["glas"]) ? $_POST["glas"] : 0; 
+1

看看[在这个答案](http://stackoverflow.com/a/4997271/643850)听起来像这就是你想要做的。 – d3c0y

回答

4

首先,你其实可以使用复选框以不同的名称的数组。诀窍是知道如何设置您的表单复选框,以便您可以将所有复选框解析为单个数组。

<form action="" method="post"> 
<input type="checkbox" name="boxes[]" value="cinn">Cinn<br /> 
<input type="checkbox" name="boxes[]" value="suga">Suga<br /> 
<input type="checkbox" name="boxes[]" value="bana">Bana<br /> 
<input type="checkbox" name="boxes[]" value="spic">Spic<br /> 
<input type="checkbox" name="boxes[]" value="toba">Toba<br /> 
<input type="checkbox" name="boxes[]" value="sour">Sour<br /> 
<input type="checkbox" name="boxes[]" value="nutt">Nutt<br /> 

<input type="submit" name="Submit"/> 
</form> 
<?php 
if ($_POST) { 
    print '<pre>'; print_r($_POST); print '</pre>'; 
} 
?> 

请注意<input type="checkbox">元素有着怎样的name="boxes[]"名和字boxes[]后抓紧开/关方括号。这将允许多个复选框值通过一个数组中的表单传递,而不是每个值作为其自己的键/值对。这是一个关键的区别,不应该被忽视。

然后,您应该能够以多种更便捷的方式处理这些复选框。像@ hindmost的建议一样,您可以使用foreach循环遍历您要知道的复选框名称列表,然后使用变量变量来动态设置新的变量名称和值。

这将工作,虽然我认为你需要这种解决方案的唯一原因是如果你不能使用复选框作为数组本身。由于我提供的解决方案为您提供了更多的数据灵活性,因此我不建议使用变量变量,除非绝对必要,这将非常罕见。我强烈建议您搜索一个更简单的解决方案,因为您可以将单个数组中的所有复选框数据分开。

+1

这是一个很好的答案,只需添加一个像foreach一样的foreach循环($ _ POST ['boxes']作为$ box),并且每个$ box在循环中使用时都会包含输入值。 – d3c0y

+2

是的,这是正确的,@ d3c0y。虽然这是完全一样的东西>>> print'

'; print_r($_POST); print '
'; <<<已经在我上面的代码中。 – Armin

2

试试这个代码:

$a_fields = array('cinn', 'suga', 'bana', ...); 
foreach ($a_fields as $name) { 
    $$name = isset($_POST[$name])? $_POST[$name] : 0; 
} 
+0

有趣。我不知道变量变量。谢谢! – gator

+0

变量变量绝对是一种解决方案,但您也可以将它们写入数组中。数组通常比变量变量更有用(例如能够计数,循环它们等)。 –

+1

变量变量很糟糕。避免它们。无论何时您感觉需要使变量的名称成为动态变量,请使用数组。数组的关键字是变量的“名称”,并且您无法顺便访问某些其他值 - 或者更糟糕的是,会覆盖全局变量。 – Sven