ServerError 500 при обновлении таблицы MySQL

Итак, проблема в том, что я хочу создавать всякий раз, когда пользователь нажимает логин, значение в базе данных изменяется на 1, но всякий раз, когда я использую UPDATE, мы получаем ошибку сервера 500 при щелчке логина

<?php
require("inc/db.php");
ini_set('error_reporting', 0);
ini_set('display_errors', 0);

session_start();

if(isset($_POST['submit'])){
  $errMsg = '';
  //username and password sent from Form
  $username = trim($_POST['username']);
  $password = trim($_POST['password']);

  if($username == '')
    $errMsg .= 'You must enter your Username<br>';

  if($password == '')
    $errMsg .= 'You must enter your Password<br>';


  if($errMsg == ''){
    $records = $conn->prepare('SELECT id,username,password,email,bday,points,uid FROM  users WHERE username = :username AND password = :password');
    $records->bindParam(':username', $username) ;
    $records->bindParam(':password', $password) ;
    $records->execute();
    $results = $records->fetch(PDO::FETCH_ASSOC);

    if($results > 0){

      $sql = "UPDATE users SET isloggedin = :isloggedin WHERE username = :username";
      $stmt = $conn->prepare($sql);
      $stmt->bindParam(':isloggedin', '1');
      $stmt->execute();


      $_SESSION['username'] = $results['username'];
      $_SESSION['id'] = $results['id'];
      $_SESSION['points'] = $results['points'];
      $_SESSION['uid'] = $results['uid'];





      header('location:dashboard.php');
    }else{
      $errMsg .= 'Username and Password are not found<br>';
    }
  }
}
?>

Итак, функция UPDATE не работает должным образом, я и мой друг не можем найти решение этой проблемы, мы пытались обойти это, или пытались изменить строки, но ничего не получалось...

Заранее спасибо!

1 ответ

Решение

Есть несколько проблем, которые всплывают по одному, как только появится сообщение об ошибке. Всегда при разработке и тестировании кода устанавливайте error_reporting вплоть до E_ALL и включить отображение ошибок с ini_set('display_errors', 1), Они вместе детализируют ошибку 500 на экране, делая ее намного более очевидной сразу.

Первая проблема, которую я заметил, заключается в том, что ваш UPDATE оператор имеет два параметра :isloggedin, :username но только первый из них связан с bindParam(), Вы также должны связать второе, так как PDO генерирует исключение, связанное с недопустимым номером параметра.

  $sql = "UPDATE users SET isloggedin = :isloggedin WHERE username = :username";
  $stmt = $conn->prepare($sql);
  $stmt->bindParam(':isloggedin', '1');
  $stmt->bindParam(':username', $username);
  $stmt->execute();

Но это только поможет вам там. PDO будет следующей ошибкой из-за использования статического строкового значения '1' в bindParam(), который принимает переменные только в качестве второго аргумента (потому что использует их по ссылке). Альтернатива заключается в использовании bindValue() передать статическое значение. Так как вы не выполняете один и тот же оператор много раз с изменением значений переменной, также безопасно связать :username с bindValue()хотя это будет работать в любом случае для вашего случая.

  $sql = "UPDATE users SET isloggedin = :isloggedin WHERE username = :username";
  $stmt = $conn->prepare($sql);
  // Make sure static values are bound by value
  $stmt->bindValue(':isloggedin', '1');
  $stmt->bindValue(':username', $username);
  $stmt->execute();
Другие вопросы по тегам