【问题标题】:Error when posting data values in PHP在 PHP 中发布数据值时出错
【发布时间】:2010-12-09 07:03:38
【问题描述】:

每当我尝试在 PHP 中发布数据值时,我都会收到以下错误:

致命错误:未捕获的异常 带有消息的“异常” 'DateTime::__construct() [datetime.--construct]: 解析时间字符串失败(这个 星期三 G:i A) 在位置 16 (:): 意外字符'在 C:\xampp\htdocs\keypad\end.php:14 堆栈跟踪:#0 C:\xampp\htdocs\keypad\end.php(14): DateTime->__construct('这个星期三 ...') #1 {main} 投入 C:\xampp\htdocs\keypad\end.php 上线 14

这是我正在使用的代码:

<?php require_once('Connections/rent.php'); ?>
<?php

// post

$id = $_GET['id'];
$user = $_GET['user'];
$week = $_GET['week'];
$pRent = $_GET['pRent'];
$status = $_GET['status'];
$rentPaid = $_GET['rentPaid'];
$result = $_GET['result'];
$pDate = date("d/m/Y G:i A");
$lDate = new DateTime('this wednesday G:i A');
$cDate = new DateTime('next tuesday G:i A');

// update 

mysql_query("UPDATE rent SET dNo = '$dNo', pdate = '$pDate', pRent = '$result' WHERE rent.id = $id");


// if pRent = 0 then set status to clear, colour to #3C0
if ($pRent == 0 ) {
    mysql_query("UPDATE rent SET status = 'clear', colour = '#3C0' WHERE rent.id = $id");
} 

// if pRent =! 0 but just paid then set status to paid/not clear, colour to #FF0
elseif ($pRent =! 0 ) {
    mysql_query("UPDATE rent SET status = 'paid', colour = '#3C0' WHERE rent.id = $id");
}

// if status = on holiday, then set status to clear, colour to #3C0
elseif ($status == 'awaiting' ) {
    mysql_query("UPDATE rent SET status = 'awaiting', colour = '#09F' WHERE rent.id = $id");
} 

// check all drivers who have/have not paid rent in the past week
elseif ($lDate < $pDate && $cDate > $pDate) {
    //  date is within desired range
    mysql_query("UPDATE rent SET status = 'paid', colour = '#3C0'");
} else {
    // date is not within desired range
    mysql_query("UPDATE rent SET status = 'awaiting', colour = '#09F' WHERE rent.status =! 'not working'");
}
?>

有什么建议吗?

【问题讨论】:

  • 我认为错误信息已经足够清晰了。 'this wednesday G:i A' 不是 DateTime() 理解的东西。
  • 我将添加标准警告,即您的代码极易受到 SQL 注入攻击;请查看 PDO 准备语句 (au.php.net/manual/en/pdo.prepared-statements.php) 作为运行 SQL 的更安全方式。

标签: php mysql


【解决方案1】:

您在第 14 行遇到问题,$lDate = new DateTime('this wednesday G:i A') 无效,请查看 Relative DateTime formats 以获取有效列表。你需要做的是:

 $lDate = new DateTime('this wednesday')
 $lDate->format('G:i A');

只是一个建议,前两行应该是

 <?php 
     require_once 'Connections/rent.php';

请考虑使用PDO 或其他类似库,或至少清理您的 SQL 查询。

【讨论】:

    猜你喜欢
    • 2015-06-03
    • 2016-07-03
    • 1970-01-01
    • 2011-08-27
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多