Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 未插入数据库表的时间_Php_Html_Mysql - Fatal编程技术网

Php 未插入数据库表的时间

Php 未插入数据库表的时间,php,html,mysql,Php,Html,Mysql,我有一个我正在尝试制作的网络表单,其中一个可以填写那个人正在接受的咨询信息。我知道如何获得时间来处理文本字段,但由于某种原因,当我将其更改为下拉菜单并更改其插入数据库的方式时,它不再工作。你知道为什么吗?这就是php的样子。看起来像 //if submit is pressed if(isset($_POST['submit'])) { //Create empty error array $error = arr

我有一个我正在尝试制作的网络表单,其中一个可以填写那个人正在接受的咨询信息。我知道如何获得时间来处理文本字段,但由于某种原因,当我将其更改为下拉菜单并更改其插入数据库的方式时,它不再工作。你知道为什么吗?这就是php的样子。看起来像

//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;