Итак, проблема в том, что я хочу создавать всякий раз, когда пользователь нажимает логин, значение в базе данных изменяется на 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>';
}
}
}
?>
Таким образом, функция ОБНОВЛЕНИЕ не работает должным образом, я и мой друг не можем найти решение этой проблемы, мы пытались обойти это, или пытались изменить строки для нее, но ничего не получалось …
Заранее спасибо!
Есть несколько проблем, которые всплывают по одному, как только появится сообщение об ошибке. Всегда при разработке и тестировании кода устанавливайте 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();
Других решений пока нет …