user3811050
user3811050

Reputation: 477

Database table values not updating through AJAX & Jquery

My test.php page is as under:

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    <h3>Setting</h3>
    <form>
        <p>Name:<input type="text" id="updatetherone1"/></p>
        <p>Email:<input type="text" id="updateotherone2"/></p>
        <p><input id="updateone" type="button" value="Save"/></p>
    </form>
    <span id="updateotherotherone"></span>
    <script src="js/jquery.js"></script>
    <script src="js/ajax.js"></script> 
</body>
</html>

My ini.php page is as under:

<?php
  session_start();
  $_SESSION['state'] ='2';
  $conn=new mysqli('localhost','root','','people');
?>

My test1.php page is as under:

<?php
  include 'ini.php';

  if (isset($_POST['name'], $POST['email'])){
    $name = mysqli_real_escape_string(htmlentities($POST['name']));
    $email = mysqli_real_escape_string(htmlentities($POST['email']));

    $update = mysqli_query("UPDATE state SET Name='$name', email='$email' WHERE Id=".$_SESSION['state']);

    if($update === true){
        echo 'Setting have been updated.';
    }else if ($update === false){
        echo 'There was an error updating your setting.';
    }
  }
?>

My ajax.js page is as under:

$('[id=updateone]').click(function(){
  var name=$('[id=updateotherone1]').val();
  var email=$('[id=updateotherone2]').val();
  $('[id=updateotherotherone]').text('Loading...');

  $.post('test1.php',{name:name,email:email},function(data){
    $('[id=updateotherotherone]').text(data);
  });
});

Ultimately code is not working nor do it is displaying any error, I suspect there is something wrong with test1.php page, can anybody guide please:

Upvotes: 0

Views: 334

Answers (1)

Kevin
Kevin

Reputation: 41885

Take note that the procedural interface of mysqli_query(), the first parameter need the connection.

$update = mysqli_query($conn, "UPDATE state SET Name='$name', email='$email' WHERE Id=".$_SESSION['state']);

If these are typos $POST, then it should be fixed in your code. It's supposed to read as $_POST. (unless its a typo on the question.) It is a superglobal.

I suggest you just use the object oriented interface. So that you wouldn't need to add it everytime:

<?php
include 'ini.php';

if (isset($_POST['name'], $_POST['email'])){
    $name = $conn->real_escape_string(htmlentities($_POST['name']));
    $email = $conn->real_escape_string(htmlentities($_POST['email']));

    $update = $conn->query("UPDATE state SET Name='$name', email='$email' WHERE Id = " . $_SESSION['state']);

    if($conn->affected_rows > 0) {
        echo 'Setting have been updated.';
    } else {
        echo 'There was an error updating your setting.';
    }
}
?>

Might as well use prepared statements since mysqli supports it:

if (isset($_POST['name'], $_POST['email'])){
    $name = htmlentities($_POST['name']);
    $email = htmlentities($_POST['email']);

    $sql = 'UPDATE state SET Name = ?, email = ? WHERE Id = ?';
    $update = $conn->prepare($sql);
    $update->bind_param('ssi', $name, $email, $_SESSION['state']);
    $update->execute();

    if($update->affected_rows > 0) {
        echo 'Setting have been updated.';
    } else {
        echo 'There was an error updating your setting.';
    }
}

On the JS part:

You also have a typo on the form id and the JS:

<p>Name:<input type="text" id="updatetherone1"/></p> <!-- missing o -->
              var name=$('[id=updateotherone1]').val();

Should be: <p>Name:<input type="text" id="updatetherone1"/></p>

Sidenote:

If you want to avoid those kind of silly typos, just id and label them properly. Example:

<p>Name:<input type="text" id="name_field"/></p>
<p>Email:<input type="text" id="email_field"/></p>

Upvotes: 1

Related Questions