Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从mysql数组返回True/False_Php_Mysql_Arrays - Fatal编程技术网

Php 从mysql数组返回True/False

Php 从mysql数组返回True/False,php,mysql,arrays,Php,Mysql,Arrays,我有一个疑问: 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` = '$

我有一个疑问:

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/false,它就会将表单数据发布到数据库中。有人能帮忙吗?下面是我尝试执行此功能的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   

您今天执行的方法
movement\u
返回一个布尔值。不是你能循环的东西。在主循环中进行检查。您还知道,信任来自某个帖子的用户输入是不安全的吗?mysql_查询的使用被贬低了,您需要查看使用和绑定参数

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++; 
    }    
} 

在这里插入笑话。不过,严肃地说,我们应该考虑使用数据库约束强制实现唯一性。仍然可以执行SELECT COUNT检查,但确保在尝试插入到DB后,所有竞争条件都得到了正确处理。您能解释一下“针对单个表单而非数组”的含义吗?解析脚本循环遍历表单中的行,并在db中插入每行数据,其中表单中的每行数据表示db中的新行数据。因此,当我进行检查时,我需要查看每行中的$_POST['movement']是否已在数据库中发布,如果已发布,则转到数组中的下一行。这有意义吗?那么做同样的事情,但在一个循环?只需在每次插入之前在循环中调用今天执行的
movement\u
?否?请不要在新应用程序中使用
mysql\u query
。它正在逐步淘汰PHP。所有新代码都应该使用
mysqli
或PDO。聪明的把戏,比如施放到
int
是无法替代的。如果你养成这样的坏习惯,总有一天你会犯错误,这会让你付出高昂的代价。我编辑了我的解析脚本来调用我的函数,但它不起作用。它似乎只是被卡住了。我试图回显循环中的变量,只是为了看看我得到了什么,但没有这样的运气。很明显我没有在这里做什么。谢谢你的回复。那么,我的查询需要如何更改才能在返回1/true时跳过
completed\u movement
函数?谢谢您的帮助。我的查询是否需要更改以使其正常运行?