所以问题就是,我想创建用户按下登录时数据库中的值变为1,但每当我使用UPDATE时,我们点击登录时会得到一个servererror 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函数无法正常工作,我和我的朋友无法找到解决方法,我们试图解决它,或者尝试更改它的行,但没有任何效果......
提前致谢!
答案 0 :(得分: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();
但那只会让你在那里。由于在'1'
中使用静态字符串值bindParam()
,PDO将出现下一个错误,该值仅接受变量作为其第二个参数(因为它通过引用使用它们)。另一种方法是使用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();