PDA

View Full Version : سوال: همه چیز در مورد مقدار "؟" برای صفت action در ارسال فرم به یک فایل php



pershianix
شنبه 07 بهمن 1391, 10:56 صبح
من دو تا فایل دارم. یکی یه فرم ساده ی html و یکی دیگه هم یه فایل php. فرم به صورت زیره:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Hello</title>
</head>
<body>
<form action="" method="post">
<label for="name">input your name:
<input type="text" name="name">
</label>
<input type="submit" value="submite">
</form>
</body>
</html>

و فایل php هم به این شکله:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Hello</title>
</head>
<body>
<p><a href="?addname">Add your name here: </a></p>
<?php
if(isset($_GET['addname']))
{
include 'form.html.php';
exit();
}
if(isset($_POST['name']))
{
echo 'Hi '.$_POST['name'].'!';
}

?>

</body>
</html>



حالا سوال من اینه: وقتی که مقدار صفت action رو برای فرم، "؟" قرار میدم، کاربر بعد از کلیک بر روی لینک addname فرم رو مشاهده میکنه و با وارد کردن نامش و کلیک بر روی دکمه ی submit پیغام "سلام" در آدرس example.com/hello/? چاپ میشه.

مشکل من اینه که نمیخوام پیغام "سلام" با همچین آدرسی چاپ بشه. منظورم اینه که نمیخوام ؟ توی آدرس باشه. و مشکل اینجاست که اگه مقدار صفت action رو برابر با "" قرار بدم (هیچی) همه چی درست میشه ولی دیگه پیغام "سلام" چاپ نمیشه! مشکل از کجاست؟ ممنون.

رضا قربانی
شنبه 07 بهمن 1391, 13:11 عصر
مشکلتون :
نکته اینجاست که وقتی action="" به این صورت باشه یعنی اطلاعات فرم به همون آدرسی صفحه که هست ارسال میشه !!!!

شما آدرس گت می فرستید و آدرس صفحه شما میشه ?addname و حالا داخل فرم باید اکشن رو به این صورت بذارید :
action="?addname" به صورت post ارسال کنید.
و اون exit(); هم برش دار.
فکر کنم باید مشکلتون حل بشه.

pershianix
شنبه 07 بهمن 1391, 14:55 عصر
مشکلتون :
نکته اینجاست که وقتی action="" به این صورت باشه یعنی اطلاعات فرم به همون آدرسی صفحه که هست ارسال میشه !!!!

شما آدرس گت می فرستید و آدرس صفحه شما میشه ?addname و حالا داخل فرم باید اکشن رو به این صورت بذارید :
action="?addname" به صورت post ارسال کنید.
و اون exit(); هم برش دار.
فکر کنم باید مشکلتون حل بشه.

نکاتی رو که گفتید رو میدونستم. انگار مشکلمو بد توضیح دادم. اینم مشکلم با توضیح بیشتر:

اگه که action="" قرار بدم، چون که آدرس صفحه، بعد از کلیک کاربر به روی لینک، برابر میشه با

http://example.com/hello/?addname

پس، همین صفحه دوباره بارگزاری میشه و با توجه به کنترلرمون توی فایل php، پیغام "سلام" نمایش داده نمیشه.

حالا اگه بیام و action="?" قرار بدم، چون که حالا دیگه، بعد از کلیک کاربر بر روی لینک، صفحه دوباره لود نمیشه و مرورگر به صفحه ی

?/http://example.com/hello

هدایت میشه، پس پیغام "سلام" نمایش داده میشه. منتها موضوع اینه که من نمیخوام پیغام سلام با همچین آدرسی نمایش داده بشه. من میخوام این پیغام، توی آدرس

http://example.com/hello

نمایش داده بشه. (بدون وجود ؟ در آدرس). و مشکل اینجاست که بدون وجود ؟ در آدرس، پیغام نمایش داده نمیشه. امیدوارم این بار تونسته باشم مشکلمو درست بیام کنم.

در ضمن، وجود exit توی اون دستور کنترلی الزامیه. چون بعدا قصد دارم که اطلاعات ورودی رو توی پایگاه داده ذخیره و نمایش بدم و اگه از exit واسه خروج از برنامه توی این نقطه استفاده نکنم، اونوقت، در پایین فرم ورود نام، اسامی ای که قبلا ثبت شده بودند هم نمایش داده میشه.

رضا قربانی
شنبه 07 بهمن 1391, 17:12 عصر
ببین داداشی گل من مشکلت رو بهت گفتم exit رو برش دار !!!

مثلا شما باید این کد رو جایگزین کد قبلی کنید :


if(isset($_GET['addname']))
{
include 'form.html.php';

}
if(!empty($_POST['name']))
{
echo 'Hi '.$_POST['name'].'!';
}

الآن درست شده .
شما وقتی از exit(); یا die(); استفاده کنید دیگه برنامه همونجا Stop می خوره و نمیذاره ادامه کدهاتون اجرا بشه . باید دقت کنید در جای مناسب بذارید تا نه سیح بسوزه و نه کباب. می تونید بعد از نمایش $_POST['name'] بذارید و اطلاعات لازم رو در بانک .... قرار بدید.

