1

bool(true) または bool(false) がmovement存在する場合に返すこの関数があります。

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 が true か false かを確認することです。false を返す場合、この _POST データを db に挿入します。関数が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   

皆さん、助けてくれてありがとう!

4

2 に答える 2

3

私はこれを誤解しているかもしれませんが、実際に値を返すのではなく、$return を true または false に設定しているようです。私はあなたが変更したいと信じています:

$return = $movement_performed[0] > 0;

if($movement_performed[0] > 0) return true;
else return false;
于 2012-08-29T19:28:55.733 に答える
1

編集:

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);
}
于 2012-08-29T19:28:43.663 に答える