0

I am currently trying to update a textarea when a user clicks elsewhere. I'm not well-versed in AJAX and Jquery. However, the script doesn't seem to be updating the row in the DB.

Jquery/Text area:

<textarea id="<?php echo $item_id; ?>_textarea"><?php echo $notes; ?></textarea>
    <script type="text/javascript">
    $('<?php echo $item_id; ?>_textarea').on('blur',function () {
var notesVal = $(this).val(), id = $(this).data('id');        
var itemVal = <?php echo $item_id; ?>;
$.ajax({
     type: "POST",
     url: "updateNotes.php",
     data: {notes:notesVal , id:id, itemId:itemVal},
     success: function(msg) {
         $('#'+id).html(msg);
     }
 })
});
</script>

updateNotes.php:

<?php

include('db_connect.php');
include('order_functions.php');



$email = $_SESSION['username'];

$cartId = getcartid($mysqli, $email);
$notes = $_POST['notes'];
$itemID = $_POST['itemId'];


$query = "UPDATE `rel` SET `notes` = '$notes' WHERE `cart_id` = '$cartId' && `id_item` = '$itemID'";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);

if(result) {
return "Notes Updated";

} ?>

2
  • Why are you using data()? Your element doesn't have data-* attributes. Commented Feb 3, 2013 at 22:06
  • ... what would I use instead? Your response doesn't really help me understand what I am doing wrong. Commented Feb 3, 2013 at 22:11

1 Answer 1

2

You forgot the $ in your last if-statement in your php-code and you should use "echo" (or likewise) instead of "return" as you are not in a function.

<?php

include('db_connect.php');
include('order_functions.php');

$email = $_SESSION['username'];

$cartId = getcartid($mysqli, $email);
$notes = $_POST['notes'];
$itemID = $_POST['itemId'];


$query = "UPDATE `rel` SET `notes` = '$notes' WHERE `cart_id` = '$cartId' && `id_item` = '$itemID'";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);

if($result) {
    echo "Notes Updated";
}
?>

Your html/javascript-code is a bit wrong. This is how i guess you wanted it to work:

<div id="<?php echo $item_id; ?>_div">
    <textarea id="<?php echo $item_id; ?>_textarea" data-id="<?php echo $item_id; ?>"><?php echo htmlentities($notes); ?></textarea>
</div>

$('#<?php echo $item_id; ?>_textarea').on('blur', function () { // don't forget # to select by id

    var id = $(this).data('id'); // Get the id-data-attribute
    var val = $(this).val();
    $.ajax({
        type: "POST",
        url: "updateNotes.php",
        data: {
            notes: val, // value of the textarea we are hooking the blur-event to
            itemId: id // Id of the item stored on the data-id
        },
        success: function (msg) {
            $('#' + id + '_div').html(msg); //Changes the textarea to the text sent by the server
        }
    });
});

Good luck

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

2 Comments

Thanks for the response however,it doesn't seem to be working. The user should be able to constantly update the notes - not sure if this, " $('#' + id + '_div').html(msg);" prevents that. Is there a way to check whats going wrong? I used the console but it doesn't show any errors.
I forgot to call the function that start the user's session -_-'

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.