PDA

View Full Version : در Php من متغیرهای فرم را نمی شناسد. لطفا" کمک.



taghavi
یک شنبه 11 آبان 1382, 08:28 صبح
در آبجکت هائی که در فرم php خود از قبیل Button , Submit,Text box تعریف می کنم- نام این آبجکتها باید به عنوان متغیر به اسکریپت PHP ارسال شود و PHP باید آنها را بشناسد ولی نمی شناسد و خطا می گیرد. و همچنین متغیر PHP_SELF را هم نمی شناسد

مهدی کرامتی
یک شنبه 11 آبان 1382, 10:56 صبح
در PHP به چند صورت میتوان به فیلدهای یک فرم دسترسی داشت. راه ساده، ولی پردردسر، ذکر نام فیلد بعنوان یک متغیر است و در صورتی که فرم ارسال کننده اجرا نشده باشد و یا نام فیلد اشتباه باشد باعث بروز یک خطای بحرانی در اسکریپت شما میشود.

بهرحال راه صحیح دسترسی به فیلدهای یک فرم چنین است:

if (isset($_POST["firstname"])) {
// do something here
print "Your first name is:".$_POST["firstname"];
}
همانطور که میبینید در کد فوق ابتدا چک میشود که فیلدی بنام firstname به این اسکریپت پست شده است یا نه، و اگر نتیجه مثبت باشد از آن استفاده میشود.

و البته راه صحیح دسترسی به فیلدهای پست شده به یک اسکریپت، استفاده از یک متغیر SuperGlobal بنام <span dir=ltr>$_POST</span> بهمراه نام فیلد مربوطه بدین صورت است:

$_POST&#91;"your filed name"&#93;
اگر هنوز هم مشکل دارید اسکریپت خود را در اینجا قرار دهید تا نگاهی به آن بیاندازیم :wink:

taghavi
یک شنبه 11 آبان 1382, 11:59 صبح
اسکریپت من این می باشد لطفا" راهنمائی کنید

&lt;?php

//Handle Input here
//Check if $submit has a value of "Go" - The Validator
//int error_reporting&#40;int level&#41;;
$you_wrote = $_post&#91;'you_wrote'&#93;;
$submit=$_post&#91;'submit'&#93;;
if&#40;$submit=="Go"&#41;&#123;
//The Processor
echo&#40;"You wrote ".$you_wrote&#41;;
echo&#40;"&lt;br>You could have done whatever you want with the input instead"&#41;;
exit;
&#125;

?>

&lt;!-- The Frontend HTML form -->
&lt;form action="&lt;?php $_SERVER&#91;PHP_SELF&#93;?>" method="POST" >
&lt;p>Input a word &lt;input type="text" size="20" name="you_wrote">
&lt;input type="submit" name="submit" value="Go">&lt;/p>
&lt;/form>

مهدی کرامتی
یک شنبه 11 آبان 1382, 12:59 عصر
اینم از اسکریپت اصلاح شده شما:

&lt;?php

//Handle Input here
//Check if $submit has a value of "Go" - The Validator
//int error_reporting&#40;int level&#41;;
$you_wrote = $_POST&#91;'you_wrote'&#93;;
$submit=$_POST&#91;'submit'&#93;;
if&#40;$submit=="Go"&#41;&#123;
//The Processor
echo&#40;"You wrote ".$you_wrote&#41;;
echo&#40;"&lt;br>You could have done whatever you want with the input instead"&#41;;
exit;
&#125;

?>

&lt;!-- The Frontend HTML form -->
&lt;form action="&lt;?php print $_SERVER&#91;PHP_SELF&#93;?>" method="POST" >
&lt;p>Input a word &lt;input type="text" size="20" name="you_wrote">
&lt;input type="submit" name="submit" value="Go">&lt;/p>
&lt;/form>

و اما مشکلات اسکریپت شما:
1- در خط 6 و 7 کلمه POST را با حروف کوچک نوشته بودید.
2- در خط 18 دستور print را قبل از <span dir=ltr>$_SERVER[PHP_SELF]</span> جا انداخته بودید. این اسکریپت شما بود:

&lt;form action="&lt;?php $_SERVER&#91;PHP_SELF&#93;?>" method="POST" >
در حالی که باید اینطور باشد:

&lt;form action="&lt;?php print $_SERVER&#91;PHP_SELF&#93;?>" method="POST" >

نکته آخر اینکه دفعه بعدی که خواستید کد نمونه داخل پست تان درج کنید از tag های code برای نمایش صحیح کد نمونه استفاده کنید (به دکمه code در هنگام ارسال پست جدید توجه کنید).

taghavi
دوشنبه 12 آبان 1382, 11:48 صبح
من کل کد شما را در یک فایل به عنوان Input.php ذخیره کردم(در DocumentRoot) ولی متاسفانه باز ایراد قبلی را گرفت .


Warning&#58; Undefined variable&#58; _POST in E&#58;\PhpFiles\in.php on line 6
Warning&#58; Undefined variable&#58; _POST in E&#58;\PhpFiles\in.php on line 7

Input a word
بعد که در EditBox جلوی input a word چیزی مینویسیم و submit می کنیم صفحه ای با اطلاعت زیر باز می شود:


Forbidden
You don't have permission to access /&lt;br>&lt;b>Warning&lt;/b>&#58; Use of undefined constant PHP_SELF - assumed 'PHP_SELF' in &lt;b>E&#58;/PhpFiles/in.php&lt;/b> on line &lt;b>18&lt;/b>&lt;br>&lt;br>&lt;b>Warning&lt;/b>&#58; Undefined variable&#58; _SERVER in &lt;b>E&#58;/PhpFiles/in.php&lt;/b> on line &lt;b>18&lt;/b>&lt;br> on this server.


--------------------------------------------------------------------------------
Apache/2.0.46 &#40;Win32&#41; Server at localhost Port 80


باتشکر-تقوی

مهدی کرامتی
دوشنبه 12 آبان 1382, 14:13 عصر
احتمالا نسخه PHP شما پایینتر از 4.1 است. در نسخه ‌های قبل از 4.1 متغیر <span dir=ltr>$_SERVER</span> وجود ندارد و باید بجای آن از <span dir=ltr>$HTTP_SERVER_VARS</span> استفاده کنید. مثال:

$HTTP_SERVER_VARS&#91;'PHP_SELF'&#93;
مثال در یک کد کامل:

&lt;?php
if &#40;$HTTP_POST_VARS&#91;'action'&#93; == 'submitted'&#41; &#123;
print '&lt;pre>';

print_r&#40;$HTTP_POST_VARS&#41;;
print '&lt;a href="'. $HTTP_SERVER_VARS&#91;'PHP_SELF'&#93; .'">Please try again&lt;/a>';

print '&lt;/pre>';
&#125; else &#123;
?>
&lt;form action="&lt;?php echo $HTTP_SERVER_VARS&#91;'PHP_SELF'&#93;; ?>" method="post">
Name&#58; &lt;input type="text" name="personal&#91;name&#93;">&lt;br>
Email&#58; &lt;input type="text" name="personal&#91;email&#93;">&lt;br>
Beer&#58; &lt;br>
&lt;select multiple name="beer&#91;&#93;">
&lt;option value="warthog">Warthog&lt;/option>
&lt;option value="guinness">Guinness&lt;/option>
&lt;option value="stuttgarter">Stuttgarter Schwabenbr&amp;auml;u&lt;/option>
&lt;/select>&lt;br>
&lt;input type="hidden" name="action" value="submitted">
&lt;input type="submit" name="submit" value="submit me!">
&lt;/form>
&lt;?php
&#125;
?>