PDA

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



h.alizadeh
شنبه 26 تیر 1389, 14:06 عصر
سلام،
من میخوام در صفحه یک button بزارم و بعد با کلیک بر روی این دکمه یک سری دستورات PHPاجرا کنم چطوری؟
البته بجز دکمهsubmit چون از اون جدا برای کاری دیگه استفاده میکنم.


مثلا من یک دستور خیلی ساده هم نوشتم:


<input name="btndo" type="button" value="do" onclick="<?php echo 'homa';?>"/>

کار نمیکنه ، راهی هست؟

h.alizadeh
شنبه 26 تیر 1389, 14:10 عصر
مثلا من میخوام با کلیک بر روی یک دکمه یکسری تکست باکس بصورت دینامیک اضافه کنم ...
کلی می پرسم زیاد پیش مییاد به چندتا دکمه در فرم احتیاج داشته باشم و بخوام کارای مختلفی رو انجام بدم چطوری میتونم در PHP ....؟

LORD AELX
شنبه 26 تیر 1389, 14:34 عصر
مهم نیست چند تا فرم و دکمه از نوع Submit روی صفحه وجود دارد، فقط کافیه اسامی متفاوتی برای آن ها در نظر بگیرید (خصوصیت name)، سپس اگر قصد دارید، کد PHP را نیز در همان صفحه قرار دهید کافیست خصوصیت action فرم را برابر مقدار زیر قرار دهید:


<?php print $PHP_SELF?>سپس در کد PHP برای اینکه چک کنید که فلان Button فشرده شده است یا خیر، باید با یک if و با استفاده از تابع isset آن را چک کنید. به مثال زیر توجه کنید:



<?php
if(isset($_REQUEST["ButtonName"])) {
//...
}
?>
البته در همان شرط if می توانید چک کنید که آیا همه فیلد های ضروری پر شده اند یا نه که این کار نیز با استفاده از کدی مانند زیر انجام می گیرد:


