0

I have a PHP script that gets details from a checkbox and a text field. The console.log data is correct and so is the updated data in the database, however, when I try and get the data, using $wpdb or get_user_meta(), I receive incorrect data (i receive previously updated data, even though in the database te data is different).

Here's my code:

//Form

<form id="donations" method="POST" >
  <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
    <?php
      $option = get_the_title();
      $id = get_the_ID();
    ?>
    <input type="radio" class="charity" id="charity-<?php echo $id ?>" name="charity" value="<?php echo $id ?>" <?php if ($_POST[$id] == $id) echo 'checked'; ?> >
    <label for="<?php echo $id ?>"><?php echo $option; ?></label>
    <br>
  <?php endwhile; ?>
  <?php wp_reset_query(); ?>
  <div class="more-don--wrapper">
    <label for="more_donation">The standard card cost is R50.00. <br>Enter a different amount below if you would like to donate more (must be more than R50.00).</label>
    <input type="number" min="60" step="10" placeholder="50.00" id="more_donation" name="more_donation" value="<?php if (isset($_POST['more-donation'])){ echo $_POST['more-donation']; }else{ echo '50'; } ?>"/>
    <span class="more_donation_tc">All additional amount will go directly to the nominated charity.</span>
  </div>
  <!--<input class="button" type="submit" value="Update Selection" />-->
</form>

//Ajax script

jQuery( 'document' ).ready( function( $ ) {

  // Form submission listener
  //$( '#donations' ).submit( function() {
  $('.choose-charity').click(function() {

      // Grab our post meta value
      var charity = $( '#donations .charity:checked' ).val();
      var more_donation = $( '#donations #more_donation' ).val();

      // Do very simple value validation
      //if( $( '#donations #charity #donation' ).val().length ) {

          $.ajax( {
            url : ajax_url,                   // Use our localized variable that holds the AJAX URL
            type: 'POST',                     // Declare our ajax submission method ( GET or POST )
            data: {                           // This is our data object
                action: 'um_donation',        // AJAX POST Action
                'charity': charity,           // Replace `um_key` with your user_meta key name
                'more_donation': more_donation,
            }
          })
          .success( function( results ) {
            console.log( 'User Meta Updated! ' + charity + ' ' + more_donation );
          })
          .fail( function( data ) {
            console.log( data.responseText );
            console.log( 'Request failed: ' + data.statusText );
          });

      //} else {
          // Show user error message.
      //}

      return false;   // Stop our form from submitting

  });

});

// Data update script

function donations_callback() {

    // Ensure we have the data we need to continue
    if( ! isset( $_POST ) || empty( $_POST ) || ! is_user_logged_in() ) {

            // If we don't - return custom error message and exit
            header( 'HTTP/1.1 400 Empty POST Values' );
            echo 'Could Not Verify POST Values.';
            exit;
            
    }

    $user_id        = get_current_user_id();                            // Get our current user ID
    $charity        = sanitize_text_field( $_POST['charity'] );             // Sanitize our user meta value
    $more_donation  = sanitize_text_field( $_POST['more_donation'] );   // Sanitize our user email field

    if( !empty($charity) ) {
        update_user_meta( $user_id, 'charity', $charity );                  // Update our user meta
    }else {
        update_user_meta( $user_id, 'charity', '' );    
    }

    if( !empty($more_donation) ) {
        update_user_meta( $user_id, 'more_donation', $more_donation );          // Update our user meta
    } else {
        update_user_meta( $user_id, 'more_donation', '' );
    }

    //update_field('charity', $charity, 'user_'.$user_id.'');
    //update_field('more_donation', $more_donation, 'user_'.$user_id.'');

    exit;

}
add_action( 'wp_ajax_nopriv_um_donation', 'donations_callback' );
add_action( 'wp_ajax_um_donation', 'donations_callback' );

And this is my loop in a tabular form. The first tab is where the form (above) is and the last tab is where I retrieve the data and the code is as follows:

<?php
  // get saves meta values (charity and amount)
  /*
  $charity_id = esc_html( get_user_meta( $user_id, 'charity' , true ) );
  $charity = get_the_title( $charity_id );
  $donation_amount = esc_html( get_user_meta( $user_id, 'more_donation' , true ) );
  */
  global $wpdb;

  // get charity id
  $charity_meta_key = "charity";
  $charity_id = $wpdb->get_var( 
      $wpdb->prepare( 
          "SELECT meta_value 
          FROM $wpdb->usermeta 
          WHERE user_id = %d 
          AND meta_key = %s",
          $user_id,
          $charity_meta_key
      ) 
  );

  // get charity name
  $charity = get_the_title( $charity_id );

  // get donation amount
  $donation_meta_key = "more_donation";
  $donation_amount_db = $wpdb->get_var( 
      $wpdb->prepare( 
          "SELECT meta_value 
          FROM $wpdb->usermeta 
          WHERE user_id = %d 
          AND meta_key = %s",
          $user_id,
          $donation_meta_key
      ) 
  );
  $donation_amount = $donation_amount_db;
?>

The commented out get_user_meta returns the same output as the $wpdb. How would I go about solving my issue - it is a cache issue? Any point in the right direction will be greatly appreciated.

0

The tab you where you Displayed the data doesn't refresh after the Ajax call. Refresh the page in your ajax sucess call back to get the proper results.

| improve this answer | |
  • Thank you @pradipta-sarkar – that has solved my problem. – TheLovableType Aug 25 at 2:05
  • Welcome @TheLovableType – Pradipta Sarkar Aug 25 at 3:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.