PDA

View Full Version : سوال در مورد کد



sherlock0111
شنبه 12 بهمن 1392, 15:33 عصر
با سلام خدمت دوستان لطفا در مورد کد زیر برام توضیح بدهید؟



foreach ($_POST as $key => $value) {
// assign to temporary variable and strip whitespace if not an array
$temp = is_array($value) ? $value : trim($value);
// if empty and required, add to $missing array
if (empty($temp) && in_array($key, $required)) {
$missing[] = $key;
} elseif (in_array($key, $expected)) {
// otherwise, assign to a variable of the same name as $key
${$key} = $temp;
}
}

SA_Developer
شنبه 12 بهمن 1392, 16:59 عصر
سلام
فکر کن مقدار ارسال شده به این صفحه این باشه:

tfuser=user&tfpass=pass&submit=login
اینجا tfuser و tfpass به عنوان key$ و مقدایرشون به عنوان value$ ذخیره میشن (با استفاده از foreach).
این کد نام و مقادیر هر آیتم در متغیر POST_$ رو میگیره بعد چک میکنه که آیا هر آیتم خودش هم آرایه هست یا خیر اگر آرایه بود همون آرایه رو داخل متغیر temp$ میریزه در غیر اینصورت(اگر ارایه نبود) White space های احتمالی اون آیتم(مثلا tfuser) رو پاک میکنه و میذاره داخل temp$ (لاین 3)
به این نوع سینتکس Shorthand if یا Ternary operator میگن که ساده شدش این میشه:


if( is_array($value) ){
$temp = $value;
} else {
$temp = trim($value);
}



بعد در لاین 6 میگه اگر temp$ (که همون مقدار دریافت شدست) خالی بود و هم در لیست آیتم ضروری(required$) موجود بود اون رو به آرایه missing$ اضافه کن (که بعدا به کاربر هشدار بده که فیلدهای اجباری رو پر نکردی) در غیر اینصورت اگر مثلا tfuser تو لیست متغیرهایی که میخوایم (expected$) هست یه متغیر با همون نام (در اینجا tfuser) بساز و مقدارشو هم مقدار همون آیتم بذار.
همین عملیات برای هر آیتم موجود در متغیر POST اجرا میشه (مثلا tfpass و ... ).

مثال:


<?php
if( !empty($_POST) ):
$required=array('tfpass');
$expected=array('tfuser','tfpass');
foreach ($_POST as $key => $value) {
// assign to temporary variable and strip whitespace if not an array
$temp = is_array($value) ? $value : trim($value);
// if empty and required, add to $missing array
if (empty($temp) && in_array($key, $required)) {
$missing[] = $key;
} elseif (in_array($key, $expected)) {
// otherwise, assign to a variable of the same name as $key
${$key} = $temp;
}
}
print_r( get_defined_vars() );
exit();
endif;
?>

<form id="loginForm" method="post" action="" name="loginForm">
<label for="txtUser">userName</label>
<input type="text" name="tfuser" id="txtUser" />

<label for="txtPass">password</label>
<input type="password" name="tfpass" id="txtPass" />

<input name="submit" type="submit" value="login" />
</form>