如果movement
存在,我有一个函数会返回bool(true)或bool(false)。
function movement_performed_today($class_id, $client_id){
$class_id = (int)$class_id;
$client_id = (int)$client_id;
$query = mysql_query("SELECT COUNT(`movement`) FROM `completed_movements` WHERE `class_id` = '$class_id' AND `client_id` = '$client_id' AND `date` = CURDATE()");
$movement_performed = mysql_fetch_row($query);
return ($movement_performed[0] > 0);
}
我有一个while循环,我想在其中调用这个函数,如果它返回false,则执行函数completed_movement
。我尝试了很多不同的方法,但似乎都无法奏效。如有任何信息,我们将不胜感激。
if (empty($_POST)=== false){
$i = 0;
while (isset($_POST["first_name"][$i])) {
$movement_data = array(
'user_id' => $session_user_id,
'class_id' => $class_id,
'class_name' => $class_name,
'client_id' => $_POST['client_id'][$i],
'first_name' => $_POST['first_name'][$i],
'last_name' => $_POST['last_name'][$i],
'nickname' => $_POST['nickname'][$i],
'order' => $_POST['order'][$i],
'movement' => $_POST['movement'][$i],
'rep_set_sec' => $_POST['rep_set_sec'][$i],
'rest' => $_POST['rest'][$i],
'date' => $today
);
//assign variable to the function
$isPerformed = movement_performed_today($class_id, $_POST['client_id'][i]);
//if return false perform this function
if(! $isPerformed){ completed_movement($movement_data);}
$i++;
}
} // if empty
我在这里要做的是,每次它循环检查函数movement_performed_today是真是假。如果返回false,则将此_POST数据插入数据库。不确定我这样做是否正确,因为即使函数返回true,它仍然调用completed_motion函数并将信息发布到db。
我相信问题可能就在这里。早些时候它会返回true或false,但现在只是返回false,即使存在movement
。此代码:
$movement_performed = mysql_fetch_row($query);
//return ($movement_performed[0] > 0);
var_dump($movement_performed);
返回此:
array(1) { [0]=> string(1) "0" }
array(1) { [0]=> string(1) "0" }
如果存在movement
,则"0"不应为"1"或更高,具体取决于它与查询匹配的次数。
以下是工作查询:
function movement_performed_today($class_id, $client_id, $movement){
$class_id = (int)$class_id;
$client_id = (int)$client_id;
$query = mysql_query("SELECT COUNT(`movement`) FROM `completed_movements` WHERE `class_id` = '$class_id' AND `client_id` = '$client_id' AND `movement` = '$movement' AND `date` = CURDATE()");
$movement_performed = mysql_fetch_row($query);
return ($movement_performed[0] > 0);
}
这是边工作边循环。
if (empty($_POST)=== false){
$i = 0;
while (isset($_POST["first_name"][$i])) {
$movement_data = array(
'user_id' => $session_user_id,
'class_id' => $class_id,
'class_name' => $class_name,
'client_id' => $_POST['client_id'][$i],
'first_name' => $_POST['first_name'][$i],
'last_name' => $_POST['last_name'][$i],
'nickname' => $_POST['nickname'][$i],
'order' => $_POST['order'][$i],
'movement' => $_POST['movement'][$i],
'rep_set_sec' => $_POST['rep_set_sec'][$i],
'rest' => $_POST['rest'][$i],
'date' => $today
);
//check not already performed today
$isPerformed = movement_performed_today($class_id, $_POST['client_id'][$i], $_POST['movement'][$i]);
//if not performed then do insert
if (! $isPerformed){ completed_movement($movement_data);}
$i++;
}
} // if empty
谢谢大家的帮助!
我可能误解了这一点,但看起来您将$return设置为true或false,而不是实际返回值。我相信你想改变:
$return = $movement_performed[0] > 0;
至
if($movement_performed[0] > 0) return true;
else return false;
编辑:
听起来您的SQL查询也有问题。尝试:
$query = mysql_query("SELECT COUNT(`movement`) FROM `completed_movements` WHERE `class_id` = $class_id AND `client_id` = $client_id AND `date` = CURDATE()");
由于列class_id和client_id看起来是整数,请删除它们值周围的单引号。
编辑:更正了语法,首先将SQL结果转换为整数。
return ((int)$movement_performed[0] > 0 ? true : false);
如果使用此返回行,函数completed_movement()
将只返回布尔值。
在这种情况下,在调用函数的比较逻辑时需要严格。
你会想这样做:
//if return false perform this function
if ($isPerformed === false) {
completed_movement($movement_data);
}