رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در استفاده از کلاس و متغیرهای گلوبال
#1
سلام
من سه فایل دارم  در پروژه دارم -->
فایل index.php که در روت سایت قرار دارد.
فایل config.php کدهای مربوطه به بانک اطلاعاتی می باشد و در پوشه config قرار دارد :
<?php

$host='localhost';
$user='root';
$password='';
$database='test';

$con=  @mysqli_connect($host, $user, $password, $database);

if(!$con){
   exit('Cannot connect to db.');
}
mysqli_set_charset($con, 'utf8');


فایل class.php که کلاس  مربوط به خواندن اطلاعات جدول در آن نوشته شده و در پوشه classes قرار دارد :
<meta charset="utf-8">
<?php require_once 'config/config.php';  ?>

<?php
class read
{
   function read_user(){
       $result=  mysqli_query($GLOBALS['$con'], 'SELECT * FROM `user`');

       if($result && mysqli_num_rows($result)>0){
   
       //Create Table
       echo '<table class="table-responsive table" style="text-align:center">'.PHP_EOL;
           echo '<tr class="success">'.PHP_EOL;
            echo '<th style="text-align:center">ID</th>'.PHP_EOL;
            echo '<th style="text-align:center">Name</th>'.PHP_EOL;
            echo '<th style="text-align:center">Family</th>'.PHP_EOL;
            echo '<th style="text-align:center">Proccess</th>'.PHP_EOL;
           echo '</tr>'.PHP_EOL;
           $i=1;//برای نمایش ردیف ها
           /*
             زمانی که یک رکورد پاک می شود اگر شناسه را چاپ کنیم ردیف به هم می ریزد  این متغیر را تعریف
            * کردیم تا ردیف به ترتیب چاپ شد
            */
           while ($row= mysqli_fetch_assoc($result)){
                 echo '<tr class="info">'.PHP_EOL;
                  //echo '<td>'.$row['u_id'].'</td>'. PHP_EOL;
                 echo '<td>'.$i++.'</td>'. PHP_EOL;
                  echo '<td>'.$row['u_name'].'</td>'. PHP_EOL;
                  echo '<td>'.$row['u_family'].'</td>'. PHP_EOL;

                  echo '<td>';
                   echo '<a href="?action=edit&id=' .$row['u_id'].'">[Edit]</a> - ';
                   echo '<a href="?action=delete&id=' .$row['u_id'].'" onclick="return confirm(\'Are you sure?\');">[Delete]</a>';
                  echo'</td>'. PHP_EOL;

                 echo '</tr>';
       }//End while
       mysqli_free_result($result);//آزاد سازی فضای رم
       echo '</table>'.PHP_EOL;
}
mysqli_close($con);
   }
   
}



فایل config را در فایل class بنده include کردم و برای نمایش در فایل index.php کدهای زیر را نوشتم :
<?php
$obj = new read;
echo $obj->read_user();
?>

خطاهای ایجاد شده : 
Notice: Undefined index: $con in C:\xampp\htdocs\Basic\classes\class.php on line 8

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Basic\classes\class.php on line 8

Notice: Undefined variable: con in C:\xampp\htdocs\Basic\classes\class.php on line 42

Warning: mysqli_close() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Basic\classes\class.php on line 42
پاسخ
تشکر شده توسط:
#2
اندیس میشه اسم متغیر. $ رو داخلش ننویسید. یکی از این دو حالت رو استفاده کنید:
global $con; // now access $con
$GLOBALS['con']

اگه از حالت دوم استفاده کردین، در انتهای اسکریپت هم برای بستن اتصال، دوباره باید با همین متغیر کار کنید نه $con
پاسخ
تشکر شده توسط: پیام حیاتی
#3
ممنون استاد ، با روش دوم مشکل برطرف شد.
برای استفاده از روش اول متغیر con و سایر متغیرهای تعریف شده در فایل config.php رو به صورت global نوشتم :
<?php

global $host;
$host='localhost';

global $user;
$user='root';

global $password;
$password='';

global $database;
$database='test';

global $con;
$con=  @mysqli_connect($host, $user, $password, $database);

if(!$con){
   exit('Cannot connect to db.');
}
mysqli_set_charset($con, 'utf8');
ولی خطا دارم : 
Notice: Undefined variable: con in C:\xampp\htdocs\Basic\classes\class.php on line 9

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Basic\classes\class.php on line 9

Notice: Undefined variable: con in C:\xampp\htdocs\Basic\classes\class.php on line 44

Warning: mysqli_close() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Basic\classes\class.php on line 44
پاسخ
تشکر شده توسط:
#4
توی فایل کانفیگ نه. باید توی تابع تعریف کنید. وقتی توی یه تابع میگیم:
global $con;

یعنی منظورمون از متغیر $con همون متغیر سراسری هست که بیرون از تابع تعریف شده.
پاسخ
تشکر شده توسط: پیام حیاتی




کاربران در حال بازدید این موضوع: 1 مهمان