2015-12-19 4 views
1

У меня есть повторяющаяся проблема в приложении для Android.PHP 500 Внутренний сервер Ошибка при вызове Volley

В основном я использую PHP и базу данных MYSQL для регистрации и входа пользователей в мое приложение.

Регистрация работает нормально. Я могу подключиться к базе данных и вставить нового пользователя в таблицу без каких-либо проблем.

Проблема, с которой я столкнулся, - это войти в приложение. Всякий раз, когда я называю URL входа, я получаю следующее сообщение об ошибке:

BasicNetwork.performRequest: Unexpected response code 500 for URL. 

Я попытался с помощью других инструментов, открыть URL и размещая параметры вручную, чтобы устранить проблему, что ошибка может быть исходя из моего приложения кода. На самом деле я получил Generic 500 Internal Server Error. Протестировал URL-адрес регистра с помощью этого инструмента, и он отлично работал.

Мои классы PHP все называют один и тот же скрипт для получения сведений о соединении, поэтому с этим не возникает никаких проблем либо с момента регистрации.

Вот мой код ниже:

Войти Класс:

<?php 
require_once 'UserFunctions.php'; 
$db = new UserFunctions(); 

$response = array("error" => FALSE); 

if (isset($_POST['email']) && isset($_POST['password'])) { 

    $email = $_POST['email']; 
    $password = $_POST['password']; 

    $user = $db->getUserByEmailAndPassword($email, $password); 
    $count = $db->getUserCount(); 

    if ($user != false) { 
     $response["error"] = FALSE; 
     $response["uid"] = $user["unique_id"]; 
     $response["user"]["name"] = $user["name"]; 
     $response["user"]["email"] = $user["email"]; 
     echo json_encode($response); 
    } else { 
     $response["error"] = TRUE; 
     $response["error_msg"] = "Login credentials are wrong. Please try again!"; 
     echo json_encode($response); 
    } 
} else { 
    $response["error"] = TRUE; 
    $response["error_msg"] = "One of the required parameters is missing!"; 
    echo json_encode($response); 
} 
?> 

UserFunctions класс:

<?php 

class UserFunctions { 

    private $conn; 

    function __construct() { 
     require_once 'include/DbConnect.php';   
     $db = new DbConnect(); 
     $this->conn = $db->connect(); 
    } 

    function __destruct() { 

    } 

    public function storeUser($name, $email, $password) { 
     $uuid = uniqid('', true); 
     $hash = $this->hashSSHA($password); 
     $password = $hash["encrypted"]; 
     $salt = $hash["salt"]; 

     $stmt = $this->conn->prepare("INSERT INTO users(unique_id, UserName, UserEmail, UserPassword, salt) VALUES(?, ?, ?, ?, ?)"); 
     $stmt->bind_param("sssss", $uuid, $name, $email, $password, $salt); 
     $result = $stmt->execute(); 
     $stmt->close(); 

     if ($result) { 
      $stmt = $this->conn->prepare("SELECT * FROM users WHERE UserEmail = ?"); 
      $stmt->bind_param("s", $email); 
      $stmt->execute(); 
      $user = $stmt->get_result()->fetch_assoc(); 
      $stmt->close(); 

      return $user; 
     } else { 
      return false; 
     } 
    } 

    public function getUserByEmailAndPassword($email, $password) { 

     $stmt = $this->conn->prepare("SELECT * FROM users WHERE UserEmail = ?"); 
     $stmt->bind_param("s", $email); 

     if ($stmt->execute()) { 
      $user = $stmt->get_result()->fetch_assoc(); 
      $stmt->close(); 
      return $user; 
     } else { 
      return NULL; 
     } 
    } 

    public function isUserExisted($email) { 
     $stmt = $this->conn->prepare("SELECT UserEmail FROM users WHERE UserEmail = ?"); 
     $stmt->bind_param("s", $email); 
     $stmt->execute(); 
     $stmt->store_result(); 

     if ($stmt->num_rows > 0) { 
      $stmt->close(); 
      return true; 
     } else { 
      $stmt->close(); 
      return false; 
     } 
    } 

    public function hashSSHA($password) { 

     $salt = sha1(rand()); 
     $salt = substr($salt, 0, 10); 
     $encrypted = base64_encode(sha1($password . $salt, true) . $salt); 
     $hash = array("salt" => $salt, "encrypted" => $encrypted); 
     return $hash; 
    } 

    public function checkhashSSHA($salt, $password) { 
     $hash = base64_encode(sha1($password . $salt, true) . $salt); 
     return $hash; 
    } 
} 
?> 
+0

500 означает внутреннюю ошибку сервера. Проверьте конфигурацию вашего сервера. –

+0

Внутренняя ошибка сервера также означает «Некоторая ошибка или предупреждение в ваших кодах». У U проверили ваши запросы правильно или файл подключения «require_once» include/DbConnect.php '; «нет ошибки? –

+0

@riazhasan - В сервере нет ничего плохого. Если бы это было так, то функция регистрации определенно не сработала. Прежде чем комментировать, прочитайте весь вопрос. –

ответ

2

я нашел, где моя проблема была. Для всех тех, кто сталкивается с очень неприятной ошибкой 500, проверьте свои журналы. Происходивший мне, что когда я проверил журналы, я обнаружил, что метод checkhashSSHA() никогда не используется, и это вызывает следующее сообщение об ошибке:

PHP Fatal error: Call to undefined function checkHashSSA() in /xxx/xxx/xxx/xxx/UserFunctions.php on line 54 

Поэтому я добавил следующий код для расшифровки пароля:

public function getUserByEmailAndPassword($email, $password) { 

    $stmt = $this->conn->prepare("SELECT * FROM users WHERE UserEmail = ?"); 

    $stmt->bind_param("s", $email); 

    if ($stmt->execute()) { 
     $user = $stmt->get_result()->fetch_assoc(); 
     $salt = $user['salt']; 
     $userPassword = $user['UserPassword']; 
     $hash = $this->checkhashSSHA($salt, $password); 

     if ($userPassword == $hash) { 
      return $user; 
     } 
     $stmt->close(); 
    } else { 
     return NULL; 
    } 
} 

Это решило мою ошибку.

Только для записи журналы для таких ошибок обычно находятся в следующем местоположении: var/log/apache2/error.log Возможно, вам потребуется внести некоторые изменения в файл php.ini для регистрации этих ошибок.

Надеюсь, что это поможет любому, у кого ошибка 500;)

+0

, указав файлы журнала, указал мне в правильном направлении. – CHarris

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