gpt4 book ai didi

php - 日期未更新的 MySQL/PHP 更新查询

转载 作者:行者123 更新时间:2023-12-01 00:16:17 25 4
gpt4 key购买 nike

这里有点奇怪的问题......

我有一个更新查询不起作用,但我终究无法找出原因!

我的表有两个三个字段 - 'id'(整数,自动递增)、'date'(日期)和 'amountraised'(十进制)。我正在开发的应用程序的一部分计算慈善书摊每周的筹款总额。 “日期”字段使用日期列类型,与我在计算中使用日期的网站其他地方一样。

在系统的其他地方,我有其他更新查询工作得很好,但我怀疑这个问题的问题在于,除了更新记录外,我还试图操纵日期格式(所以我可以输入英国 dd-mm-yyyy 格式的日期,然后使用 PHP 转换回 MySQL 友好的 yyyy-mm-dd 格式。

这是奇怪的一点。根据站点上的确认页面,查询运行正常,并且已进行更新,但是当我检查数据库时,没有任何变化。所以我可以检查查询的输出是什么我已经尝试将结果回显到网页以查看我得到了什么。预期值显示在页面上,但同样,当我检查数据库时,没有任何更新。

这是我的带有日期转换功能的更新表单:

          function dateconvert($date,$func) {
if ($func == 1){ //insert conversion
list($day, $month, $year) = split('[/.-]', $date);
$date = "$year-$month-$day";
return $date;
}
if ($func == 2){ //output conversion
list($year, $month, $day) = split('[-.]', $date);
$date = "$day/$month/$year";
return $date;
}
} // end function
require_once('/home/thebooks/admins/connect.php');
$id = $_GET['id'];
$dateinput = $_GET['dateinput'];
$query = "SELECT * FROM fundraisingtotal WHERE id='$id'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
extract($row);
$date = $row['date']; //your mysql date
$realdate = dateconvert($date,2); // convert date to British date
$amountraised = stripslashes($amountraised); //amount raised
mysql_close();?>
<div id="title">Update Fundraising Total</div>
<form id="updatetotals" action="updated.php" method="post">
<div class="row"><label for="dateinput" class="col1">Date&nbsp;&nbsp;</label><span class="col2"><input id="dateinput" name="dateinput" type="text" size="25" value="<?php echo $realdate ?>" maxlength="10" /></span></div>
<div class="row"><label for="amountraised" class="col1">Fundraising Total&nbsp;&nbsp;</label><span class="col2"><input id="amountraised" name="amountraised" type="text" size="25" value="<?php echo $amountraised ?>" maxlength="7" /></span></div>
<div class="submit"><input type="submit" name="submitted" value="Update" /><input type="reset" name="reset" value="Clear the form" /></div>
<input type="hidden" name="id" value="<?php echo $id ?>" />
</form>

...这是表单处理/查询页面:

    require_once('/home/thebooks/admins/connect.php');
$dateinput = $_POST['dateinput'];

// Date conversion from: http://www.phpbuilder.com/annotate/message.php3?id=1031006
// using type 1
$convdate = $_POST['dateinput']; // get the data from the form
$convdate = dateconvert($convdate, 1); // Would convert to e.g. 2005-12-19 which is the format stored by mysql

function dateconvert($convdate,$func) {
if ($func == 1){ //insert conversion
list($day, $month, $year) = split('[/.-]', $convdate);
$date = "$year-$month-$day";
return $date;
}
if ($func == 2){ //output conversion
list($year, $month, $day) = split('[-.]', $convdate);
$date = "$day/$month/$year";
return $date;
}
}
$date = "$convdate";
$amountraised = $_POST['amountraised'];

$update = "UPDATE fundraisingtotal SET date = '$date', amountraised = '$amountraised' WHERE id='$id' ";
$result = mysql_query($update);
$realdate = dateconvert($date,2); // convert date to British date
if ($result) {
echo "<p class=\"dbpara\">Thank you. Your update to the record was successful.</p>";
echo "<p class=\"dbpara\">The record has been amended to a date of <b>$realdate</b> and amount of <b>$amountraised</b>.</p>";
}
else {
echo "<p>Nothing has been changed.</p>";
}
mysql_close();

奇怪的是,确认文本“记录已被修改为...等”。显示完全符合预期,但是当我检查数据库时,记录根本没有更新。

我确定这一定是我弄乱了日期格式而遗漏的东西,或者我的顺序有误,但我已经尝试了很多不同的变体,现在我看不到树木的木材。有人知道我在这里做错了什么吗?

最佳答案

我在这里看到一些危险信号。您从表单中获取日期并在没有任何形式验证的情况下将其输入 MySQL - 这可能导致 SQL 注入(inject)

首先将 dateconvert 函数更改为更安全的函数。 此函数将始终返回格式正确的日期,即使用户试图滥用系统也是如此。

编辑 1: 忘记在 case 'en_en' 之后放置一个 : 但现在已修复。谢谢霓虹蓝。
编辑 2: 忘记为 date() 函数提供时间戳。固定的!
编辑 3:一个 preg_replace 将前斜杠转换为破折号

// this function always returns a valid date
function dateconvert($date = NULL, $date_type = 'sql') {
$date = preg_replace("/", "-", $date);
$timestamp = strtotime($date);
switch($date_type) {
default: case 'sql' : return date('Y-m-d', $timestamp); break; // prints YYYY-MM-DD
case 'en_EN' : return date('d-m-Y', $timestamp); break; // prints DD-MM-YYYY
}
}

您可以随时查看 Zend_Date这将使您能够以自己的格式处理日期。

关于php - 日期未更新的 MySQL/PHP 更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724174/

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