gpt4 book ai didi

php - 时间未插入数据库表

转载 作者:行者123 更新时间:2023-11-30 00:11:28 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com