2016-08-19 9 views
3

クラスDBControllerとその次の関数を持つこの外部ファイルCreateConnection.phpがあります。 createconnectionファイルにエラーが発生しません。PHPクラス内の関数を外部ファイルで呼び出す構文?

CreateConnection.phpこのファイルで

<?php 
class DBController 
{ 
    private $servername = "localhost"; 
    private $username = "root"; 
    private $password = ""; 
    private $database = "mydatabase"; 

    function mainConnect() 
    { 
     //call the function connectDatabase to $connect 
     $connect = $this->connectDatabase(); 

     //call the function selectDatabase 
     $this->selectDatabase($connect); 

     if(!$connect) 
     { 
      //Otherwise, prompt connection failed 
      die("Connection failed: ".mysqli_connect_error()); 
     } 
    } 

    function connectDatabase() 
    { 
     //Create connection 
     $connect = mysqli_connect($this->servername, $this->username, $this->password); 
     return $connect; 
    } 

    function selectDatabase($connect) 
    { 
     //Select database 
     mysqli_select_db($connect, $this->database); 
    } 
} 
?> 

内部ファイル、私は外部CreateConnection.phpが含まれていますが、私の '$はを接続する' mainConnect()関数を呼び出すときに多くのエラーが発生しました。 Process.phpファイル

<?php 
    include("CreateConnection.php"); 
    $DBHandler = new DBController(); 

    $connect = $DBHandler->mainConnect(); 

    //Get values from form LoginReminder.php file 
    $username = mysqli_real_escape_string($connect, $_POST['username']); 
    $password = mysqli_real_escape_string($connect, $_POST['password']); 
    //Removes back slashes in input 
    $username = stripcslashes($username); 
    $password = stripcslashes($password); 

    //Query the database for users 
    $result = mysqli_query($connect,"select * from tablereminders where username = '$username' and password = '$password' "); 

    //Error connection and query 
    if (!$result) 
    { 
     printf("Error: %s\n", mysqli_error($connect)); 
     exit(); 
    } 
?> 

は、フォームを送信するとき、私は、この多くのエラーが発生しましたので、私の構文が間違ってい:

エラー

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Web Php Tutorial\LoginProcess.php on line 8 

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Web Php Tutorial\LoginProcess.php on line 9 

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Web Php Tutorial\LoginProcess.php on line 15 

Warning: mysqli_error() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Web Php Tutorial\LoginProcess.php on line 20 
+0

'$ connect'は' Mainconnect() '関数に戻りません – devpro

+0

'mysqli_real_escape_string'の後に' stripcslashes'を使うべきですか?パスワードもハッシュする必要があります。 – chris85

+1

'$ connect'がmainConnect()に存在する場合は、それを返します。 – devpro

答えて

7

は、return $connect;を追加しますfunction mainConnect(){の最後とあなたは大丈夫です。

しかし、どうしてOOP版のMYSQLiを使用しないのですか?

mysqli, OOP vs Procedural

class DBController 
{ 
    private $db; 

    private $servername = "localhost"; 
    private $username = "root"; 
    private $password = ""; 
    private $database = "mydatabase"; 

    function __construct(){ 
     $this->db = new mysqli($this->servername, $this->username, $this->password); 
     $this->db->select_db($this->database); 
    } 
    function db(){ 
     return $this->db; 
    } 

} 
$connection = new DBController(); 

#now instead of using mysqli_query(); 
$connection->db()->query('SQL QUERY'); 

そして唯一のクラスは名前としてこれを持っている必要があります保持thatsのファイル:

代わりCreateConnection.php良くDBController.php

のときに、接続を作成するようにファイル名が聞こえます含まれていますが、そうでない場合:)

+0

ええと、接続のためにクラスを使用するのは良い習慣ではありませんか?最善の方法はPDOを使うことです。 –

+0

それは良いpraticeですが、MYSQLi自体がクラスを持っています。したがって、DBConnectorをビルドするには、クラス・バージョンを使用してください。 – JustOnUnderMillions

+0

@laurence keith albanoは私の答えを更新しました – JustOnUnderMillions

関連する問題