موفق باشید


پ . ن : برای اینکه جوابتون رو زودتر و راحتر بگیرید بعد از اینکه کدها رو در تاپیک گذاشتید فایلها هم zip و ضمیمه کنید تا کاربران سریع بهتون جواب بدن.

mamali-mohammad
شنبه 07 بهمن 1391, 17:26 عصر
مشکل دوستمون چیز دیگیست
بعد از اینکه کار انجام شد با header به صفحه hello برگرد

pershianix
شنبه 07 بهمن 1391, 18:20 عصر
ببین داداشی گل من مشکلت رو بهت گفتم exit رو برش دار !!!

مثلا شما باید این کد رو جایگزین کد قبلی کنید :


if(isset($_GET['addname']))
{
include 'form.html.php';

}
if(!empty($_POST['name']))
{
echo 'Hi '.$_POST['name'].'!';
}

الآن درست شده .
شما وقتی از exit(); یا die(); استفاده کنید دیگه برنامه همونجا Stop می خوره و نمیذاره ادامه کدهاتون اجرا بشه . باید دقت کنید در جای مناسب بذارید تا نه سیح بسوزه و نه کباب. می تونید بعد از نمایش $_POST['name'] بذارید و اطلاعات لازم رو در بانک .... قرار بدید.

موفق باشید


پ . ن : برای اینکه جوابتون رو زودتر و راحتر بگیرید بعد از اینکه کدها رو در تاپیک گذاشتید فایلها هم zip و ضمیمه کنید تا کاربران سریع بهتون جواب بدن.

عزیز من، مشکل اصلا از exit نیست. اتفاقا exit لازمه. مشکل من مربوط به نوع نمایش آدرسه. اما واسه اینکه حرف شما رو هم گوش کرده باشم، exit هم برداشتمو تست کردم (با اینکه میدونستم از اون نیست) و مشکل همچنان پا برجاست. ممنون.

pershianix
شنبه 07 بهمن 1391, 18:23 عصر
مشکل دوستمون چیز دیگیست
بعد از اینکه کار انجام شد با header به صفحه hello برگرد

این درسته منتها مشکل استفاده از header اینه که فقط در حالتی بکار میاد که مقدار متغیر ورودی رو توی پایگاه داده ثبت کنیم اما چون توی این مورد، من فقط میخوام متغیر رو روی مانیتور نشون بدم (و متغیر توی پایگاه داده ثبت نمیشه) پس با ریدایرکت کردن به صفحه ی اصلی، مقدار متغیر از بین میره و چیزی نمایش داده نمیشه. حتی اگه بشه مقدار متغیر رو حفظ کرد، باز هم چیزی نشون داده نخواهد شد. یعنی جدی جدی هیچ راهی واسه حل این مشکل نیست؟

mamali-mohammad
شنبه 07 بهمن 1391, 18:37 عصر
یه سوال
در فرم از متد post استفاده کردید ، نباید انتهاش ؟ بیاد
فایل هاتون رو ضمیمه کنید یا همینجا بزارید تا بررسی بهتری کنیم

pershianix
شنبه 07 بهمن 1391, 22:36 عصر
یه سوال
در فرم از متد post استفاده کردید ، نباید انتهاش ؟ بیاد
فایل هاتون رو ضمیمه کنید یا همینجا بزارید تا بررسی بهتری کنیم
بله از متد post استفاده کردم و action رو مساوی با ؟ قرار دادم.

فایلها هم ضمیمه کردم

mamali-mohammad
یک شنبه 08 بهمن 1391, 12:52 عصر
من اینو چک کردم
مشکلی نداشته
وقتی کلیک مکینه روی add ... میره به به اینجا :
http://127.0.0.1/hello/index.php?addname
بعدش که نام رو میزنه میره به اینجا :
http://127.0.0.1/hello/index.php

چه مشکلی داره ؟

pershianix
یک شنبه 08 بهمن 1391, 18:04 عصر
من اینو چک کردم
مشکلی نداشته
وقتی کلیک مکینه روی add ... میره به به اینجا :
http://127.0.0.1/hello/index.php?addname
بعدش که نام رو میزنه میره به اینجا :
http://127.0.0.1/hello/index.php

چه مشکلی داره ؟

مشکل اینجاس که بعد که نام رو میزنه به اون آدرس نمیره. میره به این آدرس:

?/http://127.0.0.1/hello

که همون آدرس index.php هست منتها با یه علامت ؟.

mamali-mohammad
یک شنبه 08 بهمن 1391, 22:47 عصر
نه برای من به index.php رفت و درست بود

pershianix
دوشنبه 09 بهمن 1391, 10:20 صبح
نه برای من به index.php رفت و درست بود

خوب پس مشکل از کجاست؟

mamali-mohammad
دوشنبه 09 بهمن 1391, 12:05 عصر
شاید خودتن یه اشتباهی داری انجام میدی
با یه مرورگر دیگه تست کن