2016-03-05 4 views
0

Таким образом, проблема заключается в том, что я хочу создавать каждый раз, когда пользователь нажимает логин. Значение в базе данных изменяется на 1, но всякий раз, когда я использую UPDATE, мы получаем servererror 500 при щелчке по логинуServerError 500 при обновлении таблицы mysql

<?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

Я не использую PDO, но я предполагаю, что вам необходимо привязать параметр: username в каждом запросе. Ошибка сервера 500 делает меня тем, что вы используете это как CGI? – Josiah

+0

Как вы называете эту рутину? Ajax? Ошибка 500 обычно означает, что либо есть синтаксическая ошибка PHP, либо опубликованные данные, которые она ожидает, передаются неправильно. –

+0

Я заметил, что у вас нет 'bindParam (': username', $ username)', поэтому я подозреваю, что PDO бросает исключение из-за несогласованности между количеством параметров в инструкции SQL и параметрами, фактически доступными в 'execute () '. –

ответ

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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^