2015-02-21 2 views
-3

Я определил мой файл соединения, как это имя файлаOO и MySQLi в PHP

= connection.php

<?php 
$host = "localhost"; 
$database = "projectp_peas"; 
$usr= "projectp_admin"; 
$pass = "9613341694"; 
$conn = mysqli_connect($host, $usr, $pass) or die (mysqli_error($conn)); 
?> 

Мое соединение нормально.()

Теперь мой первый класс: имя файла product.php

<?php 
class Product{ 

public $PRODUCT; 
public $SHORT_DESC; 
public $LONG_DESC; 

public function showProduct($id){ 
include_once("conection.php"); 

mysqli_select_db($conn, $database); 
$products = "SELECT * FROM PRODUCTS WHERE ID = '$id' "; 
$rs_products = mysqli_query($conn, $products) or die (mysqli_error($conn)); 
$product = mysqli_fetch_assoc($rs_products); 

echo "<h3 style=\"font-size:3em; color:#BBBBBB;\"> "; 
echo $product['PRODUCT'] ."</h3>"; 
echo "<h5> "; 
echo $product['SHORT_DESC'] ."</h5>"; 

echo $product['LONG_DESC']; 
} 

} 
?> 

Теперь мой index.php файл

<div class ="px_70"> 
<?php 
require_once('../script/product.php'); 
$product = new Product; 
$product->showProduct(1); 
?> 
</div> 

Мой запрос работает нормально до сих пор.

Но моя проблема начинается с другого класса. Другой класс, как это:

Имя файла: clients.php

<?php 
class User{ 
public function TopMenu(){ 
include_once("conection.php"); 
session_start(); 

if(isset($_SESSION['EMAIL'])){ 
$MAIL = $_SESSION['EMAIL']; 

mysqli_select_db($conn, $database); 
$username= "SELECT * FROM CLIENTS WHERE EMAIL = '$MAIL' "; 
$USERNAME_RS = mysqli_query($conn, $username) or die(mysqli_error($conn)); 
$USR = mysqli_fetch_assoc($USERNAME_RS); 

if(mysqli_num_rows($USERNAME_RS)>0){ 
echo $USR['C_NAME'] . " | <a href=\"../global/logout.php\">Log out </a> | <a href=\"UserPapers.php\"> Papers &nbsp; &nbsp;</a>" ; 
} 

else{ 
echo " <a href=\"../login.php\">Login</a> | <a href=\"../Register.php\">Register &nbsp; &nbsp;</a>" ; 
} 
} 

else{ 
echo " <a href=\"../login.php\">Login</a> | <a href=\"../Register.php\">Register &nbsp; &nbsp;</a>" ; 
} 
} 
} 
?> 

Снова в index.php файле:

<div class="tm"> 
<?php 
include_once('../script/clients.php'); 
$top = new User; 
$top->TopMenu(); 
?> 
</div> 

Почему я получаю следующие ошибки?

Warning: mysqli_select_db() expects parameter 1 to be mysqli, null given in /home/projectp/public_html/script/product.php on line 11 

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /home/projectp/public_html/script/product.php on line 13 

Warning: mysqli_error() expects parameter 1 to be mysqli, null given in /home/projectp/public_html/script/product.php on line 13 

Функция TopMenu() в файле не должна вызывать никаких ошибок. потому что эта функция отлично работает, когда я удаляю класс Product. Может ли кто-нибудь сказать мне, где я делаю ошибку? Я очень новичок в php OO и mysqli.

+0

Было бы неплохо, чтобы удалить пароль! Или никогда не отправлять пароль в первую очередь. –

+0

'include _ ** once **' ... – deceze

+0

Не перемещайте создание/подключение БД внутри полностью несвязанного класса/метода. Если вам необходимо создать абстракцию для вашего уровня БД, создайте класс DB. Это похоже на покупку мобильного телефона. Вы не купили бы несколько, чтобы иметь мобильный телефон в каждой комнате вашего дома. Вы купите его и возьмите с собой. – h2ooooooo

ответ

2

Вы не указали $conn в своей функции. Это все.

Вы можете определить $conn как недвижимость вашего класса.

class Product { 
    private $connection; 
    public function __construct($connection) { 
     $this->connection = $connection; 
    } 
    public function showProduct($id) { 
     $database = ... ; 
     mysqli_select_db($this->connection, $database); 
0

Я думаю, вы должны изменить include_once к include здесь:

class Product{ 

public $PRODUCT; 
public $SHORT_DESC; 
public $LONG_DESC; 

public function showProduct($id){ 
include("conection.php"); 

и здесь:

class User{ 
public function TopMenu(){ 
include("conection.php"); 
+0

Это дает мне «Неустранимая ошибка: не удается переопределить класс Db ...» Я искал googled и обнаружил, что 'require_once' является решением. но в моем случае 'require_once' дает мне ту же самую предыдущую ошибку .. –

+0

в вашем случае - вы не можете использовать' require_once', или 'include_once', как вы разрабатываете, вы должны использовать' include', или если вы хотите перепроектировать ваше приложение, я поставлю еще один ответ, просто дайте мне знать, если вам все еще нужно решение – Alex

+0

Да, мне нужно решение. Я читал много форумов, пытался по-разному, но до сих пор нет плода. –