0

(Before posting this, I took a look at all the many related questions here, and adjusted the code, to no effect). So here is the situation: I have a books database to which I have added a date field(Bookdate). Now I want to update the date on the previous records, which I am doing with the following code:

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

(the get_post function simply returns $conn->real_escape_string($_POST[$var])). However the date I enter into the form never gets updated in the database, instead it reads 1970-01-01 - which I understand is the Unix epoc thing. I accept the date details throught a form where:

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

$row[8] here is the Bookdate field that I wish to update.

The code chunk with the SQL update query is below. Pls note the code works for updating all other fields, but updating date has no effect - it remains at 1970-01-01, while the other records which I haven't updated yet stand at 0000-00-00. Bookdate=NOW() in the below query nicely updates the field to the current date. So what is wrong with the variable I am passing ie. $stamp.?? Would appreciate any help on this.

  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>";
                
        }
    }    

Here is the form that takes in the date (also displays what's already there):

  <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>

And for clarity, here it the get_post function:

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

UPDATE: var_dump shows $_POST['stamp'] as NULL right after get_post; Also the following errors:

Notice: Undefined index: 2000-01-01 in C:\xampp\htdocs\experiment\woldofbooks\news.php on line 69: $stamp = get_post($conn, 'stamp'); var_dump($_POST[$stamp]);

Notice: Undefined index: 2000-01-01 in C:\xampp\htdocs\experiment\woldofbooks\news.php on line 70: $stamp = date('Y-m-d H:i:s', strtotime($_POST[$stamp]));var_dump($_POST[$stamp]);

Notice: Undefined index: 1970-01-01 01:00:00 in C:\xampp\htdocs\experiment\woldofbooks\news.php on line 70

10
  • Which is thy type of the columns in the database? Commented Jan 11, 2016 at 17:40
  • Bookdate is a date field. Commented Jan 11, 2016 at 17:40
  • 1
    Also maybe a dump of how $_POST[$stamp] can look like Commented Jan 11, 2016 at 17:47
  • 1
    Show us what is in $_POST['stamp'] and more importantly show us the format of the date if one exists. Also do you have a way of enforcing a date format Commented Jan 11, 2016 at 17:48
  • 2
    if var_dump shows $_POST['stamp'] as NULL then your form submitting the data is the issue. Or your passing of the data with the get_post function is the issue. Can you show us what the get_post function actually does? And if you're posting the form with method="post" Commented Jan 11, 2016 at 18:03

1 Answer 1

2

You are using the variable $stamp as both the key and the value in the POST array.

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

Line 1 here returns the contents of the $_POST['stamp'], then you are using line 2 to turn the $_POST value into a date.

What you are doing in line 2 is telling PHP to look up a $_POST variable with the key that is actually the returned contents value from Line 1.

Notice: Undefined index: 1970-01-01 01:00:00 in C:\xampp\htdocs\experiment\woldofbooks\news.php on line 70

Describes it perfectly and this should show you the exact error and its solution.

The solution:

You do not need to run $_POST in Line 2, as the $_POST value was returned in Line 1, so:

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

Specifically answering your original query, your MySQL is being given a NULL value and so that is why the date field is not being updated.

Sign up to request clarification or add additional context in comments.

2 Comments

Understood - that was it! Thanks.
@AgniScribe No worries, glad I could spot it for you!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.