title: How to fix php form validation password error?
body: <p>I am using Mac OS, mamp, phpmyadmin to create a simple login form. I have created my database in php myadmin and the first user. I am certain the username and password are correct (as per my database) but I receive the error that the password is incorrect.</p>
  
  <p>I was loosely following this tutorial <a href="https://www.tutorialrepublic.com/php-tutorial/php-mysql-login-system.php" rel="nofollow noreferrer">https://www.tutorialrepublic.com/php-tutorial/php-mysql-login-system.php</a></p>
  
  <p>I believe this may be causing the error but i'm unsure.</p>
  
  <pre><code>$hashed_password = $row["password"];
                          if(password_verify($password, $hashed_password)){
  </code></pre>
  
  <pre><code>&lt;?php
  // Initialize the session
  session_start();
  
  // Check if the user is already logged in, if yes then redirect him to welcome page
  if(isset($_SESSION["loggedin"]) &amp;&amp; $_SESSION["loggedin"] === true){
      header("location: welcome.php");
      exit;
  }
  
  // Include config file
  require_once "config.php";
  
  // Define variables and initialize with empty values
  $username = $password = "";
  $username_err = $password_err = "";
  
  // Processing form data when form is submitted
  if($_SERVER["REQUEST_METHOD"] == "POST"){
  
      // Check if username is empty
      if(empty(trim($_POST["username"]))){
          $username_err = "Please enter username.";
      } else{
          $username = trim($_POST["username"]);
      }
  
      // Check if password is empty
      if(empty(trim($_POST["password"]))){
          $password_err = "Please enter your password.";
      } else{
          $password = trim($_POST["password"]);
      }
  
      // Validate credentials
      if(empty($username_err) &amp;&amp; empty($password_err)){
          // Prepare a select statement
          $sql = "SELECT id, username, password FROM users WHERE username = :username";
  
          if($stmt = $pdo-&gt;prepare($sql)){
              // Bind variables to the prepared statement as parameters
              $stmt-&gt;bindParam(":username", $param_username, PDO::PARAM_STR);
  
              // Set parameters
              $param_username = trim($_POST["username"]);
  
              // Attempt to execute the prepared statement
              if($stmt-&gt;execute()){
                  // Check if username exists, if yes then verify password
                  if($stmt-&gt;rowCount() == 1){
                      if($row = $stmt-&gt;fetch()){
                          $id = $row["id"];
                          $username = $row["username"];
                          $hashed_password = $row["password"];
                          if(password_verify($password, $hashed_password)){
                              // Password is correct, so start a new session
                              session_start();
  
                              // Store data in session variables
                              $_SESSION["loggedin"] = true;
                              $_SESSION["id"] = $id;
                              $_SESSION["username"] = $username;                            
  
                              // Redirect user to welcome page
                              header("location: welcome.php");
                          } else{
                              // Display an error message if password is not valid
                              $password_err = "The password you entered was not valid.";
                          }
                      }
                  } else{
                      // Display an error message if username doesn't exist
                      $username_err = "No account found with that username.";
                  }
              } else{
                  echo "Oops! Something went wrong. Please try again later.";
              }
          }
  
          // Close statement
          unset($stmt);
      }
  
      // Close connection
      unset($pdo);
  }
  ?&gt;
  
  &lt;!DOCTYPE html&gt;
  &lt;html lang="en"&gt;
  &lt;head&gt;
      &lt;meta charset="UTF-8"&gt;
      &lt;title&gt;Login&lt;/title&gt;
      &lt;link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"&gt;
      &lt;style type="text/css"&gt;
          body{ font: 14px sans-serif; }
          .wrapper{ width: 350px; padding: 20px; }
      &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
      &lt;div class="wrapper"&gt;
          &lt;h2&gt;Login&lt;/h2&gt;
          &lt;p&gt;Please fill in your credentials to login.&lt;/p&gt;
          &lt;form action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?&gt;" method="post"&gt;
              &lt;div class="form-group &lt;?php echo (!empty($username_err)) ? 'has-error' : ''; ?&gt;"&gt;
                  &lt;label&gt;Username&lt;/label&gt;
                  &lt;input type="text" name="username" class="form-control" value="&lt;?php echo $username; ?&gt;"&gt;
                  &lt;span class="help-block"&gt;&lt;?php echo $username_err; ?&gt;&lt;/span&gt;
              &lt;/div&gt;    
              &lt;div class="form-group &lt;?php echo (!empty($password_err)) ? 'has-error' : ''; ?&gt;"&gt;
                  &lt;label&gt;Password&lt;/label&gt;
                  &lt;input type="password" name="password" class="form-control"&gt;
                  &lt;span class="help-block"&gt;&lt;?php echo $password_err; ?&gt;&lt;/span&gt;
              &lt;/div&gt;
              &lt;div class="form-group"&gt;
                  &lt;input type="submit" class="btn btn-primary" value="Login"&gt;
              &lt;/div&gt;
              &lt;p&gt;Don't have an account? &lt;a href="register.php"&gt;Sign up now&lt;/a&gt;.&lt;/p&gt;
          &lt;/form&gt;
      &lt;/div&gt;
  &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>I expect to be taken to my welcome screen.</p>