برگزیده های پرشین تولز

مشکل با متغير های از پيش تعريف شده در PHP

fakher

کاربر تازه وارد
تاریخ عضویت
16 دسامبر 2003
نوشته‌ها
80
لایک‌ها
0
سلام دوستان.
من اسكريپتي را از يك سايت گرفته ام كه كارش سيستم تبادل بنر مي باشد.
در پست قبليم گفتم كه ايزي پي اچ پي را روي سيستم خود نصب كرده ام.

اين اسكريپت يك فايل بنام install.php دارد كه من محتويات آن را در زير كپي مي كنم.

كار اين فايل درست كردن ديتابيس براي برنامه است. من قبلا هم در يك سايتي كه داشتم اين فايل را اجرا كرده بودم و ارور هم نمي داد. اما الان كه بر روي لوكال هاست اجرا مي كنم يك خطا مي ده و اصلا هم كار نمي كنه. يعني ديتابيس رو نمي شناسه.

خطا هم اينه: undefined variable php_self in c:\easyphp\....\install.php
در حاليكه همه مي دونيم كه اين php_self يك متغير از پيش تعرف شده مي باشد.
اين خطا بخاطر چيست؟
من خودم در فايل test.php از اكثر متغيرهاي از پيش تعريف شده استفاده كردم. براي همه شان اين خطا را مي ده

مشكل از كجا آب مي خوره؟

ضمنا من چطور مي تونم پي اچ پي خود را به آخرين ورژن ارتقا دهم؟ بدون اينكه لوكال هاستم دچار اختلال بشه؟
آخه من با ايزي نصب كردم...

و اما سورس فايل install.php براي مطالعه :

PHP:
<?


include("config.php");

if (!isset($install)){
?>
<html>
	<head>
	<title>phpBannerExchange Install</title>
</head>
<body>
	At this point, you should have done the following:<br>
	~Uploaded *ALL* the files to your server<br>
	~Defined the variables in config.php<br>
	~Created the database you would like to use for the exchange<p>
	If you have not done any of these steps, please do it now, and do not continue.  Otherwise, click on the "Continue" link below<p>
<?
echo "<br><A href=\"$PHP_SELF?install=1\">Continue</a>";
}

elseif ($install==1){
echo "<p>Creating the <b>banneradmin</b> table in $dbname<br>";

mysql_query("CREATE TABLE banneradmin (
   id int(11) DEFAULT '0' NOT NULL auto_increment,
   adminuser varchar(15) NOT NULL,
   adminpass varchar(15) NOT NULL,
   PRIMARY KEY (id),
   UNIQUE id (id, adminuser)
)");
echo "<b>Success</b><p>";

echo "<p>Creating the <b>banneruser</b> table in $dbname<br>";
mysql_query("CREATE TABLE banneruser (
   id int(11) DEFAULT '0' NOT NULL auto_increment,
   login varchar(20) NOT NULL,
   pass varchar(20) NOT NULL,
   name varchar(200) NOT NULL,
   email varchar(100) NOT NULL,
   url varchar(200) NOT NULL,
   exposures int(11) DEFAULT '0' NOT NULL,
   credits int(11) DEFAULT '0' NOT NULL,
   clicks int(11) DEFAULT '0' NOT NULL,
   siteclicks int(11) DEFAULT '0' NOT NULL,
   approved tinyint(4) DEFAULT '0' NOT NULL,
   defaultacct tinyint(4) DEFAULT '0' NOT NULL,
   raw varchar(255),
   lastip text NOT NULL,
   PRIMARY KEY (id),
   UNIQUE id (id, login)
)");
echo "<b>Success</b><p>";

echo "<p>Creating the <b>banneruser</b> table in $dbname<br>";
mysql_query("CREATE TABLE bannerurls (
   id int(11) DEFAULT '0' NOT NULL auto_increment,
   bannerurl varchar(200) NOT NULL,
   uid int(11) DEFAULT '0' NOT NULL,
   PRIMARY KEY (id),
   UNIQUE id (id)
)");
echo "<b>Success</b><p>";
echo "No errors? Good. That means that all the DB tables have been installed and you're ready to move on to <a href=\"$PHP_SELF?install=2\">the next step</a>!";
}

