2012-08-27 72 views
0

我有這個疑問在這裏:返回真/假從MySQL陣列

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_assoc($query); 

print_r($movement_performed); 
} 

返回此:

Array ( 
[COUNT(`movement`)] => 0 
) 
Array ( 
[COUNT(`movement`)] => 0 
) 

這是正確的。現在我想要做這樣的事情:

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_assoc($query); 

return (mysql_result($movement_performed['count'], 0) == 1) ? true : false; 
} 

所以,我可以叫while循環的內部這個功能,如果它返回0 /假它就會表單數據發佈到數據庫。有人可以幫忙嗎?這裏是Im試圖執行此功能的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 
    ); 

    $movement_performed = movement_performed_today($class_id, $_POST['client_id']); 
    foreach ($movement_performed as $performed){ 
    if($performed == false){ 
    completed_movement($movement_data); 
    } // if performed 
    } // foreach 
    $i++; 
    } // while 

} // if empty 
+0

在這裏插入大便笑話。儘管如此,應該着眼於強化數據庫約束的唯一性。仍然可以執行SELECT COUNT檢查,但確保在嘗試插入數據庫後正確處理任何競爭條件。你能解釋一下「對於一個表單而不是數組」的意思嗎? – ficuscr

+0

解析腳本循環遍歷表單中的行,並將每行數據插入到數據庫中,每行數據表示數據庫中新數據行。所以當我做檢查時,我需要看看每行中的$ _POST ['movement']是否已經發布到數據庫中,如果是這樣,請轉到數組中的下一行。那有意義嗎? – Colbyd

+1

那麼做同樣的事情,但在一個循環?只需要在每次插入否之前在循環中調用'movement_performed_today'? – ficuscr

回答

1

您的方法movement_performed_today返回布爾值。不是你可以循環的東西。在你的主循環中進行檢查。你也知道,從_POST信任用戶輸入是不安全的?使用mysql_query已折舊,您需要查看使用PDO和綁定的參數。

if (! empty($_POST)) { 
    $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']); 

     //if not performed then do insert 
     if(! $isPerformed) completed_movement($movement_data);  

     $i++; 
    }  
} 
+0

感謝您的回覆。那麼我的查詢如何改變,如果它返回1/true,它將跳過'completed_movement'函數? – Colbyd

+0

感謝您的幫助。我的查詢是否需要更改以使其正確運行? – Colbyd