PDA

View Full Version : سوال: استفاده از متد POST به جای GET



amin7x
سه شنبه 21 آذر 1391, 19:04 عصر
سلام دوستان

من برای ادامه مطلب مطالب از متد GET اسفاده میکنم ولی وقتی یک ' به ادامه URL اضافه میکنم باگ SQlinjection به من میده ، حالا من به این فکر افتادم که از متد پست استفاده کنم برای همین من یک تکست فیلد ایجاد کردم که قابلیت نوشتن ودیده شدن رو نداره.

من قبلا از این روش استفاده میکردم:



<?php
include_once("config.php");
$select="select * from posts ORDER BY id DESC";
$query=mysql_query($select,$con);
?>
<div class="content">
<?php while($post=mysql_fetch_array($query)){ ?>

<div class="con-title"><?php echo $post['post_title']; ?></div>
<p><?php echo $post['post_content']; ?></p>
<a href="more.php?id=<?php echo $post['id']; ?>"><p class="con-more">ادامه مطلب</p></a>
<?php } ?>



توی صفحه More.php این طوری نمایشش میدادم:


<?php
$id=$_GET['id'];
include_once("config.php");
$select="select * from posts WHERE id='$id'";
$query=mysql_query($select,$con);

?>

<div class="content">
<?php while($post=mysql_fetch_array($query)){ ?>
<div class="con-title"><?php echo $post['post_title']; ?></div>
<p><?php echo $post['post_content']; ?></p>
<?php } ?>


حالا مشکل من اینجاست که چه طور مقداری که درون تکست فیلد است رو به صورت پست به صفحه ادامه مطلب بفرستم از shubmit هم که نمیتونم اسفاده کنم ، پس چکاری رو انجام بدم؟

nsco_nsco
سه شنبه 21 آذر 1391, 19:09 عصر
سلام پست که می خوای کنی اینطوریه":


$نام متغییر دل خواه = $_POST['نام فیلد'];

موفق باشید

Tarragon
سه شنبه 21 آذر 1391, 19:10 عصر
نه داداش بعضی جاها نمی شه از POST استفاده کرد مثلا طرف میاد ادرس رو میده به bookmarks اون وقت چکار می کنی؟
راه حل اساسی اینه که باید از mysql_real_escape_string (http://php.net/manual/en/function.mysql-real-escape-string.php) استفاده کنی.
اگر کمکی خواستی بگو در خدمتم.

nsco_nsco
سه شنبه 21 آذر 1391, 19:11 عصر
اونی که دادمت رو بزار تو این دستور وسابمیت رو بزار بالای صفحت


if(isset($_POST['submit'])) {
اینجا
}

موفق باشید:قلب:

nsco_nsco
سه شنبه 21 آذر 1391, 19:12 عصر
منظورت از بوکمارک و نمیشه استفاده کرد چیه کامل بنویس ممنون

amin7x
سه شنبه 21 آذر 1391, 19:21 عصر
خب با استفاده از کد بالا چه طوری بفهمه که باید به کدوم صفحه باید بره؟

مثلا این تکست فیلدی که قرار ID های من درونش ذخیره بشه:



<?php $id="1"; ?>

<div style=""><input readonly="readonly" disabled="disabled" name="id" type="text" value="<?php echo $id ?>"/></div>


حالا من این مقدار رو چه طوری بدون اسفاده از فرم بفرستم به صفحه More.php ؟

amin7x
سه شنبه 21 آذر 1391, 19:23 عصر
اینم بگم که من از دوتا صفحه استفاده میکنم.

یکی index.php و دیگری more.php.

Tarragon
سه شنبه 21 آذر 1391, 19:27 عصر
سلام
منظورم اینه که کسی آدرس صفحه رو بر میداره تا بده به دوستش یا ذخیره کنه
دفعه بعد که صفحه رو باز می کنه قائدتا پست ها ارسال نمی شه پس به مشکل بر می خورید
شما از همون تابع بالا استفاده کنید بهتره .
موفق باشید.

amin7x
سه شنبه 21 آذر 1391, 19:33 عصر
منتظریم...


خب با استفاده از کد بالا چه طوری بفهمه که باید به کدوم صفحه باید بره؟

مثلا این تکست فیلدی که قرار ID های من درونش ذخیره بشه:



<?php $id="1"; ?>

<div style=""><input readonly="readonly" disabled="disabled" name="id" type="text" value="<?php echo $id ?>"/></div>


حالا من این مقدار رو چه طوری بدون اسفاده از فرم بفرستم به صفحه More.php ؟

ravand
سه شنبه 21 آذر 1391, 22:37 عصر
اگر با get فقط عدد ارسال میکنی از تابع is_numeric برای اعتبارسنجیش استفاده کن. امنیتش خوبه.

2undercover
چهارشنبه 22 آذر 1391, 06:04 صبح
البته یک نکته هست خب طرف میاد همون کوتیشن رو توی تکست باکس وارد می کنه!

mamali-mohammad
چهارشنبه 22 آذر 1391, 08:46 صبح
کارت کلا اشتباه هست !!!
شما باید متد get استفاده کنی و هر خبر id خاص خودشو داره
برای جلوگیری از sqli هم کافیه طبق حرف دوستان از preg_replace استفاده کنی و فقط numberic باشه

amin7x
چهارشنبه 22 آذر 1391, 12:43 عصر
کارت کلا اشتباه هست !!!
شما باید متد get استفاده کنی و هر خبر id خاص خودشو داره
برای جلوگیری از sqli هم کافیه طبق حرف دوستان از preg_replace استفاده کنی و فقط numberic باشه


میشه توی یک کد این تابع رو برای من مثال بزنید؟

ممنون

ravand
چهارشنبه 22 آذر 1391, 13:44 عصر
if((!isset($_POST['page'])) or ($_POST['page']=="") or (!is_numeric($_POST['page']))){
header("Location:HTTP/1.0 404 Not Found");
exit;
}else{
$page = $_POST['page'];
}

_ramin_
چهارشنبه 22 آذر 1391, 23:18 عصر
دوست عزیز توابع mysql بسیار قدیمی هستند و بهتره شما از mysqli یا pdo استفاده کنید