elseif ($install==2){
	?>
<form method="POST" action="<?echo "$PHP_SELF?install=3"; ?>"><table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="255">
  <tr>
    <td colspan=2 width="282">
    <p align="center"><b>Create Admin Login/Password</b></td>
  </tr>
  <tr>
    <td width="133">Login</td>
    <td width="148"><input type="text" name="login" size="20"></td>
  </tr>
  <tr>
    <td width="133">Password</td>
    <td width="148"><input type="text" name="pass" size="20"></td>
  </tr>
  <tr>
    <td width="133">Password Again</td>
    <td width="148"><input type="text" name="pass2" size="20"></td>
  </tr>
</table>
  <p><input type="submit" value="Submit"><input type="reset" value="Reset"></p>
</form>
<?

}
elseif ($install==3){
		if($pass==$pass2){
	echo "Inserting Admin username and password into banneradmin...<p>";
	mysql_query("insert into banneradmin values ('','$login','$pass')");
	echo "<b>Success</b><p>";
	echo "No errors? Good. That means that your admin login and password has been inserted into the banneradmin table, and you're ready to move on to <a href=\"$PHP_SELF?install=4\">the next step</a>!";
	}else{
	echo "Your Passwords don't match! Press the Back Button and try again!";
	}
}

elseif ($install==4){

echo "phpBannerExchange has been successfully installed! You may now log in to the <a href=\"$base_url/admin/index.php\">Admin Control Panel</a> using the userid and password you have just created!<p><h3>DELETE THIS FILE (install.php) IMMEDIATELY!</h3>";
}

?>
 

miladmovie

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
25 دسامبر 2002
نوشته‌ها
1,939
لایک‌ها
3
سن
39
من بي اجازه يكم پستت رو قشنگ تر كردم!

اول اينكه نگاه كن ورژن PHP اي كه اين ايزي خان برات نصب كرده چنده!(هيچ خيانتي براي يك برنامه نويس نيست جز اينكه يك برنامه مثل PHP رو براش آماده نصب كنند :blink: :lol: بايد سعي كني با تنظيماتشون بازي كني!)

بعد اين رو هم تست كن جوابي مي گيري يا نه
PHP:
$_SERVER[ 'PHP_SELF' ]


توي اين سايت هم يك بنده خدايي به مشكل تو بر خورده نگاه كني بد نيست :
http://www.sitepoint.com/forums/showthread.php?postid=744532

در ضمن

يكي از دوستان هم دنبال چنين برنامه اي مي گرده لطف كنيد و يك لينكي هم به ايشون بديد :eek:
 

fakher

کاربر تازه وارد
تاریخ عضویت
16 دسامبر 2003
نوشته‌ها
80
لایک‌ها
0
دوستان و آقاي ميلاد ( اگه اسمتون رو درست گفته باشم ) :
از راهنماييهات ممنون من اون رو تست كردم با هزار و يك مصيبت جواب داد يعني تو خود اون خط جواب نداد.
منم اومدم يك متغير با نام phpself$ تعرف كردم كه مقدار آن را برابر با متغير از پيش تعريف شده قرار دادم. سپس متغيري كه خودم تعريف كرده بودم را جايگزين كردم.

PHP:
$phpself=$_server['php_self']

:) بابا ايول خودم كه اين بالايي رو خودم پيدا كردم :D

بگذريم. الان اين جواب داد اما مشكل مهم ديگه.

چرا شرط حلقه elseif جواب نميده؟

كد زير روببينيد...

