【问题标题】:PHP-SQL: Date does not update the databasePHP-SQL:日期不更新数据库
【发布时间】:2016-04-16 02:43:37
【问题描述】:

(发这个之前,我在这里看了很多相关的问题,并调整了代码,没有效果)。所以情况是这样的:我有一个书籍数据库,我向其中添加了一个日期字段(Bookdate)。现在我想更新以前记录的日期,我正在使用以下代码:

$stamp      = get_post($conn, 'stamp');
$stamp      = date('Y-m-d H:i:s', strtotime($_POST[$stamp]));

(get_post 函数只返回$conn->real_escape_string($_POST[$var]))。但是,我输入表格的日期永远不会在数据库中更新,而是读取 1970-01-01 - 我理解这是 Unix epoc 的事情。我通过以下表格接受日期详细信息:

   Date <input type="text" name="stamp" value="<?php echo $row[8]; ?>">  

$row[8] 这里是我希望更新的 Bookdate 字段。

带有 SQL 更新查询的代码块如下。 请注意该代码适用于更新所有其他字段,但更新日期无效 - 它仍为 1970-01-01,而我尚未更新的其他记录为 0000-00 -00。以下查询中的 Bookdate=NOW() 很好地将字段更新为当前日期。那么我传递的变量有什么问题,即。 $邮票.??非常感谢您对此的任何帮助。

  if ($_FILES['image2'])
  {
    $ed_author   = get_post($conn, 'ed_author');
    $ed_title    = get_post($conn, 'ed_title');
    $ed_category = get_post($conn, 'ed_category');
    $ed_year     = get_post($conn, 'ed_year');
    $hid_isbn     = get_post($conn, 'hid_isbn');
    $stamp      = get_post($conn, 'stamp');
    $stamp      = date('Y-m-d H:i:s', strtotime($_POST[$stamp]));
    
    if($_FILES['image2']['error'] != UPLOAD_ERR_NO_FILE){
        $filetmp = $_FILES["image2"]["tmp_name"];
        $filename = $_FILES["image2"]["name"];
        $filetype = $_FILES["image2"]["type"];
        $filepath = "images/".$filename;
                        
        move_uploaded_file($filetmp, $filepath);        
          
        $query    = "UPDATE classics 
                         SET author='$ed_author', title='$ed_title', 
                            `type`='$ed_category', `year`='$ed_year', 
                            filename='$filename', filepath='$filepath', 
                            filetype='$filetype', Bookdate='$stamp' 
                      WHERE isbn='$hid_isbn'";
    
        $result   = $conn->query($query);
        
        if (!$result) echo "EDIT with image failed: $query<br>" .
          $conn->error . "<br><br>";
          $result   = $conn->query($query);     

        } else {
            $query  = "UPDATE classics 
                           SET author='$ed_author', title='$ed_title', 
                               `type`='$ed_category', `year`='$ed_year', 
                               Bookdate='$stamp' 
                        WHERE isbn='$hid_isbn'";
            
            $result   = $conn->query($query);
                    
            if (!$result) 
               echo "EDIT with image failed: $query<br>" . $conn->error . "<br><br>";
                
        }
    }    

这是包含日期的表格(也显示已经存在的内容):

  <form action="news.php" method="post" enctype="multipart/form-data">  <pre>   
        Author <input type="text" name="ed_author" value="<?php echo $row[0]; ?>">
         Title <input type="text" name="ed_title" value="<?php echo $row[1]; ?>">
      Category <input type="text" name="ed_category" value="<?php echo $row[2]; ?>">
          Year <input type="text" name="ed_year" value="<?php echo $row[3]; ?>">
          ISBN <input type="text" name="hid_isbn" value="<?php echo $row[4]; ?>"readonly>
          Date <input type="text" name="stamp" value="<?php echo $row[8]; ?>">        
          
               <input type="hidden" name="oldfilename" value="<?php echo $row[5]; ?>">  
               <input type="hidden" name="oldfilepath" value="<?php echo $row[6]; ?>">
               <input type="hidden" name="oldfiletype" value="<?php echo $row[7]; ?>">
                    
               <input type="file" name="image2">
               <input type="hidden" name="edit" value="yes">
               <input type="submit" name="btn2" value="SUBMIT EDIT">
    
        </pre></form>

为了清楚起见,这里是 get_post 函数:

  function get_post($conn, $var)
  {
    return $conn->real_escape_string($_POST[$var]);
  }   

更新:var_dump 在get_post 之后将$_POST['stamp'] 显示为NULL;还有以下错误:

注意:未定义索引:C:\xampp\htdocs\experiment\woldofbooks\news.php 第 69 行中的 2000-01-01:$stamp = get_post($conn, 'stamp'); var_dump($_POST[$stamp]);

注意:未定义的索引:C:\xampp\htdocs\experiment\woldofbooks\news.php 中的 2000-01-01 第 70 行:$stamp = date('Ymd H:i:s', strtotime($_POST [$stamp]));var_dump($_POST[$stamp]);

注意:未定义索引:C:\xampp\htdocs\experiment\woldofbooks\news.php 第 70 行中的 1970-01-01 01:00:00

【问题讨论】:

  • 你在数据库中的列类型是什么?
  • Bookdate 是一个日期字段。
  • 也可能是 $_POST[$stamp] 的样子
  • 向我们展示$_POST['stamp'] 中的内容,更重要的是向我们展示日期的格式(如果存在)。你也有强制执行日期格式的方法
  • 如果 var_dump 将 $_POST['stamp'] 显示为 NULL,那么您的表单提交数据就是问题所在。或者您使用 get_post 函数传递数据是问题所在。你能告诉我们get_post 函数的实际作用吗?如果您使用method="post" 发布表单

标签: php sql date sql-update


【解决方案1】:

您正在使用变量$stamp 作为 POST 数组中的键和值。

$stamp      = get_post($conn, 'stamp');
$stamp      = date('Y-m-d H:i:s', strtotime($_POST[$stamp]));

此处的第 1 行返回 $_POST['stamp'] 的 内容,然后您使用第 2 行将 $_POST 值转换为日期。

您在第 2 行中所做的是告诉 PHP 查找 $_POST 变量,其键实际上是第 1 行返回的 contents 值。

注意:未定义索引:1970-01-01 01:00:00 in C:\xampp\htdocs\experiment\woldofbooks\news.php 在第 70 行

完美地描述了它,这应该会告诉你确切的错误及其解决方案。

解决办法:

您不需要在第 2 行运行 $_POST,因为在第 1 行返回了 $_POST 值,所以:

$stamp      = get_post($conn, 'stamp');
$stamp      = date('Y-m-d H:i:s', strtotime($stamp));

具体回答您的原始查询,您的 MySQL 被赋予了 NULL 值,这就是日期字段未更新的原因。

【讨论】:

  • 明白了——就是这样!谢谢。
  • @AgniScribe 不用担心,很高兴我能帮你找到它!
猜你喜欢
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 2017-04-22
  • 2015-09-05
  • 2012-06-09
相关资源
最近更新 更多