if($_REQUEST["ObjectName"]!="") { //... }موفق باشید :قلب:

eshpilen
شنبه 26 تیر 1389, 14:55 عصر
آخ آخ این <?php print $PHP_SELF?> یه حفرهء امنیتی داره که خیلی زشته.
البته بنظر من اصلا تقصیر برنامه نویس بیچاره نیست. این به دستکاری استانداردها برمیگرده. شاید بشه انداختش گردن آپاچی!
راه حلش هم اینه که مجبوریم مقدار داخل PHP_SELF رو قبل از درج کردن بررسی کنیم تا مبادا چیز اضافه ای توش تزریق شده باشه.
من در سایت iranphp.org اولین بار اشاره به این حفره رو دیدم.

صابر طهماسبی
شنبه 26 تیر 1389, 16:13 عصر
اینجور کارا بهتره با جاوا اسکریپت و DOM انجام بشه که هم بار پردازشی روی کلاینت میفته هم فوق العاده نسبت به سرور ساید سریعتر انجام میشه

mohmadd
شنبه 26 تیر 1389, 17:17 عصر
آخ آخ این <?php print $PHP_SELF?> یه حفرهء امنیتی داره که خیلی زشته.
البته بنظر من اصلا تقصیر برنامه نویس بیچاره نیست. این به دستکاری استانداردها برمیگرده. شاید بشه انداختش گردن آپاچی!
راه حلش هم اینه که مجبوریم مقدار داخل PHP_SELF رو قبل از درج کردن بررسی کنیم تا مبادا چیز اضافه ای توش تزریق شده باشه.
من در سایت iranphp.org اولین بار اشاره به این حفره رو دیدم.
میشه لینکش رو بدی ؟

eshpilen
شنبه 26 تیر 1389, 18:12 عصر
این تاپیک رو بخونی توی همین تاپیک اومده:
http://forum.iranphp.org/Thread-%D9%86%DA%A9%D8%A7%D8%AA-%D9%88-%D8%A7%D8%B5%D9%88%D9%84-%D9%85%D9%87%D9%85-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-1
کلی هم روی همون یک مورد بحث شده.

LORD AELX
شنبه 26 تیر 1389, 18:28 عصر
آخ آخ این <?php print $PHP_SELF?> یه حفرهء امنیتی داره که خیلی زشته.
البته بنظر من اصلا تقصیر برنامه نویس بیچاره نیست. این به دستکاری استانداردها برمیگرده. شاید بشه انداختش گردن آپاچی!
راه حلش هم اینه که مجبوریم مقدار داخل PHP_SELF رو قبل از درج کردن بررسی کنیم تا مبادا چیز اضافه ای توش تزریق شده باشه.
من در سایت iranphp.org اولین بار اشاره به این حفره رو دیدم.

ممنون، من این رو نمیدونستم (گرچه جدیدا به طور حرفه ای وارد این حیطه شده ام) .... من یه جای دیگه نوع دیگری از استفاده از چنین چیزی رو دیده بودم، میدونی کدش چیه؟!

bestirani2
شنبه 26 تیر 1389, 20:07 عصر
ممنون، من این رو نمیدونستم (گرچه جدیدا به طور حرفه ای وارد این حیطه شده ام) .... من یه جای دیگه نوع دیگری از استفاده از چنین چیزی رو دیده بودم، میدونی کدش چیه؟!
کلاً هر نوع متغیری چه جایی include بشه، چه در یک کوئری باشه، از نظر امنیتی مشکل هست
مخصوصاً داخل یک کوئری که کاربر به راحتی با نام مدیر وارد میشه.

bestirani2
شنبه 26 تیر 1389, 20:10 عصر
سلام،
من میخوام در صفحه یک button بزارم و بعد با کلیک بر روی این دکمه یک سری دستورات PHPاجرا کنم چطوری؟
البته بجز دکمهsubmit چون از اون جدا برای کاری دیگه استفاده میکنم.


مثلا من یک دستور خیلی ساده هم نوشتم:


<input name="btndo" type="button" value="do" onclick="<?php echo 'homa';?>"/>
کار نمیکنه ، راهی هست؟

اگر میخوای چیزی رو هم به php پاس بدی باید از طریق جاوا اسکریپت باید پاس بدی، مثلاً

onclick="script:code javascript"

eshpilen
شنبه 26 تیر 1389, 22:42 عصر
ممنون، من این رو نمیدونستم (گرچه جدیدا به طور حرفه ای وارد این حیطه شده ام) .... من یه جای دیگه نوع دیگری از استفاده از چنین چیزی رو دیده بودم، میدونی کدش چیه؟!
خب منم نمیدونستم تا اون موقع. تازه کلی هم چک و چونه زدم سرش که همچین چیزی صحت نداره :لبخند:
البته میگم این یه ویژگی کاملا غیرعادی و غیرقابل انتظار هست که میتونم بگم از دید اصولی و تطابق با استانداردها مشکل داره. به دلیل یه ویژگی ابتکاری که آپاچی برای کوتاه کردن و خوانا کردن URL ها و از اینطور چیزا ابداع کرده این ضعف ایجاد شده.
این مسئله منو یاد مسئلهء تاریخی رجیستر گلوبالز میندازه تاحدی.
البته رجیسترگلوبالز از نظر من قطعا یک طراحی غلط بوده. درمورد این یکی میشه بیشتر بحث کرد.
بهرحال شما میبینی که متغییر دیگری در PHP برای اینطور کارها نیست، درحالیکه خیلی مورد نیاز و انتظارش منطقی هست. یعنی یه متغییر که دقیقا بدرد همین نقشها بخوره و امن باشه و اینقدر از دید برنامه نویسی غیرمنتظره نباشه (الان کسی ندونه از کجا باید بفهمه این حفره وجود داره و چیه؟) و نیاز به حجیم و کثیف کردن کد با دستورا اضافهء چک کردن محتویات نباشه.
مورد دیگه هم نمیدونم دربارهء چی صحبت میکنی. میشه بیشتر توضیح بدی؟


کلاً هر نوع متغیری چه جایی include بشه، چه در یک کوئری باشه، از نظر امنیتی مشکل هست
مخصوصاً داخل یک کوئری که کاربر به راحتی با نام مدیر وارد میشه.
اگر به مسئلهء قدیمی رجیستر گلوبالز اشاره میکنی فکر میکنم دیگه این روزها زیاد مطرح نباشه. کلا این ویژگی قرار بوده از PHP حذف بشه (شایدم تاحالا حذف شده و من خبر ندارم)، و از مدتها پیش پیشفرض تنظیم این ویژگی در حالت خاموش قرار گرفته.
من اول هر اسکریپتم این کد رو قرار میدم و کار رو بدون تن دادن به اینهمه شک و ریسک و زحمت برای برنامه نویسی تموم میکنم:

if(ini_get('register_globals')) exit("<center><h3>Error: Turn that damned register globals off!</h3></center>");
توضیح: لحن بکار رفته نشانهء خشم بنده از این ویژگی احمقانه بوده :لبخند:

اما در موارد دیگه موقعی که متغییر حاوی مقادیری هست که از سمت کلاینت اومدن، باید احتیاط و بررسی یا تمهیدهای/توابع لازم رو بکار برد تا از سوء استفاده جلوگیری بشه. این مسئله در برنامه نویسی کلی هست و مختص PHP نیست.

h.alizadeh
یک شنبه 27 تیر 1389, 14:23 عصر
اگر میخوای چیزی رو هم به php پاس بدی باید از طریق جاوا اسکریپت باید پاس بدی، مثلاً

کد PHP:

onclick="script:code javascript"



ممنونم،ولی منظورتونو رو متوجه نشدم!
از طریق javascriptچطوری به PHP پاس بدم؟!

parselearn
یک شنبه 27 تیر 1389, 14:47 عصر
چرا با ايجكس اين كارو نميكني؟


<input type="button" name="Button" value="Button" onClick="ajax('load.php','divname');">