PDA

View Full Version : حل ارور Notice: Undefined variable: con in



Masoud Sj
دوشنبه 01 مهر 1398, 20:08 عصر
سلام، اخیرا بنده یه اسکریپت خیلی ساده دارم مینویسم که به یه سری اررور برخوردم که شاید از نظر اساتید خیلی ساده بنظر بیاد. بهرحال من قبلا از دستورات Msql استفاده میکردم و اررور نمیگرفتم ولی متاسفانه چند وقتی هست سمت Php نرفتم و دیدم که مباحث جدید اومده مثل PDO و...اخیرا با تسور Mysqli کار میکنم و یه سری اررور دارم که نمیتونم فیکسشون کنم؛ پر حرفی کردم. مشکلم به این صورت هستش که یه اسکریپت ساده نوشتم که قراره یه سری اطلاعات رو از دیتابیس بیاره واسه یوزر که کد هارو تو دوتا فایل functions.php و catsmanagement.php نوشتم که به این صورت هستش.
کد های: functions.php:



<?php//dbs connector require_once('config.php'); @$con= mysqli_connect('localhost','root','','accapp') or die('DB connection error'); @mysqli_set_charset($con, "utf8"); if(mysqli_connect_errno()) { echo('<div class="alert alert-dismissible alert-danger"><button type="button" class="close" data-dismiss="alert">&times;</button> <strong>خطا</strong><br> خطایی در اتصال به پایگاه داده رخ داده است</div>'); }function admingetcategurise(){
$result= mysqli_query($con,'SELECT * FROM categorise');

}?>

کد های فایل catsmanagement.php :

<?php

require_once('class/functions.php');

$result = admingetcategurise();
while($row=mysqli_fetch_assoc($result))
{
echo('<tr class="table-light" style="color: #000000">');
echo('<th scope="col">'.$row ['id'].'</th>');
echo('<th scope="col">'.$row ['title'].'</th>');
$test = $row ['active'];
if($test= '1')
{
echo('<th scope="col"><a href="#"class="btn btn btn-warning">فعال</a></th>');
}
else
{
echo('<th scope="col"><a href="#"class="btn btn btn-warning">غیرفعال</a></th>');
}

echo('<th scope="col"><a href="#"class="btn btn btn-warning">ویرایش</a> <a href="#"class="btn btn-danger">حذف</a>');
}

?>و ارور هایی که دریافت میکنم اینها هستن: Notice: Undefined variable: con in J:\Xamp\htdocs\Accfiles_Admin\Class\functions.php on line 17
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in J:\Xamp\htdocs\Accfiles_Admin\Class\functions.php on line 17
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in J:\Xamp\htdocs\Accfiles_Admin\categorisemanagement .php on line 37 دوستان من مفهوم اررور هارو میدونم فقط نمیتونم حلشون کنم خیلی ممنون میشم کمکم کنید شدیدا سردرگم شدم.

ali_sed
چهارشنبه 03 مهر 1398, 15:47 عصر
روز بخیر

دو خطای اول که مربوط به فایل functions.php است که خب کدهاش را قرار ندادید.
بقیه خطاها هم مربوط به همان خطای اول است آن را رفع کنید بقیه درست می شود.

اگر در خط اول تابع admingetcategurise عبارت زیر را قرار دهید مشکلتان رفع شود.

global $con;

Masoud Sj
پنج شنبه 04 مهر 1398, 08:23 صبح
خیلی ممنون از توجهتون ولی الان اررور میده mysqli_fetch_assoc داره مقدار خالی برمیگردونه من همه کد هامو تبدیل به تابع میکنم و تو فایل function.php میریزم مشکل ایجاد میشه...ولی وقتی تو یه صفحه میریزم ایردای نداره و بدون مشکل ران میشه...متاسفانه من یه مقدار آشناییم به دستورات جدید Php پایینه مثلا همین کدی که شما نوشتین رو اصلا باهاش آشنایی ندارم بهرحال بازم ممنون که توجه کردید الان من دارم این اررور رو میگیرم

mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in J:\Xamp\htdocs\Accfiles\_Admin\categorisemanagemen t.php on line 37

ali_sed
پنج شنبه 04 مهر 1398, 15:35 عصر
خیلی ممنون از توجهتون ولی الان اررور میده mysqli_fetch_assoc داره مقدار خالی برمیگردونه من همه کد هامو تبدیل به تابع میکنم و تو فایل function.php میریزم مشکل ایجاد میشه...ولی وقتی تو یه صفحه میریزم ایردای نداره و بدون مشکل ران میشه...متاسفانه من یه مقدار آشناییم به دستورات جدید Php پایینه مثلا همین کدی که شما نوشتین رو اصلا باهاش آشنایی ندارم بهرحال بازم ممنون که توجه کردید الان من دارم این اررور رو میگیرم

mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in J:\Xamp\htdocs\Accfiles\_Admin\categorisemanagemen t.php on line 37

هر متغیر دارای یک حوزه مشخص است و در همه جا به راحتی در دسترس نمی باشد. توابع مانند یک کپسول می مانند و تنها به متغیرهایی که داخل همان تابع تعریف میشود دسترسی دارند (متغیرهای محلی). برای دسترسی به یک متغییر سراسری در داخل یک تابع یا باید آن را به عنوان یک آرگومان برای تابع ارسال کنید و یا اینکه از دستور global و یا از متغیر $GLOBALS بهره ببرید. پس باید تابع خود خود را به یکی از سه شکل زیر پیاده کنید:

function admingetcategurise(){
global $con;
$result= mysqli_query($con,'SELECT * FROM categorise');
return $result;
}


function admingetcategurise(){
$con = $GLOBALS['con'];
$result= mysqli_query($con,'SELECT * FROM categorise');
return $result;
}


function admingetcategurise($con){
$result= mysqli_query($con,'SELECT * FROM categorise');
return $result;
}
//call function
$result = admingetcategurise($con);


همچنین برای اینکه نتیجه یک تابع را دریافت کنید باید از دستور return استفاده کنید زیرا با پایان یافتن تابع تمامی متغیرهای داخلی از حافظه حذف شده و از خارج تابع قابل دسترسی نمی باشند.

Masoud Sj
پنج شنبه 04 مهر 1398, 18:59 عصر
خیلی ممنون مشکل حل شد البته خودم یه جوراییی به یه چیزایی هم رسیدم تونستم انجامش بدم ولی کمک شمام بی تاثیر نبود (کاش یه دکمه تشکر داشت زیر هر پست) بهرحال.
الان ایرادم توی ارسال اطلاعات هستش برای ارسال اطلاعات این کد رو مینویسم تو functions.php :


function subnewcat($title){
global $con;
$date= time();
$sql= mysqli_query($con,"INSERT INTO 'categorise' VALUSE('','$title',1,$date)");
}
و کد فرم ثبت اطلاعاتمم هستش:


if (isset($_POST['title']) and !empty($_POST['title'])) {
$title= $_POST['title'];
$sql= subnewcat($title); }

ولی متاسفانه هیچ چیزی برنمیگردونه نه اررور دارم نه اطلاعاتی میره توی دیتابیس البته باید اینم بگم قبل از گذاشتن دستور
global $con; در فایل تابعها این اررور رو دریافت میکردم:



Notice: Undefined variable: con in J:\Xamp\htdocs\Accfiles\_Admin\Class\functions.php on line 34


Warning: mysqli_query() expects parameter 1 to be mysqli, null given in J:\Xamp\htdocs\Accfiles\_Admin\Class\functions.php on line 34

ali_sed
پنج شنبه 04 مهر 1398, 22:25 عصر
احتمالا کوئری شما اشتباه است. دستور خود را به شکل زیر اصلاح کنید تا بتوانید خطای مربوطه را ملاحظه کنید سپس کوئری خود را اصلاح نمایید:



$sql= mysqli_query($con,"INSERT INTO 'categorise' VALUSE('','$title',1,$date)") or die(mysqli_error($con));