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>';
}
}
}
?>

Таким образом, функция ОБНОВЛЕНИЕ не работает должным образом, я и мой друг не можем найти решение этой проблемы, мы пытались обойти это, или пытались изменить строки для нее, но ничего не получалось …

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

0

Решение

Есть несколько проблем, которые всплывают по одному, как только появится сообщение об ошибке. Всегда при разработке и тестировании кода устанавливайте 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();
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]