Jump to content

Recommended Posts

Hi everyone,

 

I'm new here and i'm also new with coding in PHP. I have written one Restful Api based on one tutorial and i need Restful Api for connecting my Android application to server. I need some help with making this to work. I need to update user details.

This is the code i'm using:

class DbHandler {

public function updateUser($id, $name) {
        $stmt = $this->conn->prepare("UPDATE users SET name = ? WHERE id = ?");
        $stmt->bind_param("is", $id, $name);
        $stmt->execute();
        $num_affected_rows = $stmt->affected_rows;
        $stmt->close();
        return $num_affected_rows > 0;

 }
}
 
This is preparation statement for updating a existing user.
 
Now here is a fragment of code from 
index.php
 where i'm calling all methods:
 
$app->put('/user/:id', 'authenticate', function($id) use($app) {


verifyRequiredParams(array('name'));


global $id;
$name = $app->request->put('name');


$db = new DbHandler();
$response = array();


$result = $db->updateUser($id, $name);
if ($result) {
$response["error"] = false;
$response["message"] = "User updated successfully";
} else {
$response["error"] = true;
$resopnse["message"] = "User failed to update. Please try again";
}
echoRespnse(200, $response);
});

When i try to send request, i'm getting only this:

{
  "error": true
}

 

 Any help would be appreciated. Thanks.

Share this post


Link to post
Share on other sites

Are these spelled correctly?

$resopnse["message"] = "User failed to update. Please try again";
}
echoRespnse(200, $response);

Share this post


Link to post
Share on other sites

This is the function for echoing the response:

function echoRespnse($status_code, $response) {
    $app = \Slim\Slim::getInstance();
    // Http response code
    $app->status($status_code);

    // setting response content type to json
    $app->contentType('application/json');

    echo json_encode($response);
}

I'm not sure what did you mean exactly? 

Share this post


Link to post
Share on other sites

Well, your misspelled function name is not a problem since you matched the name to the call. But what about the other line I posted?

Share this post


Link to post
Share on other sites

I can see i have misspelled function, but i can't change it right now. I'm using text editor and i don't have refactoring option there. 

Well i'm not worried because it's not displaying the error message too. I'm worried because i can't update a user. I guess that returning value somewhere is null and maybe because of that i'm getting always error = true;

 

Is my method in DbHandler class okay?

Edited by Dule95D

Share this post


Link to post
Share on other sites

Your question didn't say what was wrong. I assume because you stored the message in a non-existent var that the problem was simply a missing message.

 

You could turn on php error checking and see if you any other typos that are causing your failure. See my signature.

Share this post


Link to post
Share on other sites

The problem is that i'm not getting successful result while i'm sending a request. I'm getting always else condition that there is some error. The method i have posted, should update user details = name. 

 

For example i have another method which is doing a great job and it is almost the similar code and it is working:

$app->put('/groups/:id', 'authenticate', function($group_id) use($app) {
            // check for required params
            verifyRequiredParams(array('group_name', 'status'));

            global $user_id;            
            $group = $app->request->put('group_name');
            $status = $app->request->put('status');

            $db = new DbHandler();
            $response = array();

            // updating group
            $result = $db->updateGroup($user_id, $group_id, $group, $status);
            if ($result) {
                // group updated successfully
                $response["error"] = false;
                $response["message"] = "Group updated successfully";
            } else {
                // group failed to update
                $response["error"] = true;
                $response["message"] = "Group failed to update. Please try again!";
            }
            echoRespnse(200, $response);
        });

Share this post


Link to post
Share on other sites

You don't check if your query actually executed - poor programming.

 

did you turn on error checking?

Share this post


Link to post
Share on other sites

You can see that i'm still learning and trying to make something new and improve my skills. 

 

I'm checking if query is executed in DbHandler class. 

 

I have posted error checking at the top of my code, but i'm not sure how should i use it.

Share this post


Link to post
Share on other sites

If you posted my sample at the beginning of this script you will see errors as they occur

Share this post


Link to post
Share on other sites

The order of your parameters is wrong: In the bind_param() call, you assume it's (ID, name), but in the query it's actually (name, ID). So you need

$stmt->bind_param("si", $name, $id);

Using the number of affected rows as an error condition is also a bad idea, because it's perfectly normal for an UPDATE query to have no effect (e. g. when a previous process has already updated the value). At best, you'd include the affected rows as informational data. To get real errors, enable error reporting for MySQLi before you establish the database connection:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Now you'll get a mysqli_exception whenever a query fails. If you leave the exception alone (meaning: you don't catch it), PHP will automatically emit a 500 response code to signal an error.

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.