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
函数?谢谢您的帮助。我的查询是否需要更改以使其正常运行?