PDA

View Full Version : سوال: مشکل با mysqli در ساخت صفحه لاگ این



download95
یک شنبه 01 شهریور 1394, 17:17 عصر
کد موجود در main.php






class security{



//check post search
function Check_Post($value){
$Return1 = mysql_real_escape_string($value);
$Return2 = htmlspecialchars($Return1);
return $Return2;
}

//check get data
function Check_Get($value){
$Return1 = mysqli_real_escape_string($value);
$Return2 = htmlspecialchars($Return1);
$Return3 = intval($Return2);
return $Return3;
}

//redirect function
function Redirect($page,$parametr)
{
if(isset($page) && isset($parametr))
{
$page_filter = $page.".php?".$parametr;
header("location:$page_filter");
exit;
}
else if(isset($page)){
$page_filter = $page.".php";
header("location:$page_filter");
exit;
}

}

//covering function ---->include()
function Covering($page){
$page_filter = $page.".php";
include "$page_filter";
}

}
class template{


//error or success massage
function massage($text,$color){
echo "<b><font color=$color size='2'>$text</font></b>";
}
}





check.php


include '../object/main.php';
$security= new security;
if(isset($_POST['login'])){
if($_POST['username']=='' || $_POST['password']=='' || $_POST['email']=='')
{
$security->Redirect("index","empty=1090");
}
else{
}
}else{
$security->Redirect("index");


کد php در فرم




<?php
include '../object/main.php';
$security=new security;
$template=new template;
?>


<?php
if (isset($_GET['empty']))
$security->Check_Get($_GET['empty']);
$template->massage("لطفا تمامی فیلد ها را تکمیل نمایید","red");
?>



ارور موجود در کد :
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\xampp\htdocs\soccerresult\object\main.php on line 14

همنطور که میبینید میخوام بعد از زدن دکمه لاگین پیامی نشان داده بشه (این کد رو از یه جایی گرفتم)
نمیدونم چیکار باید بکنم. توی mysqli وقتی 1 پارامتر جدید میخواد چی رو باید بدم؟
من این کد رو کپی کردم ولی الان موندم دقیقا چیکار باید بکنم



لطفا توضیحات کامل بدید !!! چون اطلاعات زیادی از php ندارم . ممنون .

abolfazl-z
یک شنبه 01 شهریور 1394, 17:39 عصر
علیک سلام

دوست عزیز شما دارین از توابع اکستنشن mysqli یعنی تابع mysqli_real_escape_string استفاده می کنین در خط 14. بیشتر توابع این اکستنشن نیاز به متغیر resource ایی که از تابع mysqli_connect خروجی میاد را می خواهند.
به زبان ساده تر این خطا داره میاد میگه که تابع mysqli_real_escape_string دو پارامتر می خواهد که شما یک پارامتر ست کرده اید.
مثال


$con = mysqli_connect('127.0.0.1','root','');
if(!@con)
exit('connection error !')
$username = mysqli_real_escape_string($con,$_POST['username']);

download95
دوشنبه 02 شهریور 1394, 02:37 صبح
ببخشید من سوالم رو بد پرسیدم
بزارید اینجوری بگم که من دارم از توی یک اموزش یه صفحه لاگین میسازم (چیز زیادی از پی اچ پی نمیدونم) این آموزش بخاطر این که قدیمیه همجا از mysql استفاده کرده ولی زمپ msql رو قبول نمیکنه اون msqli رو میشناسه اون کد خط چهارم هم به این شکله :



$Return1 = mysql_real_escape_string($value);


منم رفتم سرچ کردم دیدم کد بالایی که براتون فرستادم اومد ولی اون کد یه پارامتر دیگه میخواد.
حالا من باید پارامتر دیگرو چی بزارم که کد خطا نده ؟
یجا هم این کدو دیدم :



$city = $mysqli->real_escape_string($city);


به نتیجه نرسیدم اگه میشه راهنمایی کنید
ممنون

abolfazl-z
دوشنبه 02 شهریور 1394, 21:33 عصر
بزارید اینجوری بگم که من دارم از توی یک اموزش یه صفحه لاگین میسازم (چیز زیادی از پی اچ پی نمیدونم) این آموزش بخاطر این که قدیمیه همجا از mysql استفاده کرده ولی زمپ msql رو قبول نمیکنه

نگاه کنید ربطی به زمپ نداره باید این extension (یعنی همان mysql) را در PHP.ini فعال کنید. دلیل غیرفعال بودن اش هم این هست که از PHP 5.5.0 منسوخ شده است و از mysqli استفاده میشه

و دیگر نیازی به تغییر کد ها نیست.

برای فعال کردن اش میتونید از همان زمپ رو به روی apache بر روی دکمه config کلیک کنید و گزینه php.ini را انتخاب کنید و در فایل باز شده دنبال خط extension=php_mysql.dll بگردید و اگر سمیکالن (;) داشت برش دارید و فایل را ذخیره کرده و دوباره apache را stop کرده و start کنید.

download95
سه شنبه 03 شهریور 1394, 01:08 صبح
برای فعال کردن اش میتونید از همان زمپ رو به روی apache بر روی دکمه config کلیک کنید و گزینه php.ini را انتخاب کنید و در فایل باز شده دنبال خط extension=php_mysql.dll بگردید و اگر سمیکالن (;) داشت برش دارید و فایل را ذخیره کرده و دوباره apache را stop کرده و start کنید.





;extension=php_mssql.dll
;extension=php_mbstring.dll
;extension=php_exif.dll ; Must be after mbstring as it depends on it
extension=php_mysql.dll
extension=php_mysqli.dll
;extension=php_oci8.dll



ممنون از راهنمایی شما ولی
extension=php_mysql.dll سمیکالن نداشت و من سمیکالن گذاشتم و هیچ تغییری نکرد !!! باز هم میگه این کد منسوخ شده هست
ببخشید یه سوالی داشتم بهتر نیست بجای این که برگردم به کد های قدیم راهنماییم کنید که چجوری از mysqli استفاده کنم ؟

download95
چهارشنبه 04 شهریور 1394, 12:58 عصر
آپ .....
دوستان اگه میشه راهنماییم کنید لطفا

abolfazl-z
پنج شنبه 05 شهریور 1394, 13:30 عصر
خوب شما باید تمام این توابع را به mysqli تغییر بدهید.

به جای mysql_connect از mysqli_connect استفاده کنید.

خروجی تابع mysqli_connect را داخل یک متغیر عمومی (GLOBALS$) ذخیره کنید.

به جای تابع های mysql_query از تابع mysqli_query استفاده کنید امام با یک تفاوت که بیشتر توابع mysqli پارامتر ورودی اول آن ها باید متغیر connection شما باشد (همونی که داخل متغیر عمومی گذاشتیم از خروجی تابع mysqli_connect)

بعد هر جا تابع دیدین باید تغییر بدهید

اینطوری نیست که نام هاشون را تغییر بدهید

باد به دقت انجام دهید.

برای اینکه بتونین به reference توابع PHP دسترسی داشته باشید می توانید از الگوی زیر برای جستجو در سایت PHP استفاده کنید

php.net/function_name
example :
php.net/substr

abolfazl-z
پنج شنبه 05 شهریور 1394, 13:31 عصر
در واقع هرجایی از برنامه را باید متناظر اش را با mysqli پیاده سازی کنید.