• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
سوال در مورد عبارت با قاعده
#1
با سلام یه سوال خیلی خیلی مبتدی دارم در مورد عبارت با قاعده قراره $_GET['id'] مقداری جز عدد نداشته باشه برای همین عبارت زیر رو نوشتم تا حدودی درسته یعنی فقط با اعداد مطابقت می کنه
ولی مشکلی که هست با اعداد تک رقمی مطابقت نداره یعنی وقتی عدد ۱ وارد می شه "در خواست شما صحیح نیست" چاپ می شه
کد پی‌اچ‌پی:
if(!preg_match("(^[0-9][0-9]{0,}[0-9]$)",$_GET['id'])){
    echo 
"در خواست شما صحیح نیست";
    exit;

ممنون می شم کمک کنید
  پاسخ
تشکر شده توسط :
#2
از $_REQUEST استفاده کن.Wink
کد پی‌اچ‌پی:
if(!preg_match("(^[0-9]+$)",$_REQUEST['id']))
         {
              echo 
"در خواست شما صحیح نیست";
              exit;
         } 
  پاسخ
تشکر شده توسط : parazitt
#3
حالا اینجا منظور اصلی استفاده از GET هست اما اگر از POST می بایست استفاده کرد حواستون باشه به این که REQUEST داده های ارسالی با GET رو هم میاره.
  پاسخ
تشکر شده توسط : alic
#4
فکر کنم بشه از REQUEST_METHOD استفاده کرد.
نظر شما چیست ؟Blush
کد پی‌اچ‌پی:
$method $_SERVER['REQUEST_METHOD'];
$id     intval($_REQUEST['id']);
if(
$id === or $method !== 'GET')
{
   echo 
"در خواست شما صحیح نیست";
   exit;

  پاسخ
تشکر شده توسط :
#5
چرا این طوری نمی‌نویسی؟
کد پی‌اچ‌پی:
if(!preg_match("(^[0-9]+$)",$_GET['id'])){
    echo 
"در خواست شما صحیح نیست";
    exit;

چیزی که شما نوشتی به نظرم معنای منطقی درستی نداره.
  پاسخ
تشکر شده توسط :
#6
GET خیلی از سایت ها پیشنهاد نمیدن .
در مورد intval حتی اگه id محتوای غیر عددی داشته باشه, تنها قسمت عددی رو برمیگردونه .
  پاسخ
تشکر شده توسط :
#7
حالا بحث GET و POST یا REQUEST به کنار
برای اینکه بخوای فقط عدد بگیری می تونی از
کد پی‌اچ‌پی:
<?PHP

$id 
= (int)$_GET['id'];
?>
روش استفاده کنی
قول بهت می دوم غیرقابل نفوذ تر این پیدا نکنی Wink
  پاسخ
تشکر شده توسط :
#8
(۱۳۸۹ مهر ۰۴, ۰۸:۵۵ ب.ظ)oia نوشته: حالا بحث GET و POST یا REQUEST به کنار
برای اینکه بخوای فقط عدد بگیری می تونی از
کد پی‌اچ‌پی:
<?PHP

$id 
= (int)$_GET['id'];
?>
روش استفاده کنی
قول بهت می دوم غیرقابل نفوذ تر این پیدا نکنی Wink

فکر نمی‌کنم این روش درست باشد.
ورودی کاربر باید از جنس عدد باشد.
نه این‌که معادل عددی آن را پیدا کنیم.
  پاسخ
تشکر شده توسط :
#9
اينجا داره چك مي كنه كه اگه غير از عدد ( sql injection ) داد برنامه رو exit كنه
خب وقتي (int) استفاده بشه اگه عدد باشه كه عدد در غير اينطورت صفر مي شه
يعني همه شه مي شه به حاصل اين نتيجه در اين مورد اتكا كرد
يعني حفره ايي ديگه نيست!!!
حالا مي خواد معادل عدد باشه يا جنس عدد Wink
  پاسخ
تشکر شده توسط :
#10
بله.
با این کار error نخواهیم داشت.
ولی آیا اطلاعات منطقی وارد db می‌شوند؟
به نظر من باید بررسی شود که حتما کاربر عدد وارد کرده باشد.
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان