PDA

View Full Version : مبتدی: عدم امکان تغییر محتوای input با امکان ارسال محتوا



armsoftpc
چهارشنبه 06 اردیبهشت 1391, 11:56 صبح
به نام خدا
با سلام
چه کار کنیم که تگ غیر فعال شود ، اما اطلاعات آن ارسال شوند ، (که این اطلاعات داخل خود برنامه مقدار دهی می شوند ، ما فقط می خواهیم کاربر (مثلا یوزر) آن را نتواند تغییر دهد ، اما ببیند.):متفکر:
با صفت disabled تگ غیر فعال میشه ، اما اطلاعات هم ارسال نمیشه!!!

armsoftpc
چهارشنبه 06 اردیبهشت 1391, 12:11 عصر
خسته شدیم..
سوال اونقدر هم سخت نبود.

lady64
چهارشنبه 06 اردیبهشت 1391, 12:13 عصر
من خودم هم یک بار این موضوع برام پیش اومده بود . نمیدونم منطقیه یا نه ولی من یک input دیگه هم در نظر گرفتم و خاصیت text اون رو hidden گذاشتم . البته این امنیت نداره و در view source دیده میشه.دوستان این سوال رو ممنون میشیم جواب بدید.برای من هم جالبه.

Farshid007
چهارشنبه 06 اردیبهشت 1391, 12:16 عصر
خوب اگه می خواهی پنهان باشه چرا از نوع hidden ایجاد نمی کنی؟
مثلا:

<input type="hidden" value="value" name="name" />

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 12:16 عصر
<input name="user" readonly="readonly" type="text" value="ali"/>البته استفاده از این روش رو توصیه نمیکنم چون به راحتی با firebug یا سایر افزونه ها و روشهای دیگه مثل JS Injection میشه خاصیت readonly رو از روی عنصر برداشت. تگ hidden بهتره ولی از همه بهتر تعریف Session و نمایش اون بصورت متن معمولی به کاربر هست.
موفق باشید.

Farshid007
چهارشنبه 06 اردیبهشت 1391, 12:20 عصر
اگه قراره که کلاینت نتونه مقدارشو عوض کنه چه دلیلی داره که مقدرا اونو با Post بخونی خوب مقدارش قابل تغییر نیسته که یه رشته اختصاص بده به این و مقدارش رو هم همون مقدار اون textbox ای که دیزیبل هست بزار و فکر کن این همونیه که با مندPost خوندیش چه فرقی می کنه؟

armsoftpc
چهارشنبه 06 اردیبهشت 1391, 12:22 عصر
نمی خوام ، مخفیش کنم، می خوام فقط دیده بشه ، اما اطلاعاتش تغییر نکنه.

Farshid007
چهارشنبه 06 اردیبهشت 1391, 12:25 عصر
اگه مقدارش متغییر نیست می تونی اونو اضافه کنی به اخر ادرس (با متد GET)

index.php?u-id=ali
اگر هم کاراکتر های غیر مجاز(فاصله و...) داشته می تونی اول URL encode کنی بعد اکو کنی

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 12:25 عصر
در اینصورت راهش همونیه که گفتم. موفق باشید.

Farshid007
چهارشنبه 06 اردیبهشت 1391, 12:29 عصر
خوب اخه اصلا احتیاج نیست که اونو با POST بفرستی
مثلا می خواهی عبارت ali رو به این صورت بفرستی:

<input type="text" value="Ali" disabled="disabled" name="n-nam" />
خب مقدارش متغیر نیست چه دلیلی داره بیایم اونو اینجوری بخونیم:

$name=$_POST['n-nam'];
می دونیم که مقدارش ali است چه دلیلی داره که دوباره اونو بخونیم؟

armsoftpc
چهارشنبه 06 اردیبهشت 1391, 12:30 عصر
readonly برای تگ SELECT جواب نمیده ، آیا واقعا کسایی که html رو طراحی کردند ، دو زار به این موضوع فکر نکردند ، یا حتی تا اکنون اصلاحش نکردند.

armsoftpc
چهارشنبه 06 اردیبهشت 1391, 12:31 عصر
می دونیم که مقدارش ali است چه دلیلی داره که دوباره اونو بخونیم؟
این روش ها هیچ کدوم ، جواب نمیده ، مقدار ها رو که من وارد نمیکنم، خود php اونم با استفاده از mysql مقدار دهی می کنه.