PHP:
elseif ($install==1){

يعني از اينجا به بعدش كار نمي كنه. اگه ما اين فايل install.php را اجرا كنيم چند خط بالايي رو مي نويسه و يك لينك

continue در آخر نوشته هاش هست و وقتي كه ما روي لينك مي ريم متوجه ميشيم كه لينك به:
localhost/bxchange/install.php?install=1 هست. ولي وقتي رو لينك كليك مي كنيم در عمل قسمت install=1 اجرا نميشه. در حاليكه كه اگه اجرا بشه بايد ديتابيس ساخته بشه و ايندفعه كانتينيو با لينك
localhost/bxchange/install.php?install=2 اجرا بشه. تا اين فايل رو اجرا نكنين شايد متوجه منظورم نشين

نسخه پي اچ پي كه ايزي در اختيار من گذاشته 4.3.3 هست. من نفهميدم اينو به 5 مي تونم ارتقا بدم يا نه؟ چون من ايزي رو نصب كرده ام. در اين مورد هم راهنمايي كنين لطفا.


و اما منم دوست دارم كه خدمتي هر چند ناچيز به دوستان كنم.
ولي متاسفانه اين اسكريپت را من پارسال گرفته بودم. خيلي بدنبال لينكش گشتم تا حالا كه پيداش نكرده ام

بازم سعي مي كنم . اگه پيداش كردم كه لينك مي دم. اگه هم پيدا نكرد يه روش پيدا مي كنم كه نسخه اي كه تو هارد دارم رو براي دوستان ارسال كنم.

ضمنا قابل ذكر است كه اين اسكريپت هم راهنماي نصبش و هم خود صفحاتش انگليسي هست و من دارم روش كار مي كنم كه اونو كاملا فارسي كنم.

سپس يه تاپيك مي زنم و راهنماي نصب و استفاده از اونو كامل مي نويسم.

فقط يه مشكل : دست شما درد نكنه كه پست منو قشنگ تر كرده ايد من چگونه مي تونم همين كار رو انجام بدم يعني اين كدهاي پي اچ پي رو داخل كادر با رنگ هاي مشخص بذارم. لطف كنيد اينو يادم بديد. مرسي
 

miladmovie

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
25 دسامبر 2002
نوشته‌ها
1,939
لایک‌ها
3
سن
39
توي فايل php.ini نگاه كن كه متغير register_global چه مقداري گرفته

در مورد رنگي شدن متن
در اديتور كدهاي PHP رو بين تگهاي كه با عكس
php.gif
مشخص شده قرار بده
 

fakher

کاربر تازه وارد
تاریخ عضویت
16 دسامبر 2003
نوشته‌ها
80
لایک‌ها
0
به نقل از miladmovie :
توي فايل php.ini نگاه كن كه متغير register_global چه مقداري گرفته

register_global مقدارش برابر با off هست

ضمنا من ; را از اول extension=php_mysql.dll برداشتم ولي پي اچ پي خطاي عدم وجود اون فايل را مي ده منم با سرچ گشتم اصلا تو سيستم من همچين فايلي وجود نداره.
ضمنا من در مورد تاپيك قبلي خود ( نحوه نصب ماي اس كيو ال بر روي آي آي اس) عرض كنم كه مشكل از ويروسي بودن سيستم من بود. و رفع كردم.

حالا register_global مقدارش را برابر با on كنم يا نه؟
 

oxygenws

کاربر تازه وارد
تاریخ عضویت
8 ژانویه 2004
نوشته‌ها
96
لایک‌ها
0
لطفا بحث رو در یک تاپیک ادامه بدید.
 

miladmovie

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
25 دسامبر 2002
نوشته‌ها
1,939
لایک‌ها
3
سن
39
بله همونطور كه oxygenws گفت بحث MySQL رو توي قسمت خودش دنبال كن
و اما در مورد register_global


براي اينكه بتوني از متغير هاي كه از طريق فرم يا URL فرستاده مي شند به طور مستقيم استفاده كني بايد اون رو on كني كه البته توي بيشتر سرور هاي توي اينترنت اون on هست
فقط بايد خودت مواظب باشي كه از اين خواصيت سواستفاده نشه!!!(براي اين كد تو بايد اون رو on كني)
 

fakher

کاربر تازه وارد
تاریخ عضویت
16 دسامبر 2003
نوشته‌ها
80
لایک‌ها
0
به نقل از miladmovie :
بله همونطور كه oxygenws گفت بحث MySQL رو توي قسمت خودش دنبال كن
و اما در مورد register_global


براي اينكه بتوني از متغير هاي كه از طريق فرم يا URL فرستاده مي شند به طور مستقيم استفاده كني بايد اون رو on كني كه البته توي بيشتر سرور هاي توي اينترنت اون on هست
فقط بايد خودت مواظب باشي كه از اين خواصيت سواستفاده نشه!!!(براي اين كد تو بايد on بشه)

دوستان اولا من واقعا شرمنده كه بحث را در دو تايك نوشتم. قصدي هم نداشتم و اتفاقي شد تكرار نمي شه ;)

و اما اينكه منظور از سو استفاده چيست؟ چه سو استفاده اي مي تونن بكنند؟

ضمنا من همه مقالات را خوندم. مشكلات من ناشي از اينه كه من پي اچ پي را اينستالر گرفتم و بايد نسخه اصلي رو بگيرم چون من حتي فايل php.exe را هم ندارم و جالب اينه كه با همه رواديد پي اچ پي تا حدودي كار مي كنه
 
بالا