{"id":383,"date":"2021-01-30T22:52:00","date_gmt":"2021-01-30T22:52:00","guid":{"rendered":"https:\/\/rishikantsri.in\/blog\/?p=383"},"modified":"2023-10-11T09:45:40","modified_gmt":"2023-10-11T09:45:40","slug":"building-a-secure-php-api-for-mobile-clients-logincrud-operations-jwt-authentication-and-meaningful-responses","status":"publish","type":"post","link":"https:\/\/rishikantsri.in\/blog\/building-a-secure-php-api-for-mobile-clients-logincrud-operations-jwt-authentication-and-meaningful-responses\/","title":{"rendered":"Building a Secure PHP API for Mobile Clients: Login,CRUD Operations, JWT Authentication, and Meaningful Responses"},"content":{"rendered":"\n<p>(updated) In today&#8217;s mobile-first world, building a robust and secure PHP API is crucial. This API should not only perform CRUD (Create, Read, Update, Delete) operations but also ensure API security, user authentication with JSON Web Tokens (JWT), and provide meaningful responses with status codes for mobile applications.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Setting Up Your Environment<\/h3>\n\n\n\n<p>Before we dive into PHP API development, ensure you have the necessary tools and environment set up:<\/p>\n\n\n\n<ol>\n<li><strong>PHP Installed<\/strong>: Make sure you have PHP installed on your server.<\/li>\n\n\n\n<li><strong>MySQL Database<\/strong>: Set up a MySQL database to interact with your API.<\/li>\n\n\n\n<li><strong>Web Server<\/strong>: Configure a web server like Apache or Nginx to handle PHP requests.<\/li>\n<\/ol>\n\n\n\n<p>Let&#8217;s create 6 files, you might have the following files:<\/p>\n\n\n\n<ol>\n<li>index.php: default file<\/li>\n\n\n\n<li><code>login.php<\/code>: Contains the Login operation.<\/li>\n\n\n\n<li><code>create.php<\/code>: Contains the <code>create<\/code> operation.<\/li>\n\n\n\n<li><code>read.php<\/code>: Contains the Read operation.<\/li>\n\n\n\n<li><code>update.php<\/code>: Contains the Update operation.<\/li>\n\n\n\n<li><code>delete.php<\/code>: Contains the Delete operation.<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<p>Each of these files would handle a specific API endpoint.<\/p>\n\n\n\n<p>The full API URL for each function in a typical setup would depend on your web server configuration and URL structure. Assuming your API is hosted on http:\/\/example.com\/api\/, here are the full API URLs for each function:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><code>create<\/code> Operation:<\/h2>\n\n\n\n<p>Full API URL: http:\/\/phpapis.test\/api\/<code>create<\/code>.php<\/p>\n\n\n\n<p>HTTP Method: POST<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Read Operation:<\/h2>\n\n\n\n<p>Full API URL: http:\/\/phpapis.test\/api\/read.php<\/p>\n\n\n\n<p>HTTP Method: GET<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Update Operation:<\/h2>\n\n\n\n<p>Full API URL: http:\/\/phpapis.test\/api\/update.php<\/p>\n\n\n\n<p>HTTP Method: POST<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Delete Operation:<\/h2>\n\n\n\n<p>Full API URL: http:\/\/phpapis.test\/api\/delete.php<\/p>\n\n\n\n<p>HTTP Method: POST<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Login Operation:<\/h2>\n\n\n\n<p>Full API URL: http:\/\/phpapis.test\/api\/login.php<\/p>\n\n\n\n<p>HTTP Method: POST<\/p>\n\n\n\n<p>you can achieve clean URLs without <code>.php<\/code> extensions using Apache&#8217;s <code>.htaccess<\/code> file as an example:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.800018310546875px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Enable URL rewriting\nRewriteEngine On\n\n# to send bearer token with request\nRewriteCond %{HTTP:Authorization} ^(.+)$\nRewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n\n\n\n# Redirect URLs with .php extension to non-extension versions\nRewriteCond %{THE_REQUEST} \\s\/+(.*?)\\.php [NC]\nRewriteRule ^ \/%1 [R=301,L]\n\n# Rewrite URLs without the .php extension to their corresponding .php files\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteCond %{REQUEST_FILENAME}.php -f\nRewriteRule ^([^\\.]+)$ $1.php [NC,L]\n\n# Define rules to map clean URLs to PHP scripts\nRewriteRule ^api\/create$ create.php [L]\nRewriteRule ^api\/read$ read.php [L]\nRewriteRule ^api\/update$ update.php [L]\nRewriteRule ^api\/delete$ delete.php [L]\nRewriteRule ^api\/login$ login.php [L]\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6B737C\"># Enable URL rewriting<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteEngine <\/span><span style=\"color: #79B8FF\">On<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\"># to send bearer token with request<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteCond <\/span><span style=\"color: #F97583\">%<\/span><span style=\"color: #B392F0\">{HTTP:Authorization} <\/span><span style=\"color: #F97583\">^<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #B392F0\">)$<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteRule <\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #B392F0\"> [E<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\">HTTP_AUTHORIZATION:<\/span><span style=\"color: #F97583\">%<\/span><span style=\"color: #B392F0\">{HTTP:Authorization}]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\"># Redirect URLs with .php extension to non-extension versions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteCond <\/span><span style=\"color: #F97583\">%<\/span><span style=\"color: #B392F0\">{THE_REQUEST} \\s<\/span><span style=\"color: #F97583\">\/+<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #F97583\">*?<\/span><span style=\"color: #B392F0\">)\\<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\">php [NC]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteRule <\/span><span style=\"color: #F97583\">^<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">\/%<\/span><span style=\"color: #F8F8F8\">1<\/span><span style=\"color: #B392F0\"> [R<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #F8F8F8\">301<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\">L]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\"># Rewrite URLs without the .php extension to their corresponding .php files<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteCond <\/span><span style=\"color: #F97583\">%<\/span><span style=\"color: #B392F0\">{REQUEST_FILENAME} <\/span><span style=\"color: #F97583\">!-<\/span><span style=\"color: #B392F0\">d<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteCond <\/span><span style=\"color: #F97583\">%<\/span><span style=\"color: #B392F0\">{REQUEST_FILENAME}<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\">php <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #B392F0\">f<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteRule <\/span><span style=\"color: #F97583\">^<\/span><span style=\"color: #B392F0\">([<\/span><span style=\"color: #F97583\">^<\/span><span style=\"color: #B392F0\">\\<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #B392F0\">)$ $<\/span><span style=\"color: #F8F8F8\">1<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">php [NC<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\">L]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\"># Define rules to map clean URLs to PHP scripts<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteRule <\/span><span style=\"color: #F97583\">^<\/span><span style=\"color: #B392F0\">api<\/span><span style=\"color: #F97583\">\/<\/span><span style=\"color: #B392F0\">create$ create<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\">php [L]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteRule <\/span><span style=\"color: #F97583\">^<\/span><span style=\"color: #B392F0\">api<\/span><span style=\"color: #F97583\">\/<\/span><span style=\"color: #B392F0\">read$ read<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\">php [L]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteRule <\/span><span style=\"color: #F97583\">^<\/span><span style=\"color: #B392F0\">api<\/span><span style=\"color: #F97583\">\/<\/span><span style=\"color: #B392F0\">update$ update<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\">php [L]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteRule <\/span><span style=\"color: #F97583\">^<\/span><span style=\"color: #B392F0\">api<\/span><span style=\"color: #F97583\">\/<\/span><span style=\"color: #B392F0\">delete$ delete<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\">php [L]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">RewriteRule <\/span><span style=\"color: #F97583\">^<\/span><span style=\"color: #B392F0\">api<\/span><span style=\"color: #F97583\">\/<\/span><span style=\"color: #B392F0\">login$ login<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\">php [L]<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Login Operation<\/h2>\n\n\n\n<p>Let&#8217;s add a Login operation to the PHP API with JWT authentication for user login. We&#8217;ll also provide responses suitable for mobile clients.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"&lt;?php\n\/\/ Include JWT library\nrequire 'vendor\/autoload.php';\n\nuse Firebase\\JWT\\JWT;\n\n\/\/ Database configuration\n$servername = &quot;localhost&quot;;\n$username = &quot;root&quot;;\n$password = &quot;&quot;;\n$dbname = &quot;phpapis&quot;;\n\n\/\/ JWT secret key\n$jwtSecretKey = &quot;your_jwt_secret_key&quot;;\n\n\/\/ Function to establish a database connection\nfunction connectToDatabase() {\n    global $servername, $username, $password, $dbname;\n    \n    $connection = new mysqli($servername, $username, $password, $dbname);\n\n    if ($connection-&gt;connect_error) {\n        die(&quot;Connection failed: &quot; . $connection-&gt;connect_error);\n    }\n\n    return $connection;\n}\n\n\/\/ Function to authenticate a user and generate a JWT\nfunction authenticateUser($username, $password) {\n    global $jwtSecretKey;\n\n    \/\/ Replace this with your actual user authentication logic\n    \/\/ For this example, we'll assume you have a user database\n    $user = getUserFromDatabase($username);\n\n    if ($user !== null &amp;&amp; password_verify($password, $user['password'])) {\n        \/\/ User exists in the database, and the provided password matches the hashed password\n        \/\/ Create a payload for the JWT with user-related data\n        $payload = array(\n            &quot;user_id&quot; =&gt; $user['id'],\n            &quot;username&quot; =&gt; $user['username'],\n            &quot;registration_date&quot; =&gt; $user['date'],\n            \/\/ You can add more user-related data here\n        );\n        $algorithm = 'HS256';\n        \/\/ Encode the payload into a JWT using the secret key\n        $jwt = JWT::encode($payload, $jwtSecretKey,$algorithm);\n\n        return $jwt;\n    }\n\n    return false;\n}\n\n\/\/ Login Operation\nif ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot; &amp;&amp; isset($_POST[&quot;username&quot;]) &amp;&amp; isset($_POST[&quot;password&quot;])) {\n    $username = $_POST[&quot;username&quot;];\n    $password = $_POST[&quot;password&quot;];\n\n    \/\/ echo $username . $password;\n\n    $jwt = authenticateUser($username, $password);\n\n    if ($jwt) {\n        http_response_code(200);\n        echo json_encode([&quot;status&quot; =&gt; &quot;success&quot;, &quot;jwt&quot; =&gt; $jwt]);\n    } else {\n        http_response_code(401);\n        echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;Authentication failed&quot;]);\n    }\n} else {\n    http_response_code(400);\n    echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;Invalid request&quot;]);\n}\n\n\n\/\/ Function to retrieve user data from the database (dummy example)\nfunction getUserFromDatabase($username) {\n    \/\/ Replace this with your actual database query to fetch user data by username\n    \/\/ Example database query (using PDO):\n    $db = new PDO('mysql:host=localhost;dbname=phpapis', 'root', '');\n    $stmt = $db-&gt;prepare('SELECT * FROM users WHERE username = :username');\n    $stmt-&gt;bindParam(':username', $username);\n    $stmt-&gt;execute();\n    $user = $stmt-&gt;fetch(PDO::FETCH_ASSOC);\n    $db = null;\n\n    return $user;\n}\n\n?&gt;\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">&lt;?<\/span><span style=\"color: #B392F0\">php<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Include JWT library<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">require<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;vendor\/autoload.php&#39;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">use<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Firebase<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Database configuration<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$servername <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;localhost&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;root&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$password <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$dbname <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;phpapis&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ JWT secret key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$jwtSecretKey <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;your_jwt_secret_key&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to establish a database connection<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> connectToDatabase() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">global<\/span><span style=\"color: #B392F0\"> $servername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $dbname;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $connection <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">mysqli<\/span><span style=\"color: #B392F0\">($servername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $dbname);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($connection<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">connect_error) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">die<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&quot;Connection failed: &quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\"> $connection<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">connect_error);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $connection;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to authenticate a user and generate a JWT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> authenticateUser($username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">global<\/span><span style=\"color: #B392F0\"> $jwtSecretKey;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Replace this with your actual user authentication logic<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ For this example, we&#39;ll assume you have a user database<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $user <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> getUserFromDatabase<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$username<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($user <\/span><span style=\"color: #F97583\">!==<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">&amp;&amp;<\/span><span style=\"color: #B392F0\"> password_verify<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$password<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $user[<\/span><span style=\"color: #FFAB70\">&#39;password&#39;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ User exists in the database, and the provided password matches the hashed password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Create a payload for the JWT with user-related data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        $payload <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> array(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #FFAB70\">&quot;user_id&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> $user[<\/span><span style=\"color: #FFAB70\">&#39;id&#39;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> $user[<\/span><span style=\"color: #FFAB70\">&#39;username&#39;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #FFAB70\">&quot;registration_date&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> $user[<\/span><span style=\"color: #FFAB70\">&#39;date&#39;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #6B737C\">\/\/ You can add more user-related data here<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        $algorithm <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;HS256&#39;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Encode the payload into a JWT using the secret key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        $jwt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #B392F0\">encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$payload<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $jwtSecretKey<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\">$algorithm<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $jwt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Login Operation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($_SERVER[<\/span><span style=\"color: #FFAB70\">&quot;REQUEST_METHOD&quot;<\/span><span style=\"color: #B392F0\">] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;POST&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">&amp;&amp;<\/span><span style=\"color: #B392F0\"> isset<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$_POST[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">&amp;&amp;<\/span><span style=\"color: #B392F0\"> isset<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$_POST[<\/span><span style=\"color: #FFAB70\">&quot;password&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $_POST[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $password <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $_POST[<\/span><span style=\"color: #FFAB70\">&quot;password&quot;<\/span><span style=\"color: #B392F0\">];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ echo $username . $password;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $jwt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> authenticateUser<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($jwt) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">200<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;success&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;jwt&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> $jwt]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">401<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Authentication failed&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">} <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">400<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Invalid request&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to retrieve user data from the database (dummy example)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> getUserFromDatabase($username) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Replace this with your actual database query to fetch user data by username<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Example database query (using PDO):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&#39;mysql:host=localhost;dbname=phpapis&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;root&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;&#39;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $db<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">prepare<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;<\/span><span style=\"color: #F97583\">SELECT<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #FFAB70\"> users <\/span><span style=\"color: #F97583\">WHERE<\/span><span style=\"color: #FFAB70\"> username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> :username&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:username&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">execute<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $user <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">fetch<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #B392F0\">FETCH_ASSOC<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $user;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">?&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"439\" src=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-27-1024x439.png\" alt=\"\" class=\"wp-image-393\" srcset=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-27-1024x439.png 1024w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-27-300x129.png 300w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-27-768x329.png 768w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-27.png 1367w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Create (C) Operation<\/h4>\n\n\n\n<p>Creating a new record in your database is essential, and now it&#8217;s secure with JWT authentication:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:29.700000762939453px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"&lt;?php\n\n\/\/ Include JWT library\nrequire 'vendor\/autoload.php';\n\nuse Firebase\\JWT\\JWT;\n\n\/\/ Database configuration\n$servername = &quot;localhost&quot;;\n$username = &quot;root&quot;;\n$password = &quot;&quot;;\n$dbname = &quot;phpapis&quot;;\n\n\/\/ JWT secret key\n$jwtSecretKey = &quot;your_jwt_secret_key&quot;;\n\n\/\/ Function to establish a database connection\nfunction connectToDatabase()\n{\n    global $servername, $username, $password, $dbname;\n\n    $connection = new mysqli($servername, $username, $password, $dbname);\n\n    if ($connection-&gt;connect_error) {\n        die(&quot;Connection failed: &quot; . $connection-&gt;connect_error);\n    }\n\n    return $connection;\n}\n\n\n\/\/ User Registration Operation\nif ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot; &amp;&amp; isset($_POST[&quot;username&quot;]) &amp;&amp; isset($_POST[&quot;password&quot;])) {\n    $newUsername = $_POST[&quot;username&quot;];\n    $newPassword = $_POST[&quot;password&quot;];\n\n    \/\/ Check if the username is available (not already taken)\n    if (isUsernameAvailable($newUsername)) {\n        \/\/ Hash the password before storing it in the database\n        $hashedPassword = password_hash($newPassword, PASSWORD_BCRYPT);\n\n        \/\/ Store the new user in the database\n        if (createUserInDatabase($newUsername, $hashedPassword)) {\n            http_response_code(201); \/\/ HTTP status code for successful resource creation\n            echo json_encode([&quot;status&quot; =&gt; &quot;success&quot;, &quot;message&quot; =&gt; &quot;User created successfully&quot;]);\n        } else {\n            http_response_code(500); \/\/ HTTP status code for server error\n            echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;User creation failed&quot;]);\n        }\n    } else {\n        http_response_code(400); \/\/ HTTP status code for bad request\n        echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;Username already taken&quot;]);\n    }\n} else {\n    http_response_code(400);\n    echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;Invalid request&quot;]);\n}\n\n\n\/\/ Function to check if a username is available\nfunction isUsernameAvailable($username)\n{\n    \/\/ Replace this with your actual database query to check if the username is available\n    \/\/ Example database query (using PDO):\n    $db = new PDO('mysql:host=localhost;dbname=phpapis', 'root', '');\n    $stmt = $db-&gt;prepare('SELECT * FROM users WHERE username = :username');\n    $stmt-&gt;bindParam(':username', $username);\n    $stmt-&gt;execute();\n    $user = $stmt-&gt;fetch(PDO::FETCH_ASSOC);\n    $db = null;\n\n    return $user === false; \/\/ If no user is found, the username is available\n}\n\n\/\/ Function to create a user in the database\nfunction createUserInDatabase($username, $password)\n{\n    \/\/ Create a timestamp for the current date and time\n    $currentDate = date('Y-m-d H:i:s');\n    \n    \/\/ Replace this with your actual database insert query to create a new user\n    \/\/ Example database query (using PDO):\n\n    $db = new PDO('mysql:host=localhost;dbname=phpapis', 'root', '');\n    $stmt = $db-&gt;prepare('INSERT INTO\n    users (username, password, date) \n    VALUES (:username, :password, :registration_date)');\n\n    $stmt-&gt;bindParam(':username', $username);\n    $stmt-&gt;bindParam(':password', $password);\n    $stmt-&gt;bindParam(':registration_date', $currentDate);\n\n    if ($stmt-&gt;execute()) {\n        return true;\n    }\n\n    return false;\n}\n\n\/\/ Function to retrieve user data from the database (dummy example)\nfunction getUserFromDatabase($username)\n{\n    \/\/ Replace this with your actual database query to fetch user data by username\n    \/\/ Example database query (using PDO):\n    $db = new PDO('mysql:host=localhost;dbname=phpapis', 'root', '');\n    $stmt = $db-&gt;prepare('SELECT * FROM users WHERE username = :username');\n    $stmt-&gt;bindParam(':username', $username);\n    $stmt-&gt;execute();\n    $user = $stmt-&gt;fetch(PDO::FETCH_ASSOC);\n    $db = null;\n\n    return $user;\n}\n\n\n\n?&gt;\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">&lt;?<\/span><span style=\"color: #B392F0\">php<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Include JWT library<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">require<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;vendor\/autoload.php&#39;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">use<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Firebase<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Database configuration<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$servername <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;localhost&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;root&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$password <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$dbname <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;phpapis&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ JWT secret key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$jwtSecretKey <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;your_jwt_secret_key&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to establish a database connection<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> connectToDatabase()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">global<\/span><span style=\"color: #B392F0\"> $servername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $dbname;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $connection <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">mysqli<\/span><span style=\"color: #B392F0\">($servername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $dbname);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($connection<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">connect_error) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">die<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&quot;Connection failed: &quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\"> $connection<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">connect_error);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $connection;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ User Registration Operation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($_SERVER[<\/span><span style=\"color: #FFAB70\">&quot;REQUEST_METHOD&quot;<\/span><span style=\"color: #B392F0\">] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;POST&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">&amp;&amp;<\/span><span style=\"color: #B392F0\"> isset<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$_POST[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">&amp;&amp;<\/span><span style=\"color: #B392F0\"> isset<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$_POST[<\/span><span style=\"color: #FFAB70\">&quot;password&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $newUsername <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $_POST[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $newPassword <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $_POST[<\/span><span style=\"color: #FFAB70\">&quot;password&quot;<\/span><span style=\"color: #B392F0\">];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Check if the username is available (not already taken)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> (isUsernameAvailable<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$newUsername<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Hash the password before storing it in the database<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        $hashedPassword <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> password_hash<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$newPassword<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> PASSWORD_BCRYPT<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Store the new user in the database<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> (createUserInDatabase<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$newUsername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $hashedPassword<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">201<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for successful resource creation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;success&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;User created successfully&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">500<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for server error<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;User creation failed&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">400<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for bad request<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Username already taken&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">} <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">400<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Invalid request&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to check if a username is available<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> isUsernameAvailable($username)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Replace this with your actual database query to check if the username is available<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Example database query (using PDO):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&#39;mysql:host=localhost;dbname=phpapis&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;root&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;&#39;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $db<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">prepare<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;<\/span><span style=\"color: #F97583\">SELECT<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #FFAB70\"> users <\/span><span style=\"color: #F97583\">WHERE<\/span><span style=\"color: #FFAB70\"> username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> :username&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:username&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">execute<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $user <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">fetch<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #B392F0\">FETCH_ASSOC<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $user <\/span><span style=\"color: #F97583\">===<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ If no user is found, the username is available<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to create a user in the database<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> createUserInDatabase($username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Create a timestamp for the current date and time<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $currentDate <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> date<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;Y-m-d H:i:s&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Replace this with your actual database insert query to create a new user<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Example database query (using PDO):<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&#39;mysql:host=localhost;dbname=phpapis&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;root&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;&#39;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $db<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">prepare<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;<\/span><span style=\"color: #F97583\">INSERT INTO<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FFAB70\">    users (username, <\/span><span style=\"color: #F97583\">password<\/span><span style=\"color: #FFAB70\">, <\/span><span style=\"color: #F97583\">date<\/span><span style=\"color: #FFAB70\">) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #FFAB70\">    <\/span><span style=\"color: #F97583\">VALUES<\/span><span style=\"color: #FFAB70\"> (:username, :<\/span><span style=\"color: #F97583\">password<\/span><span style=\"color: #FFAB70\">, :registration_date)&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:username&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:password&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:registration_date&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $currentDate<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">execute<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">true<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to retrieve user data from the database (dummy example)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> getUserFromDatabase($username)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Replace this with your actual database query to fetch user data by username<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Example database query (using PDO):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&#39;mysql:host=localhost;dbname=phpapis&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;root&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;&#39;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $db<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">prepare<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;<\/span><span style=\"color: #F97583\">SELECT<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #FFAB70\"> users <\/span><span style=\"color: #F97583\">WHERE<\/span><span style=\"color: #FFAB70\"> username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> :username&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:username&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">execute<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $user <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">fetch<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #B392F0\">FETCH_ASSOC<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $user;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">?&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"384\" src=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-26-1024x384.png\" alt=\"\" class=\"wp-image-392\" srcset=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-26-1024x384.png 1024w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-26-300x113.png 300w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-26-768x288.png 768w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-26.png 1432w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Read (R) Operation<\/h4>\n\n\n\n<p>Reading data from your database now requires JWT authentication:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"&lt;?php\n\n\/\/ Include JWT library\nrequire 'vendor\/autoload.php';\n\nuse Firebase\\JWT\\JWT;\n\n\/\/ Database configuration\n$servername = &quot;localhost&quot;;\n$username = &quot;root&quot;;\n$password = &quot;&quot;;\n$dbname = &quot;phpapis&quot;;\n\n\/\/ JWT secret key\n$jwtSecretKey = &quot;your_jwt_secret_key&quot;;\n\n\/\/ Function to establish a database connection\nfunction connectToDatabase()\n{\n    global $servername, $username, $password, $dbname;\n\n    $connection = new mysqli($servername, $username, $password, $dbname);\n\n    if ($connection-&gt;connect_error) {\n        die(&quot;Connection failed: &quot; . $connection-&gt;connect_error);\n    }\n\n    return $connection;\n}\n\nif ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;GET&quot; &amp;&amp; isset($_GET[&quot;username&quot;])) {\n    \/\/ Read Operation: Retrieve user data\n    $usernameToRead = $_GET[&quot;username&quot;];\n\n    \/\/ Check if the username exists\n    $user = getUserFromDatabase($usernameToRead);\n\n    if ($user !== false) {\n        http_response_code(200); \/\/ HTTP status code for success\n        echo json_encode([&quot;status&quot; =&gt; &quot;success&quot;, &quot;user&quot; =&gt; $user]);\n    } else {\n        http_response_code(404); \/\/ HTTP status code for not found\n        echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;User not found&quot;]);\n    }\n} else {\n    http_response_code(400);\n    echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;Invalid request&quot;]);\n}\n\n\/\/ Function to retrieve user data from the database (dummy example)\nfunction getUserFromDatabase($username)\n{\n    \/\/ Replace this with your actual database query to fetch user data by username\n    \/\/ Example database query (using PDO):\n    $db = new PDO('mysql:host=localhost;dbname=phpapis', 'root', '');\n    $stmt = $db-&gt;prepare('SELECT username, date FROM users WHERE username = :username');\n    $stmt-&gt;bindParam(':username', $username);\n    $stmt-&gt;execute();\n    $user = $stmt-&gt;fetch(PDO::FETCH_ASSOC);\n    $db = null;\n\n    return $user;\n}\n\n?&gt;\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">&lt;?<\/span><span style=\"color: #B392F0\">php<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Include JWT library<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">require<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;vendor\/autoload.php&#39;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">use<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Firebase<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Database configuration<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$servername <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;localhost&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;root&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$password <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$dbname <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;phpapis&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ JWT secret key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$jwtSecretKey <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;your_jwt_secret_key&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to establish a database connection<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> connectToDatabase()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">global<\/span><span style=\"color: #B392F0\"> $servername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $dbname;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $connection <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">mysqli<\/span><span style=\"color: #B392F0\">($servername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $dbname);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($connection<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">connect_error) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">die<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&quot;Connection failed: &quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\"> $connection<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">connect_error);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $connection;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($_SERVER[<\/span><span style=\"color: #FFAB70\">&quot;REQUEST_METHOD&quot;<\/span><span style=\"color: #B392F0\">] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;GET&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">&amp;&amp;<\/span><span style=\"color: #B392F0\"> isset<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$_GET[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Read Operation: Retrieve user data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $usernameToRead <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $_GET[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Check if the username exists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $user <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> getUserFromDatabase<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$usernameToRead<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($user <\/span><span style=\"color: #F97583\">!==<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">200<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for success<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;success&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;user&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> $user]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">404<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for not found<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;User not found&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">} <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">400<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Invalid request&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to retrieve user data from the database (dummy example)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> getUserFromDatabase($username)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Replace this with your actual database query to fetch user data by username<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Example database query (using PDO):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&#39;mysql:host=localhost;dbname=phpapis&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;root&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;&#39;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $db<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">prepare<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;<\/span><span style=\"color: #F97583\">SELECT<\/span><span style=\"color: #FFAB70\"> username, <\/span><span style=\"color: #F97583\">date<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #FFAB70\"> users <\/span><span style=\"color: #F97583\">WHERE<\/span><span style=\"color: #FFAB70\"> username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> :username&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:username&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">execute<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $user <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">fetch<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #B392F0\">FETCH_ASSOC<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $user;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">?&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"344\" src=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-28-1024x344.png\" alt=\"\" class=\"wp-image-395\" srcset=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-28-1024x344.png 1024w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-28-300x101.png 300w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-28-768x258.png 768w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-28.png 1430w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Update (U) Operation<\/h4>\n\n\n\n<p>Updating an existing record is now more secure with JWT-based authentication:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:29.69999885559082px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"&lt;?php\n\n\/\/ Include JWT library\nrequire 'vendor\/autoload.php';\n\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\/\/ Database configuration\n$servername = &quot;localhost&quot;;\n$username = &quot;root&quot;;\n$password = &quot;&quot;;\n$dbname = &quot;phpapis&quot;;\n\n\/\/ JWT secret key\n$jwtSecretKey = &quot;your_jwt_secret_key&quot;;\n\n\/\/ Function to establish a database connection\nfunction connectToDatabase()\n{\n    global $servername, $username, $password, $dbname;\n\n    $connection = new mysqli($servername, $username, $password, $dbname);\n\n    if ($connection-&gt;connect_error) {\n        die(&quot;Connection failed: &quot; . $connection-&gt;connect_error);\n    }\n\n    return $connection;\n}\n\n\/\/ Function to validate and decode the JWT\nfunction validateJWT($jwt)\n{\n    global $jwtSecretKey;\n   \n\n    $headers = null; \/\/ We're not interested in the headers in this example\n\n    try {\n         \n        $decoded = JWT::decode($jwt, new Key($jwtSecretKey, 'HS256'));\n        return $decoded;\n    }catch (Firebase\\JWT\\ExpiredException $e) {\n        \/\/ Handle token expiration\n        echo $e;\n        return null;\n    } catch (Firebase\\JWT\\BeforeValidException $e) {\n        \/\/ Handle token not yet valid\n        echo $e;\n        return null;\n    } catch (Firebase\\JWT\\SignatureInvalidException $e) {\n        \/\/ Handle invalid signature\n        echo $e;\n        return null;\n    } catch (Exception $e) {\n        \/\/ Handle other exceptions\n        echo $e;\n        return null;\n    }\n}\n\n\/\/ Function to update the user's password\nfunction updateUserPassword($username, $newPassword)\n{\n    \/\/ Hash the new password before storing it in the database\n    $hashedPassword = password_hash($newPassword, PASSWORD_BCRYPT);\n\n    \/\/ Replace this with your actual database update query to update the user's password\n    \/\/ Example database query (using PDO):\n    $db = new PDO('mysql:host=localhost;dbname=phpapis', 'root', '');\n    $stmt = $db-&gt;prepare('UPDATE users SET password = :password WHERE username = :username');\n    $stmt-&gt;bindParam(':username', $username);\n    $stmt-&gt;bindParam(':password', $hashedPassword);\n\n    if ($stmt-&gt;execute()) {\n        return true;\n    }\n\n    return false;\n}\n\n\n\nif ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot; &amp;&amp; isset($_POST[&quot;username&quot;])) {\n    \/\/ Update Operation: Update user password\n    $requestedUsername = $_POST[&quot;username&quot;];\n\n    \/\/ Check if the JWT is provided in the request header\n    if (isset($_SERVER['HTTP_AUTHORIZATION'])) {\n        $authorizationHeader = $_SERVER['HTTP_AUTHORIZATION'];\n        $jwt = str_replace('Bearer ', '', $authorizationHeader);\n\n        \/\/ echo $jwt;\n        \/\/ Validate the JWT\n        $decodedJWT = validateJWT($jwt);\n      \n\n        if ($decodedJWT !== null) {\n            \/\/ The JWT is valid, and you can access the claims, including the user's information\n            \/\/ Here, we assume that the &quot;username&quot; claim in the JWT is the authenticated user's username\n            $authenticatedUsername = $decodedJWT-&gt;username;\n\n            if ($authenticatedUsername === $requestedUsername) {\n                \/\/ The authenticated user is updating their own password\n                \/\/ Retrieve the new password from the request\n                $newPassword = $_POST[&quot;password&quot;];\n\n                \/\/ Update the user's password in the database\n                if (updateUserPassword($requestedUsername, $newPassword)) {\n                    http_response_code(200); \/\/ HTTP status code for success\n                    echo json_encode([&quot;status&quot; =&gt; &quot;success&quot;, &quot;message&quot; =&gt; &quot;Password updated successfully&quot;]);\n                } else {\n                    http_response_code(500); \/\/ HTTP status code for server error\n                    echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;Password update failed&quot;]);\n                }\n            } else {\n                http_response_code(403); \/\/ HTTP status code for forbidden\n                echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;Access forbidden&quot;]);\n            }\n        } else {\n            http_response_code(401); \/\/ HTTP status code for unauthorized\n            echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;Invalid JWT&quot;]);\n        }\n    } else {\n        http_response_code(401); \/\/ HTTP status code for unauthorized\n        echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;JWT not provided&quot;]);\n    }\n} else {\n    http_response_code(400);\n    echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;Invalid request&quot;]);\n}\n\n\/\/ Function to retrieve user data from the database (dummy example)\nfunction getUserFromDatabase($username)\n{\n    \/\/ Replace this with your actual database query to fetch user data by username\n    \/\/ Example database query (using PDO):\n    $db = new PDO('mysql:host=localhost;dbname=phpapis', 'root', '');\n    $stmt = $db-&gt;prepare('SELECT * FROM users WHERE username = :username');\n    $stmt-&gt;bindParam(':username', $username);\n    $stmt-&gt;execute();\n    $user = $stmt-&gt;fetch(PDO::FETCH_ASSOC);\n    $db = null;\n\n    return $user;\n}\n\n?&gt;\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">&lt;?<\/span><span style=\"color: #B392F0\">php<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Include JWT library<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">require<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;vendor\/autoload.php&#39;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">use<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Firebase<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">use<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Firebase<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">Key<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Database configuration<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$servername <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;localhost&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;root&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$password <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$dbname <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;phpapis&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ JWT secret key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$jwtSecretKey <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;your_jwt_secret_key&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to establish a database connection<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> connectToDatabase()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">global<\/span><span style=\"color: #B392F0\"> $servername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $dbname;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $connection <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">mysqli<\/span><span style=\"color: #B392F0\">($servername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $dbname);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($connection<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">connect_error) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">die<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&quot;Connection failed: &quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\"> $connection<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">connect_error);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $connection;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to validate and decode the JWT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> validateJWT($jwt)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">global<\/span><span style=\"color: #B392F0\"> $jwtSecretKey;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">   <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $headers <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ We&#39;re not interested in the headers in this example<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">try<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">         <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        $decoded <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #B392F0\">decode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$jwt<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Key<\/span><span style=\"color: #B392F0\">($jwtSecretKey<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;HS256&#39;<\/span><span style=\"color: #B392F0\">)<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $decoded;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><span style=\"color: #F97583\">catch<\/span><span style=\"color: #B392F0\"> (<\/span><span style=\"color: #79B8FF\">Firebase<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">ExpiredException<\/span><span style=\"color: #B392F0\"> $e) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Handle token expiration<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo $e;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    } <\/span><span style=\"color: #F97583\">catch<\/span><span style=\"color: #B392F0\"> (<\/span><span style=\"color: #79B8FF\">Firebase<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">BeforeValidException<\/span><span style=\"color: #B392F0\"> $e) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Handle token not yet valid<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo $e;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    } <\/span><span style=\"color: #F97583\">catch<\/span><span style=\"color: #B392F0\"> (<\/span><span style=\"color: #79B8FF\">Firebase<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">SignatureInvalidException<\/span><span style=\"color: #B392F0\"> $e) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Handle invalid signature<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo $e;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    } <\/span><span style=\"color: #F97583\">catch<\/span><span style=\"color: #B392F0\"> (<\/span><span style=\"color: #79B8FF\">Exception<\/span><span style=\"color: #B392F0\"> $e) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Handle other exceptions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo $e;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to update the user&#39;s password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> updateUserPassword($username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $newPassword)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Hash the new password before storing it in the database<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $hashedPassword <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> password_hash<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$newPassword<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> PASSWORD_BCRYPT<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Replace this with your actual database update query to update the user&#39;s password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Example database query (using PDO):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&#39;mysql:host=localhost;dbname=phpapis&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;root&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;&#39;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $db<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">prepare<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;<\/span><span style=\"color: #F97583\">UPDATE<\/span><span style=\"color: #FFAB70\"> users <\/span><span style=\"color: #F97583\">SET<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">password<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> :<\/span><span style=\"color: #F97583\">password<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">WHERE<\/span><span style=\"color: #FFAB70\"> username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> :username&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:username&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:password&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $hashedPassword<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">execute<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">true<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($_SERVER[<\/span><span style=\"color: #FFAB70\">&quot;REQUEST_METHOD&quot;<\/span><span style=\"color: #B392F0\">] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;POST&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">&amp;&amp;<\/span><span style=\"color: #B392F0\"> isset<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$_POST[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Update Operation: Update user password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $requestedUsername <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $_POST[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Check if the JWT is provided in the request header<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> (isset<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$_SERVER[<\/span><span style=\"color: #FFAB70\">&#39;HTTP_AUTHORIZATION&#39;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        $authorizationHeader <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $_SERVER[<\/span><span style=\"color: #FFAB70\">&#39;HTTP_AUTHORIZATION&#39;<\/span><span style=\"color: #B392F0\">];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        $jwt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #B392F0\">str_replace<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;Bearer &#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $authorizationHeader<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ echo $jwt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Validate the JWT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        $decodedJWT <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> validateJWT<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$jwt<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">      <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($decodedJWT <\/span><span style=\"color: #F97583\">!==<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #6B737C\">\/\/ The JWT is valid, and you can access the claims, including the user&#39;s information<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #6B737C\">\/\/ Here, we assume that the &quot;username&quot; claim in the JWT is the authenticated user&#39;s username<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            $authenticatedUsername <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $decodedJWT<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">username;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($authenticatedUsername <\/span><span style=\"color: #F97583\">===<\/span><span style=\"color: #B392F0\"> $requestedUsername) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                <\/span><span style=\"color: #6B737C\">\/\/ The authenticated user is updating their own password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                <\/span><span style=\"color: #6B737C\">\/\/ Retrieve the new password from the request<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                $newPassword <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $_POST[<\/span><span style=\"color: #FFAB70\">&quot;password&quot;<\/span><span style=\"color: #B392F0\">];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                <\/span><span style=\"color: #6B737C\">\/\/ Update the user&#39;s password in the database<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> (updateUserPassword<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$requestedUsername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $newPassword<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                    http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">200<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for success<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                    echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;success&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Password updated successfully&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                    http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">500<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for server error<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                    echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Password update failed&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">403<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for forbidden<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Access forbidden&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">401<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for unauthorized<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Invalid JWT&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">401<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for unauthorized<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;JWT not provided&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">} <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">400<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Invalid request&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to retrieve user data from the database (dummy example)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> getUserFromDatabase($username)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Replace this with your actual database query to fetch user data by username<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Example database query (using PDO):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&#39;mysql:host=localhost;dbname=phpapis&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;root&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;&#39;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $db<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">prepare<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;<\/span><span style=\"color: #F97583\">SELECT<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #FFAB70\"> users <\/span><span style=\"color: #F97583\">WHERE<\/span><span style=\"color: #FFAB70\"> username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> :username&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:username&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">execute<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $user <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">fetch<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #B392F0\">FETCH_ASSOC<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $user;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">?&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"353\" src=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-29-1024x353.png\" alt=\"\" class=\"wp-image-396\" srcset=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-29-1024x353.png 1024w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-29-300x103.png 300w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-29-768x265.png 768w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-29.png 1291w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"366\" src=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-30-1024x366.png\" alt=\"\" class=\"wp-image-397\" srcset=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-30-1024x366.png 1024w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-30-300x107.png 300w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-30-768x275.png 768w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-30.png 1398w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Delete (D) Operation<\/h4>\n\n\n\n<p>Deleting a record is protected by JWT authentication:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"&lt;?php\n\n\/\/ Include JWT library\nrequire 'vendor\/autoload.php';\n\nuse Firebase\\JWT\\JWT;\n\n\/\/ Database configuration\n$servername = &quot;localhost&quot;;\n$username = &quot;root&quot;;\n$password = &quot;&quot;;\n$dbname = &quot;phpapis&quot;;\n\n\/\/ JWT secret key\n$jwtSecretKey = &quot;your_jwt_secret_key&quot;;\n\n\/\/ Function to establish a database connection\nfunction connectToDatabase()\n{\n    global $servername, $username, $password, $dbname;\n\n    $connection = new mysqli($servername, $username, $password, $dbname);\n\n    if ($connection-&gt;connect_error) {\n        die(&quot;Connection failed: &quot; . $connection-&gt;connect_error);\n    }\n\n    return $connection;\n}\n\nif ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;GET&quot; &amp;&amp; isset($_GET[&quot;username&quot;])) {\n    \/\/ Read Operation: Retrieve user data\n    $usernameToRead = $_GET[&quot;username&quot;];\n\n    \/\/ Check if the username exists\n    $user = getUserFromDatabase($usernameToRead);\n\n    if ($user !== false) {\n        http_response_code(200); \/\/ HTTP status code for success\n        echo json_encode([&quot;status&quot; =&gt; &quot;success&quot;, &quot;user&quot; =&gt; $user]);\n    } else {\n        http_response_code(404); \/\/ HTTP status code for not found\n        echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;User not found&quot;]);\n    }\n} elseif ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;DELETE&quot; &amp;&amp; isset($_GET[&quot;username&quot;])) {\n    \/\/ Delete Operation: Delete a user\n    $usernameToDelete = $_GET[&quot;username&quot;];\n\n    \/\/ Check if the user was successfully deleted\n    if (deleteUserFromDatabase($usernameToDelete)) {\n        \n        \/\/ http_response_code(204); \/\/ no content will be displayed HTTP status code for successful deletion\n        http_response_code(200); \/\/ HTTP status code for successful deletion\n        echo json_encode([&quot;status&quot; =&gt; &quot;success&quot;, &quot;message&quot; =&gt; &quot;User deleted successfully&quot;]);\n    } else {\n        http_response_code(404); \/\/ HTTP status code for not found\n        echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;User not found or deletion failed&quot;]);\n    }\n} else {\n    http_response_code(400);\n    echo json_encode([&quot;status&quot; =&gt; &quot;error&quot;, &quot;message&quot; =&gt; &quot;Invalid request&quot;]);\n}\n\n\/\/ Function to retrieve user data from the database (dummy example)\nfunction getUserFromDatabase($username)\n{\n    \/\/ Replace this with your actual database query to fetch user data by username\n    \/\/ Example database query (using PDO):\n    $db = new PDO('mysql:host=localhost;dbname=phpapis', 'root', '');\n    $stmt = $db-&gt;prepare('SELECT username, date FROM users WHERE username = :username');\n    $stmt-&gt;bindParam(':username', $username);\n    $stmt-&gt;execute();\n    $user = $stmt-&gt;fetch(PDO::FETCH_ASSOC);\n    $db = null;\n\n    return $user;\n}\n\n\/\/ Function to delete a user from the database (dummy example)\nfunction deleteUserFromDatabase($username)\n{\n    \/\/ Replace this with your actual database delete query\n    \/\/ Example database query (using PDO):\n    $db = new PDO('mysql:host=localhost;dbname=phpapis', 'root', '');\n    $stmt = $db-&gt;prepare('DELETE FROM users WHERE username = :username');\n    $stmt-&gt;bindParam(':username', $username);\n    \n    \/\/ Execute the delete query\n    return $stmt-&gt;execute();\n}\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">&lt;?<\/span><span style=\"color: #B392F0\">php<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Include JWT library<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">require<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;vendor\/autoload.php&#39;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">use<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Firebase<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #BBBBBB\">\\<\/span><span style=\"color: #79B8FF\">JWT<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Database configuration<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$servername <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;localhost&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;root&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$password <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$dbname <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;phpapis&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ JWT secret key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$jwtSecretKey <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;your_jwt_secret_key&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to establish a database connection<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> connectToDatabase()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">global<\/span><span style=\"color: #B392F0\"> $servername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $dbname;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $connection <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">mysqli<\/span><span style=\"color: #B392F0\">($servername<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $password<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $dbname);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($connection<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">connect_error) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">die<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&quot;Connection failed: &quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\"> $connection<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">connect_error);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $connection;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($_SERVER[<\/span><span style=\"color: #FFAB70\">&quot;REQUEST_METHOD&quot;<\/span><span style=\"color: #B392F0\">] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;GET&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">&amp;&amp;<\/span><span style=\"color: #B392F0\"> isset<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$_GET[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Read Operation: Retrieve user data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $usernameToRead <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $_GET[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Check if the username exists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $user <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> getUserFromDatabase<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$usernameToRead<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ($user <\/span><span style=\"color: #F97583\">!==<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">200<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for success<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;success&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;user&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> $user]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">404<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for not found<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;User not found&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">} <\/span><span style=\"color: #F97583\">elseif<\/span><span style=\"color: #B392F0\"> ($_SERVER[<\/span><span style=\"color: #FFAB70\">&quot;REQUEST_METHOD&quot;<\/span><span style=\"color: #B392F0\">] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;<\/span><span style=\"color: #F97583\">DELETE<\/span><span style=\"color: #FFAB70\">&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">&amp;&amp;<\/span><span style=\"color: #B392F0\"> isset<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$_GET[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Delete Operation: Delete a user<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $usernameToDelete <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $_GET[<\/span><span style=\"color: #FFAB70\">&quot;username&quot;<\/span><span style=\"color: #B392F0\">];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Check if the user was successfully deleted<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> (deleteUserFromDatabase<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$usernameToDelete<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ http_response_code(204); \/\/ no content will be displayed HTTP status code for successful deletion<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">200<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for successful deletion<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;success&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;User deleted successfully&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">404<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ HTTP status code for not found<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;User not found or deletion failed&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">} <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    http_response_code<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">400<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    echo json_encode<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">[<\/span><span style=\"color: #FFAB70\">&quot;status&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;error&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;message&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Invalid request&quot;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to retrieve user data from the database (dummy example)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> getUserFromDatabase($username)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Replace this with your actual database query to fetch user data by username<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Example database query (using PDO):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&#39;mysql:host=localhost;dbname=phpapis&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;root&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;&#39;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $db<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">prepare<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;<\/span><span style=\"color: #F97583\">SELECT<\/span><span style=\"color: #FFAB70\"> username, <\/span><span style=\"color: #F97583\">date<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #FFAB70\"> users <\/span><span style=\"color: #F97583\">WHERE<\/span><span style=\"color: #FFAB70\"> username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> :username&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:username&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">execute<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $user <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">fetch<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #B392F0\">FETCH_ASSOC<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">null<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $user;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Function to delete a user from the database (dummy example)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> deleteUserFromDatabase($username)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Replace this with your actual database delete query<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Example database query (using PDO):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">PDO<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&#39;mysql:host=localhost;dbname=phpapis&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;root&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;&#39;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $db<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">prepare<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;<\/span><span style=\"color: #F97583\">DELETE<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #FFAB70\"> users <\/span><span style=\"color: #F97583\">WHERE<\/span><span style=\"color: #FFAB70\"> username <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> :username&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">bindParam<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;:username&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $username<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ Execute the delete query<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> $stmt<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">execute<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"369\" src=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-31-1024x369.png\" alt=\"\" class=\"wp-image-398\" srcset=\"https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-31-1024x369.png 1024w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-31-300x108.png 300w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-31-768x277.png 768w, https:\/\/rishikantsri.in\/blog\/wp-content\/uploads\/2023\/10\/image-31.png 1447w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">API Security and Authorization<\/h3>\n\n\n\n<p>Our API now emphasizes security and user access control:<\/p>\n\n\n\n<ul>\n<li><strong>Security Measures<\/strong>: We&#8217;ve implemented input validation, password hashing, and secured API communication with HTTPS.<\/li>\n\n\n\n<li><strong>JWT Authentication<\/strong>: Users must provide a valid JWT to access protected API endpoints.<\/li>\n\n\n\n<li><strong>Role-Based Access Control (RBAC)<\/strong>: You can implement RBAC to control user access to different parts of your API.<\/li>\n\n\n\n<li><strong>Middleware<\/strong>: Middleware checks the validity of JWTs and ensures users have the necessary permissions for specific operations.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Testing with Mobile Clients<\/h3>\n\n\n\n<p>Testing is crucial to ensure a seamless mobile app experience:<\/p>\n\n\n\n<ul>\n<li><strong>Mobile App Integration<\/strong>: Test your API from your mobile app, ensuring that authentication and authorization work correctly.<\/li>\n\n\n\n<li><strong>Error Handling<\/strong>: The mobile app should handle API errors gracefully and provide user-friendly messages.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">API Response with Status Codes<\/h3>\n\n\n\n<p>We continue to use meaningful HTTP status codes and a standard response format:<\/p>\n\n\n\n<ul>\n<li><strong>HTTP Status Codes<\/strong>: We use appropriate HTTP status codes (e.g., 200, 201, 400, 401, 404, 500) to indicate the outcome of each API operation.<\/li>\n\n\n\n<li><strong>Standard Response Format<\/strong>: Responses follow a standard format, including a status indicator (e.g., &#8220;status&#8221;: &#8220;success&#8221; or &#8220;error&#8221;), a message explaining the result, and relevant data.<\/li>\n\n\n\n<li><strong>JSON Responses<\/strong>: JSON remains the chosen format for mobile API responses due to its lightweight and easy parsing.<\/li>\n<\/ul>\n\n\n\n<p>By integrating JWT-based authentication into our PHP API for all CRUD operations, we&#8217;ve significantly enhanced its security and user access control. Mobile clients can now authenticate and securely access protected resources, ensuring the integrity and confidentiality of user data.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(updated) In today&#8217;s mobile-first world, building a robust and secure PHP API is crucial. This API should not only perform CRUD (Create, Read, Update, Delete) operations but also ensure API security, user authentication with JSON Web Tokens (JWT), and provide meaningful responses with status codes for mobile applications. Setting Up Your Environment Before we dive [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[45,10],"tags":[44,46,4],"_links":{"self":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts\/383"}],"collection":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/comments?post=383"}],"version-history":[{"count":10,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts\/383\/revisions"}],"predecessor-version":[{"id":403,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts\/383\/revisions\/403"}],"wp:attachment":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/media?parent=383"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/categories?post=383"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/tags?post=383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}