PHP-SQL:Date不更新数据库

时间:2016-01-11 17:23:53

标签: php sql date sql-update

(在发布之前,我在这里看了所有相关的问题,并调整了代码,没有效果)。所以情况就是这样:我有一个书籍数据库,我已经添加了一个日期字段(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]);
  }   

UPDATE :var_dump在get_post之后立即显示$ _POST ['stamp']为NULL;还有以下错误:

  

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

     

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

     

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

1 个答案:

答案 0 :(得分:2)

您使用变量$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使用实际上从第1行返回的内容值的键查找$ _POST变量。

  

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

完美地描述它,这应该向您显示确切的错误及其解决方案。

解决方案:

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

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

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