PDA

View Full Version : مبتدی: مشکل در foreach



googoli
شنبه 18 تیر 1390, 10:15 صبح
با سلام خدمت شما دوستان و اساتید گرامی
من یه تیکه کد به صورت زیر برای افزودن کاربر جدید نوشتم


<?
if (isset($_REQUEST['bankname'])) $bankname=$_REQUEST['bankname'];
if (isset($_REQUEST['code'])) $code=$_REQUEST['code'];
if (isset($_REQUEST['_submit'])){
$counter=0;
$idaccount = $_REQUEST['idaccount'];
if (count($idaccount)>0) {
foreach ($idaccount as $value){
$access.=$value;
}
}

}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<link href="form.css" type="text/css" rel="stylesheet">
</head>
<script language=jscript src="../java/farsi.js"> </script>
<script>
function check() {
var form = document.adduser;
if (form.username.value == "" ) {
alert("لطفا نام و نام خانوادگي و نام کاربري و خود را وارد نماييد");
return false;
}
if (form.password.value=='') {
alert('لطفا رمز عبور خود را تعيين نماييد ');
return false;
}
if (form.password.value.length<4) {
alert('حداقل طول کلمه رمز 4 حرف مي باشد ');
return false;
}
if (form.password.value != form.repassword.value) {
alert('رمزهاي عبور وارده شده باهم يکي نيست ');
return false;
}
}
function checkAll(oElement) {
oForm = oElement.form;
oElement = oForm.elements[oElement.name];
if(oElement.length)
{
bChecked = oElement[0].checked;
for(i = 1; i < oElement.length; i++)
oElement[i].checked = bChecked;
}
}
form.submit();
</script>
<body>
<br />
<div align="center"><font color="red" face="Tahoma" size="3">افزدودن کاربر</font></div>
<br />
<br />
<form name="adduser" action="insert_user.php" method="POST" onsubmit="return check();">
<input type="Hidden" name="bankname" value="<?php echo $bankname; ?>">
<input type="Hidden" name='_submit' value='yes'>
<table width="100%" cellpadding="6" cellspacing="0">
<tr>
<td align="right"><input dir="rtl" name="username" tabindex="1" maxlength="20" size="50" onkeypress="farsi()" /></td>
<td align="right" width="20%"><font color="blue" face="Tahoma" size="2">:نام کاربري</font></td>
</tr>
<tr>
<td align="right"><input name="password" type="password" tabindex="2" maxlength="20" size="50" /></td>
<td align="right" width="20%"><font color="blue" face="Tahoma" size="2">: کلمه عبور</font></td>
</tr>
<tr>
<td align="right"><input name="repassword" type="password" tabindex="2" maxlength="20" size="50" /></td>
<td align="right" width="20%"><font color="blue" face="Tahoma" size="2">: تکرار کلمه عبور</font></td>
</tr>
</table>
<table border="0" width="100%" cellpadding="2" cellspacing="0" height="10%">
<tr bgcolor="#E4E9E8" >
<td align="center" colspan="5" ><font color="blue" face="Tahoma" size="2">مجوز دسترسي</font></td>
<td align="right" width="20%"><font face="Tahoma" size="2">انتخاب همه</font><input type="checkbox" id="checkall" name="checkall" onclick="checkAll(this);" /></td>
</tr>
<tr>
<td align="right"><font color="red" face="Tahoma" size="2">مناظرات</font><input id="checkall" name="idaccount[]" value="F" type="checkbox" /></td>
<td align="right"><font color="red" face="Tahoma" size="2">نظرات</font><input id="checkall" name="idaccount[]" value="E" type="checkbox" /></td>
<td align="right"><font color="red" face="Tahoma" size="2">مقالات</font><input id="checkall" name="idaccount[]" value="D" type="checkbox" /></td>
<td align="right"><font color="red" face="Tahoma" size="2">پرسش و پاسخ</font><input id="checkall" name="idaccount[]" value="C" type="checkbox" /></td>
<td align="right"><font color="red" face="Tahoma" size="2">کتابخانه</font><input id="checkall" name="idaccount[]" value="B" type="checkbox" /></td>
<td align="right"><font color="red" face="Tahoma" size="2">اخبار</font><input id="checkall" name="idaccount[]" value="A" type="checkbox" /></td>
</tr>
</table>
<br /><br />
<div align="center">
<input type="button" name="cancel" value="بازگشت" style="font-family:tahoma;font-size:11;" onclick="" />
<input type="submit" name="ok" value="تاييد" style="font-family:tahoma;font-size:11;" />
</div>
</form>
</body>
</html>

حالا مشکل من این جا هست که وقتی می خوام در دستور foreach نمی تونم متغیرهای رو کنار هم داشته باشم
منظورم این هست که من حروفی رو که تعیین کردم به این صورت می خوام
ABCDEFالی آخر ولی در این دستور جوابی که به من میده 0یا 00 هست اگر میشه در این باره من رو راهنمایی کنید .

Keramatifar
شنبه 18 تیر 1390, 14:29 عصر
دوست عزیز
$_REQUEST به شما یک آرایه از نوع Associative (آرایه های دارای ایندکس غیر عددی) بر می گردونه، حلقه foreach رو به شکل زیر تغییر بدید تا index آرایه را در $index داشته باشید و مقدار را در $value


if (count($idaccount)>0)
{ foreach ($idaccount as $index => $value)
{$access.=$value; }

MMSHFE
یک شنبه 19 تیر 1390, 08:57 صبح
يك نكته رو هم يادآوري ميكنم:
بنا به دلايل امنيتي، از REQUEST_$ استفاده نكنيد. اگه اطلاعات با متد post ارسال شده از POST_$ و اگه ازطريق آدرس اومده، با GET_$ اطلاعات رو بخونيد. اينطوري امنيت يكم بالاتر ميره. براي مثال، صفحه شما ممكنه منتظر اطلاعاتي باشه كه با متد post ارسال شده ولي يك هكر، همون اطلاعات رو توي آدرس مينويسه و چون شما از REQUEST_$ استفاده كردين و اين آرايه، همه مقادير post و get و cookie رو مورد استفاده قرار ميده. حتي ممكنه براي مثال، يك مقدار cookie به نام user داشته باشين كه از اون براي كنترل ورود كاربر به سايت استفاده كنيد. حالا فرض كنيد مقدارش هم 1 هست و صفحه شما هم اسمش user.php هست. كافيه هكر يا هر فرد ديگه توي آدرس بنويسه user.php?user=1 و چون REQUEST_$ مقادير post و get و cookie رو يكسان ميدونه، فرد مربوطه ميتونه وارد صفحه كاربري بشه حتي با وجوديكه كوكي براش ايجاد نشده (user به جاي كوكي از get دريافت شده).
اميدوارم تونسته باشم خوب توضيح بدم. براي اطلاعات بيشتر اينجا (http://php.net/manual/en/reserved.variables.request.php) رو نگاه كنيد.
موفق باشيد.

googoli
یک شنبه 19 تیر 1390, 16:59 عصر
ممنون از راهنمایی شما واقعا خیلی مفید بود برام در حقیقت من از یکی شنیده بود که REQUEST_$ از امنیت بالایی برخوردار هست ولی با این حرف شما کاملا روشن شدم