eshpilen
چهارشنبه 06 اردیبهشت 1391, 12:43 عصر
با صفت disabled تگ غیر فعال میشه ، اما اطلاعات هم ارسال نمیشه!!!
اینو تاحالا تست نکرده بودم.
اما اگر واقعا اینطوره خب شما میتونید وقتی یک ورودی disabled در فرم درج میکنید که میخواید مقدارش POST بشه، بیاید و یک ورودی hidden هم با نام و مقدار مورد نظر در فرم بذارید. به این شکل اون hidden input دقیقا همون نام ورودی و مقدار رو در آرایهء POST شما موجب میشه.

eshpilen
چهارشنبه 06 اردیبهشت 1391, 12:47 عصر
مثال:

<?php

if(!empty($_POST)) {
echo '<pre>';
print_r($_POST);
echo '</pre>';
}

?>
<form method="post" action="">
<input type="text" name="test" disabled value="my value">
<input type="hidden" name="test" value="my value">
<input type="submit" value="submit">
</form>

amin1softco
چهارشنبه 06 اردیبهشت 1391, 12:50 عصر
خوب طبق گفته آقای MMSHFE به طور استاندارد شما باید از
readonly="readonly" استفاده کنید.
ولی disabled رو می شه با جاوا تغییرش داد و فرم رو ارسال کرد یک همچین کدی :


<form id="myform" action="handle-data.php">
Search: <input type='text' name='query' />
<A href="javascript: submitform()">Send</A>
</form>

<!-- The function that submits the form-->
<script type="text/javascript">
function submitform()
{
if(document.myform.onsubmit())
{//this check triggers the validations
document.myform.submit();
}
}
</script>

شما این خصوصیت رو تغییر بدید و ارسال کنید . البته اصلاً توصیه نمی شه.

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 12:50 عصر
برای تگ SELECT چون خاصیت readonly نداره، باید disabled کنید و بعد، فرم رو با جاوا اسکریپت submit کنید. فقط قبل از submit باید disabled رو بردارین و بعد submit بشه. مثال:


<!doctype html>
<html>
<head>
<title>Hello</title>
<meta charset="utf-8"/>
<script type="text/javascript">
function send() {
document.getElementById("select").disabled = null;
document.forms["myForm"].submit();
}
</script>
</head>
<body>
<form action="" method="get" name="myForm">
Language:<br/>
<select disabled="disabled" id="select" multiple="multiple" name="language[]">
<option selected="selected" value="php">PHP</option>
<option value="aspx">ASP.NET</option>
<option selected="selected" value="jsp">JSP</option>
</select><br/>
<input onclick="send();" type="button" value="Submit"/>
</form>
</body>
</html>

-----
راستی، اگه واسه تگ select میخواستین خوب چرا از اول نگفتین؟ چرا عنوان تاپیک رو input انتخاب کردین که باعث شده راهنمایی اشتباه دریافت کنید؟
-----
موفق باشید.

eshpilen
چهارشنبه 06 اردیبهشت 1391, 15:19 عصر
اینطوری که اگر جاوااسکریپت فعال نباشه مشکل پیش میاد.
دلیلی نداره بخاطر چیزی که راه غیر جاوااسکریپت راحت هم داره چنین کاری بکنیم.

MMSHFE
چهارشنبه 06 اردیبهشت 1391, 16:17 عصر
من هم اولش گفتم ولی وقتی دیدم ایشون اصرار به استفاده از تگ SELECT غیرفعال و در عین حال ارسال اون با submitشدن فرم دارن، گفتم که باید از JS برای این کار استفاده بشه. درهرحال هنوز هم تأکید میکنم بهتره مقادیری که میخواین سمت سرور داشته باشین رو توی Session بگذارین و همونها رو توی تگ SELECT مربوطه انتخاب کنید و اون رو disabled کنید. اینطوری هم هدفتون تأمین شده و هم اینکه نگران این نیستین که با JS Injection بشه دوباره اونرو فعال کرد و تغییرش داد. سمت سرور هم بعد از Submit فرم، اطلاعات رو از Session بخونید.
موفق باشید.