2016-06-08 4 views
-1

Я только начал изучать, но почему это происходит, когда я не заполняю информацию в URL-адресе, который она подключается к базе данных, но когда я ее заполняю, она дает фатальная ошибка?

Ex. когда я печатаю

http://ehlien.com/php/signup.php?firstname=Mohamed&lastname=Mohamed&username=alpha&[email protected]&password=mohamed

Он бросает:

Fatal error: Uncaught exception 'Exception' with message 'Failed to connect to database' in /home/torokage/public_html/php/classes/DB.class.php:22 Stack trace: #0 /home/torokage/public_html/php/signup.php(35): DB->connect() #1 {main} thrown in /home/torokage/public_html/php/classes/DB.class.php on line 22 

Но когда я печатаю

http://ehlien.com/php/signup.php

Это дает мне мою ошибку я настроить:

{"status":"400","message":"Please fill in the missing information..."} 

У меня нет много знаний о PHP и MySQL, просто пытаюсь понять это самостоятельно и через некоторые учебники, но я не могу получить эту работу, чтобы продолжить ...

КОД, signup.php:

<?php 

require('classes/User.class.php'); 
require('classes/DB.class.php'); 
require('classes/Connection.class.php'); 


$firstname = null; 
$lastname = null; 
$username = null; 
$email  = null; 
$password = null; 
$repassword = null; 

if (empty($_REQUEST["firstname"]) || 
    empty($_REQUEST["lastname"])  || 
    empty($_REQUEST["username"])  || 
    empty($_REQUEST["email"])  || 
    empty($_REQUEST["password"])) 
{ 
    $returnError["status"] = "400"; 
    $returnError["message"] = "Please fill in the missing information..."; 
    echo json_encode($returnError); 
    return; 
} 

$firstname = htmlentities($_REQUEST["firstname"]); 
$lastname = htmlentities($_REQUEST["lastname"]); 
$username = htmlentities($_REQUEST["username"]); 
$email = htmlentities($_REQUEST["email"]); 
$password = md5(htmlentities($_REQUEST["password"])); 


$DB = new DB(Connection::$db_host, Connection::$db_name, Connection::$db_user, Connection::$db_pass); 
$DB->connect(); 

$checkUsername = $DB->checkIfUsernameExists($username); 
if (!empty($checkUsername)) 
{ 
    $returnError["status"] = "400"; 
    $returnError["message"] = "That username has already been taken. Please try again..."; 
    echo json_encode($returnError); 
    return; 
} 

$checkEmail = $DB->checkIfEmailExists($email); 
if (!empty($checkEmail)) 
{ 
    $returnError["status"] = "400"; 
    $returnError["message"] = "That email has already been taken. Please try again..."; 
    echo json_encode($returnError); 
    return; 
} 

$signUpUser = $DB->signUpUser($firstname, $lastname, $username, $email, $password); 
if ($signUpUser) 
{ 
    $userDetails = $DB->getUserDetails($username); 
    $user["status"] = "200"; 
    $user["message"] = "Success! You have now been registered."; 
    $user["ID"] = $userDetails["ID"]; 
    $user["firstname"] = $userDetails["firstname"]; 
    $user["lastname"] = $userDetails["lastname"]; 
    $user["username"] = $userDetails["username"]; 
    $user["email"] = $userDetails["email"]; 
} 
else 
{ 
    $user["status"] = "400"; 
    $user["message"] = "Sorry, this account has already been taken. Please try again..."; 
} 

$DB->disconnect(); 

echo json_encode($user); 

?> 

DB.class.php

<?php 
class DB { 
    protected $db_host = null; 
    protected $db_name = null; 
    protected $db_user = null; 
    protected $db_pass = null; 
    protected $db_conn = null; 
    protected $db_resu = null; 

    // Constructor 
    function __construct($db_host, $db_name, $db_user, $db_pass) { 
     $this->db_host = $db_host; 
     $this->db_name = $db_name; 
     $this->db_user = $db_user; 
     $this->db_pass = $db_pass; 
    } 

    // Connect to database 
    public function connect() { 
     $this->db_conn = new MySQLi($this->db_host, $this->db_name, $this->db_user, $this->db_pass); 
     if (mysqli_connect_errno()) 
      throw new Exception("Failed to connect to database"); 
     $this->db_conn->set_charset("utf8"); 
    } 

    // Disconnect from database 
    public function disconnect() { 
     if ($this->db_conn != null) 
      $this->db_conn->close(); 
    } 

    // Check if username exists 
    public function checkIfUsernameExists($username) { 
     $result = mysql_query("SELECT USERNAME FROM USERS WHERE EMAIL = '$username'"); 
     if(mysql_num_rows($result) == 0){ 
      return false; 
     } else { 
      return true; 
     } 
    } 

    // Check if email exists 
    public function checkIfEmailExists($email) { 
     $result = mysql_query("SELECT EMAIL FROM USERS WHERE EMAIL = '$email'"); 
     if(mysql_num_rows($result) == 0){ 
      return false; 
     } else { 
      return true; 
     } 
    } 


    // Get user informationd 
    public function getUserDetails($username) { 
     $command = mysql_query("SELECT * FROM USERS WHERE USERNAME = '$username'"); 
     $value = array(); 
     $result = $this->db_conn->query($command); 

     if ($result != null && (mysqli_num_rows($result) >= 1)) { 
      $row = $result->fetch_array(MYSQLI_ASSOC); 

      if (!empty($row)) { 
       $value = $row; 
      } 
     } 

     return $value; 
    } 

    // Sign up new user 
    public function signUpUser($firstname, $lastname, $username, $email, $password) { 
     $command = "INSERT INTO USERS SET FIRSTNAME=?, LASTNAME=?, USERNAME=?, EMAIL=?, PASSWORD=?"; 
     $sql = $this->db_conn->prepare($command); 

     if (!$sql) 
      throw new Exception($sql->error); 

     $sql->bind_param("sssss", $firstname, $lastname, $username, $email, $password); 
     $value = $sql->execute(); 

     return $value; 
    } 
} 

?> 
+2

Вы используете '' mysqli' и mysql_'. Вы также меняетесь от параметризованных запросов и небезопасных. Используйте все параметры. – chris85

ответ

1

Когда вы не использовали никакого значения или параметры, он показывает ошибку созданное вами, потому что он не мог п оставьте шаг проверки, установленный вами.

Но когда вы передаете значение или параметры, она проходит свои проверки и пытается соединиться с базой данных первым в соответствии с этим кодом твои: $DB = new DB(Connection::$db_host, Connection::$db_name, Connection::$db_user, Connection::$db_pass); $DB->connect();

Но он бросает исключение: Failed to connect to database означает, что базы данных учетные данные подключения неверны и, следовательно, не могут соединяться с базой данных.

Вы можете получить более дружественное сообщение об ошибке, изменив внутри public function connect() из DB класса это:

// Connect to database public function connect() { try { $this->db_conn = new MySQLi($this->db_host, $this->db_name, $this->db_user, $this->db_pass); $this->db_conn->set_charset("utf8"); } catch (Exception $e) { echo "Failed to connect to database"; echo "Error: " . $e->message; // remove when in live... } }

+0

Спасибо, это сработало! –