每当我提交表单时,它都会以“ Good”返回“ GoodGoodGood”三倍,而我试图找出原因。我所知道的唯一的事情是,它必须对数组做一些事情。
check.php
检查所有3个输入是否都不为空,如果一切正常,则回显为“ Good”。
class Check {
public function mty() {
global $required;
global $field;
foreach($required as $field) {
if (empty($_POST[$field])) {
//Code...
} else {
echo "Good";
}
}
}
}
submit.php
$check = new Check;
//Gets names of inputs
$required = array('name', 'price', 'id');
if(isset($_POST['submit'])) {
$check->mty();
}
我是OOP的新手,只想找到解决问题的方法。我有什么需要改进的代码吗?
答案 0 :(得分:2)
问题是您在循环的每次迭代中都回显“好”。
您可以创建一个保存状态的变量,然后检查并在循环后回显:
// The variable that keeps the state
$success = true;
foreach($required as $field) {
if (empty($_POST[$field])) {
// Set the state as false
$success = false;
}
}
// If state is true, no value was empty and we echo 'Good'... once.
if ($success) {
echo 'Good';
}
正如其他人所提到的那样,应尽可能避免使用global
(如果您的结构是健全的,则总是这样)。
还有一个问题,就是您同时在global $field;
循环中使用$field
的同时使用foreach
。如果您打算使用$field
,并且已经通过global $field;
导入了该方法,则应在foreach
中使用另一个名称。如果您不打算使用它,请删除global $field;
。
答案 1 :(得分:0)
我更喜欢使用array_filter()
来获取非空值,并将其计数与原始$_POST
计数进行比较
<?php
# pretend like this was what was posted
$posted = [
'foo' => 'bar',
'bar' => 'foo',
'treybake' => 'is awesome?'
];
# your GLOBALS
$required = ['foo', 'treybake'];
# compare the count of the array without any empty elements
# vs original post count
if (count(array_filter($posted, function($el){return (!empty($el));})) === count($posted)) {
echo 'good';
} else {
echo 'something bad';
}