Php 未插入数据库表的时间
我有一个我正在尝试制作的网络表单,其中一个可以填写那个人正在接受的咨询信息。我知道如何获得时间来处理文本字段,但由于某种原因,当我将其更改为下拉菜单并更改其插入数据库的方式时,它不再工作。你知道为什么吗?这就是php的样子。看起来像Php 未插入数据库表的时间,php,html,mysql,Php,Html,Mysql,我有一个我正在尝试制作的网络表单,其中一个可以填写那个人正在接受的咨询信息。我知道如何获得时间来处理文本字段,但由于某种原因,当我将其更改为下拉菜单并更改其插入数据库的方式时,它不再工作。你知道为什么吗?这就是php的样子。看起来像 //if submit is pressed if(isset($_POST['submit'])) { //Create empty error array $error = arr
//if submit is pressed
if(isset($_POST['submit'])) {
//Create empty error array
$error = array();
//Check for names
if(empty($_POST['providerName'])) {
$error['providerName'] = 'Please enter your name';
}
if(empty($_POST['clientName'])) {
$error['clientName'] = 'Please select the client\'s name';
}
//Check for services
if(empty($_POST['service'])) {
$error['service'] = 'Please select a service';
}
if(empty($_POST['receiverGroup'])) {
$error['receiverGroup'] = 'Please select who is receiving the service';
}
//Check for time
if(empty($_POST['hours'])) {
$error['hours'] = 'Please enter a value for number of hours';
}
if(empty($_POST['minutes'])) {
$error['minutes'] = 'Please enter a value for number of minutes';
}
//Check for method
if(empty($_POST['method'])) {
$error['method'] = 'Please select a method';
}
//If there are no errors
if(sizeof($error) == 0)
{
$i = 0;
$temp = $_POST['receiverGroup'];
foreach($temp as $each) {
if($i==0){
$receiver = $each;
}else{
$receiver = $receiver + " , " + $each;
}
$i++;
}
$elapsedTime = $_POST['hours'] + ($_POST['minutes']/60);
//Insert a record into the database
$query = "INSERT INTO dosage (
entry_id,
providerName,
clientName,
services,
receiver,
elapsedTime,
method,
activity_date
) VALUES (
null,
'{$_POST['providerName']}',
'{$_POST['clientName']}',
'{$_POST['service']}',
$receiver,
$elapsedTime,
'{$_POST['method']}',
NOW()
)";
//echo $query;
mysqli_query($dbc, $query) or die('Query failed: ' . mysqli_error($dbc));
/* $result = mysqli_query($dbc, $query) or die('Query failed: ' . mysqli_error($dbc)); */
//Display a confirmation
echo "<div class=\"alert alert-success\">Thank You. Your entry has been submitted.</div>";
} else {
foreach($error as $value)
{
echo "<div class=\"alert alert-danger\">";
echo $value;
echo "</div>";
}
}
}
您的代码存在一些问题。首先,也是最重要的一点,您的代码容易受到SQL注入攻击,因为您正在将值包含到SQL查询中。相反,您应该使用带参数的准备语句 关于你的问题,
$elapsedTime = $_POST['hours'] + ($_POST['minutes']/60);
您的minutes
变量如下所示::00
到:09
,等等。您正在尝试将字符串(带前导冒号(:
)除以60。请删除该冒号
此外,您正在将值添加到一起,而不是连接。如果要连接字符串,请使用句点(
)而不是加法运算符(+
)
这仍然不能解决您遇到的另一个问题-十进制结果到除法中。例如,如果您传入minute
值10
(假设您去掉了前导冒号),则现在有了(假设小时数为01
)
您的elapsedTime
变量看起来像:01:0.166667
。这是无效的
您的最佳选择可能是修改数据库结构本身。您可以将经过的时间存储为一个简单的整数,并执行所需的数学运算,以获得正确的时间(以分钟为单位),然后再存储:
$elapsedTime = ($hours * 60) + $minutes;
这提供了一个简单的数值,您可以使用该数值在数据库中执行数学运算(即MAX()
,MIN()
,SUM()
)。这些不能用文本
数据类型来完成。它还允许您通过反转上述公式轻松地转换回HH:MM格式:
$original_hours = (int)($elapsedTime / 60);
$original_min = $elapsedTime % 60;
为什么不在更新当前时间戳时使用MySQL
而不是插入NOW()
?PHP字符串连接:$\u POST['minutes']
一开始就有:
。需要先删除它,然后才能除以60。使用内爆
组合$\u POST['receiverGroup'的所有元素
转换为字符串。警告您的代码容易受到sql注入攻击!
$elapsedTime = $_POST['hours'] . ($_POST['minutes']/60);
$elapsedTime = "01" . ":" . (10/60);
$elapsedTime = ($hours * 60) + $minutes;
$original_hours = (int)($elapsedTime / 60);
$original_min = $elapsedTime % 60;