【发布时间】:2012-08-24 11:37:55
【问题描述】:
如果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
我在这里尝试做的是每次循环检查函数 move_performed_today 是真还是假。如果返回 false,则将此 _POST 数据插入到数据库中。不确定我是否正确执行此操作,因为即使该函数返回 true,它仍会调用 completed_movement 函数并将信息发布到 db。
我相信问题可能就在这里。早些时候,这将返回 true 或 false,但现在即使 movement 存在,也只会返回 false。这段代码:
$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);
}
这是正在工作的 while 循环。
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
感谢大家的帮助!
【问题讨论】:
-
您似乎没有将正确的变量发送到
movement_performed_today。$_POST['client_id']不应该是$_POST['client_id'][$i]吗? -
这确实有帮助,但如果
$isPerformed返回 true,它仍然会调用函数completed_movement。 -
您是否检查过您的查询是否正常?你试过
echo吗?您是否尝试转储$movement_performed以查看结果是否符合预期?我们指出了一些错误,但我们无法为您调试此脚本。为什么 -
@MathieuImbert 是的,我可以执行 var_dump 并返回 bool(false) 或 bool(true),具体取决于
movement是否存在。 -
@MathieuImbert 是的,检查执行正常,但是当我在 while 循环中调用它并且如果它返回 false(未找到移动)以执行功能
movement_completed但无论我尝试什么,它都会执行 @987654340 @ 即使$isPerformed返回 true。