php - 时间未插入数据库表

标签 php html mysql

我正在尝试制作一个网络表单,可以在其中填写该人正在接收的咨询信息。我知道如何腾出时间来处理文本字段,但由于某种原因,当我将其更改为下拉菜单并更改其插入数据库的方式时,它不再起作用。有什么想法吗?这就是 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>";
                        }
                }
            }

这是 HTML

            <div class="col-md-6 col-xs-12 background"> 
            <label class="col-md-12 col-xs-12 color h4">Total Time Providing Services (Hours, Minutes)</label><br />
            <select name = "hours">
                <option value="0">0</option>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
                <option value="10">10</option>
            </select>

            <select name = "minutes">
                <option value=":00">:00</option>
                <option value=":01">:01</option>
                <option value=":02">:02</option>
                <option value=":03">:03</option>
                <option value=":04">:04</option>
                <option value=":05">:05</option>
                <option value=":06">:06</option>
                <option value=":07">:07</option>
                <option value=":08">:08</option>
                <option value=":09">:09</option>
                // ...

还有 table

CREATE TABLE IF NOT EXISTS `dosage` 
( `entry_id` int(11) NOT NULL AUTO_INCREMENT, 
`providerName` text NOT NULL, 
`clientName` text NOT NULL, 
`services` text NOT NULL,
 `receiver` text NOT NULL,
 `elapsedTime` text NOT NULL,
 `method` text NOT NULL, 
`activity_date` datetime NOT NULL, PRIMARY KEY (`entry_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

最佳答案

您的代码存在一些问题。首先,也是最重要的,您的代码很容易受到 SQL 注入(inject)攻击,因为您将值连接到 SQL 查询中。相反,您应该使用带参数的准备好的语句。

关于您的问题,

$elapsedTime = $_POST['hours'] + ($_POST['minutes']/60);

您的分钟变量如下所示::00:09等。您正在尝试划分一个字符串(以冒号 (:) 乘 60。删除该冒号。

此外,您将添加您的值在一起,而不是连接。如果要连接字符串,请使用句点 (.) 而不是加法运算符 (+)

$elapsedTime = $_POST['hours'] . ($_POST['minutes']/60);

这仍然不能解决您遇到的另一个问题 - 除法的小数结果。例如,如果您传入 分钟 值为 10(假设您去掉了前导冒号),那么您现在就拥有了(假设小时为 01 )

$elapsedTime = "01" . ":" .  (10/60);

您的elapsedTime变量如下所示:01:0.16666666666667。这是无效的。

最好的选择可能是修改数据库结构本身。您可以将耗时存储为一个简单的整数,并在存储之前执行所需的数学运算以获得正确的时间(以分钟为单位):

$elapsedTime = ($hours * 60) + $minutes;

这提供了一个简单的数值,您可以使用它在数据库中执行数学运算(即 MAX()MIN()SUM( ))。这些无法通过 TEXT 数据类型完成。它还允许您通过反转上述公式轻松将 BACK 转换为 HH:MM 格式:

$original_hours = (int)($elapsedTime / 60);
$original_min = $elapsedTime % 60;

关于php - 时间未插入数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24005543/

相关文章:

mysql - 当没有发生插入时,PDO::execute 如何返回 true?

php - Android - PHP - WampServer - 数据库行无法更新?

php - 不唯一的表/别名 : 'ospos_people'

php 到 mysql 更新帖子不起作用

php - mysql 返回的数组出现错误

php - 在 Laravel 中检索 session 值返回 null

html - CSS:position:absolute;导致输入元素在 Chrome 中输入时移动

html - 如何使用 CSS 创建一个填充页面高度的中间栏?

html - Bootstrap 样式下拉菜单

mysql - 如何从数据库中为多个wordpress用户设置相同的email_address