致命错误:在非对象上调用成员函数 format()


Fatal error: Call to a member function format() on a non-object

我有一个html文件,其中包含下表:

<form action="wedding-ajax-support.php" method="get" id="wedding-table">
<table border="0"; align="center">
  <tr>
    <th scope="col">Key</th>
    <th scope="col">Value</th>
  </tr>
  <tr>
    <td><label for="date">Select the date on which your party will take place (mm/dd/yyyy): </label></td>
    <td>
      <input name="date" type="text" class="larger" id="date"  size="12" />
    </td>
  </tr>
  <tr>
    <td><label for="catering">Type the catering grade you would like (from 1 to 5) : </label></td>
    <td><input name="catering" type="text" class="larger" id="catering"  size="5" /></td>
  </tr>
  <tr>
    <td><label for="size">Type the number of people you are expecting to attend: </label></td>
    <td><input name="size" type="text" class="larger" id="size"  size="5" /></td>
  </tr>
  <tr>
    <td>Find me available venues, based on my preferences: </td>
    <td><input type="submit" name="submit" id="submit" value="GO!" class="larger" /></td>
  </tr>
</table>

其中一个输入是日期。这是我目前唯一关心的事情,让事情变得简单。

在另一个文件上,wedding-ajax-support.php(我在其上组织了我所有的php代码),我在其他代码中都有这个:

$date = DateTime::createFromFormat('m/d/Y', $_GET['date']);

$date = $date->format('Y-m-d'); 更改日期的格式,因为用户输入的日期和数据库中的日期采用不同的格式。

然后是一个简单的回声$date; 只是为了测试它。

然后,回到我的主文件,我放了一个

<script type="text/javascript">

$("#wedding-table").load("wedding-ajax-support.php");

将表替换为更改格式的日期,通过 jQuery 使用 ajax。

因此,当我加载我的网页时,表格应该在的位置,会显示一条消息"致命错误:在第 23 行调用堆栈:0.0002 333936 1 中的非对象上的成员函数 format() 在/disks/diskh/zco/cotm2/public_html/wedding/wedding-ajax-support.php 中。{主要}()/disks/diskh/zco/cotm2/public_html/wedding/wedding-ajax-support.php:0'".

任何想法/建议将不胜感激,提前感谢!

当 "GET" 变量作为 URL 中的查询参数传递时,由 Web 服务器为 PHP 设置。在您的情况下,您将页面加载为 "wedding-ajax-support.php" ,因此这意味着 _GET 变量实际上是空的。

该错误告诉您的结果

$date = DateTime::createFromFormat('m/d/Y', $_GET['date']);

不是DateTime的实例,但很可能是false因为正如 DateTime 的 php 文档所提到的,如果它无法基于给定参数创建实例,则将返回false

所以用

$date = $date->format('Y-m-d');

您正在尝试调用方法format() false ,它不是对象。

你应该找出createFromFormat失败的原因。可能是$_GET['date']的格式无法解析,或者只是空的。尝试var_dump($_GET)找出答案。

正如另一个答案所指出的,$_GET变量被附加到 url 中,因此要设置$_GET['date'],url 应该看起来像wedding-ajax-support.php?date=xyz

不幸的是,我没有得到你试图用javascript做什么来进一步帮助你。

编辑:哇这篇文章很旧。以前没见过,对不起。