نمایش نتایج 1 تا 25 از 25

نام تاپیک: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

  1. #1
    کاربر دائمی آواتار ravand
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    راوند کاشان
    پست
    3,378

    ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    سلام
    یه برنامه نوشتم که یک مقداری رو به دیتابیس ارسال میکنم بعد اگه بخوام زودتر از 60 ثانیه دوباره مقدار رو ارسال کنم یه پیغام بهم داده میشه و مانع از این کار میشه. عجیب اینجاست که این برنامه توی لوکال هاست کار میکنه ولی روی هاست سایتم کار نمیکنه!!!!!!!!!!!
    <form method="POST" dir="rtl">
    نام <input type="text" name="title"><br>
    نام خانوادگي <input type="text" name="matn"><br>
    <input type="submit" value="ارسال" name="submeted">
    </form>
    <?php
    if(isset($_POST['submeted'])){
    $handle=mysql_connect('localhost','root','');
    if($handle==false){
    die(" نمي تواند ارتباط برقرار كند .\r\n");
    }
    $db=mysql_select_db('time');
    if($db==false){
    die(". نمي تواند به ديتابیسمتصل شود .\r\n");
    }
    $time=time();
    $ip=$_SERVER['REMOTE_ADDR'];
    $sql="SELECT * FROM time";
    mysql_query("SET CHARACTER SET utf8",$handle);
    $result=mysql_query($sql,$handle) or die (mysql_error());
    while ($row=mysql_fetch_array($result)){
    $timee=$row['time'];
    $ipi=$row['ip'];
    $timei=$timee+20;
    }
    if($ipi==$ip && $timei >= $time){
    die("شصت ثانیه ی دیگر تلاش کنید.");
    }
    $title=$_POST['title'];
    $matn=$_POST['matn'];
    mysql_set_charset('utf8',$handle);
    mysql_query("INSERT INTO time (`title`,`matn`,`time`,`ip`) VALUES('$title','$matn','$time','$ip')");
    $num=mysql_affected_rows($handle);
    if($num==1){
    echo "ارسال شد";
    }
    else
    if($num == 0){
    echo "ارسال نشد";
    }
    mysql_close($handle);
    }
    ?>

    راستی روی سایتم که تست میکنم مقادیر به دیتابیس ارسال میشه ولی اون شصت ثانیه انتظار کار نمیکنه.
    متشکرم.

  2. #2

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    به مدیر سرور بگو مقدار timeout رو بیشتر کنه
    مثلا 5 دقیقه

  3. #3
    کاربر دائمی آواتار ravand
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    راوند کاشان
    پست
    3,378

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    نقل قول نوشته شده توسط mamali-mohammad مشاهده تاپیک
    به مدیر سرور بگو مقدار timeout رو بیشتر کنه
    مثلا 5 دقیقه
    متاسفانه سرور رایگان هست.
    ولی خب من دارم برنامه نویسی میکنم چه ربطی به این موضوع داره؟ من میخوام با این برنامه ی ساده این کار رو بکنم. نمیفهمم چرا مدیر سرور باید این کار رو بکنه؟

  4. #4

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    دوست عزیز، اسکریپت شما بعد از 30 ثانیه، با خطای Time-out error مواجه میشه. این دو خط رو ابتدای کدتون بگذارین:

    ignore_user_abort(true);
    set_time_limit(0);

    تا سرور جلوی اجرای اسکریپتتون رو نگیره.

  5. #5
    کاربر دائمی آواتار ravand
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    راوند کاشان
    پست
    3,378

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    تست کردم خطا داد:
    به خاطر این این خط خطا داد:
    set_time_limit(0);

    خطای زیر:
    Warning: set_time_limit() has been disabled for security reasons in 

    وقتی برش داشتم خطایی نداد ولی کارم نکرد.
    من برام عجیبه که چرا کار نمیکنه . خب برنامه ی من مثل این می مونه که بگید اگر 40 بزرگتر از 20 باشه پیغام بده.
    همین. چرا کار نمیکنه؟؟؟

  6. #6

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    عجب سرور باحالیه! set_time_limit رو بخاطر مسائل امنیتی! غیرفعال کرده.

  7. #7
    کاربر دائمی آواتار ravand
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    راوند کاشان
    پست
    3,378

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    راه حل دیگه ای برای انجام این کار وجود نداره؟ من بیام یه دستور دیگه بنویسم؟

  8. #8
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    آذر 1390
    پست
    560

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    سلام.دوست من چرا بجای خواندن تایم از دیتا بیس از کوکی استفاده نمی کنید که کدتون سریع تر و کارتون راحت تر بشه.

  9. #9

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    میگم راوندی جان، وقتش نیست به این نتیجه برسی که هاست رایگان بدرد نمیخوره؟

  10. #10
    کاربر دائمی آواتار ravand
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    راوند کاشان
    پست
    3,378

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    نقل قول نوشته شده توسط Beginner2013 مشاهده تاپیک
    سلام.دوست من چرا بجای خواندن تایم از دیتا بیس از کوکی استفاده نمی کنید که کدتون سریع تر و کارتون راحت تر بشه.
    فکر میکنم اگه هکر مردم آزار باشه کوکی و سشن رو به راحتی جعل میکنه.

    میگم راوندی جان، وقتش نیست به این نتیجه برسی که هاست رایگان بدرد نمیخوره؟
    به نظر شما با این سرور های درپیت کسی دلش میاد پولش رو حروم کنه؟
    یه هاست رایگان آمریکایی گرفتم که سرعتش از نمونه ی پولیش بهتره. من که نیازی به امکانات ندارم چرا برم بیخودی براش پول بدم؟

  11. #11
    کاربر دائمی
    تاریخ عضویت
    آبان 1389
    محل زندگی
    tehran
    سن
    35
    پست
    240

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    سلام
    داداش میشه این هاست رایگان رو معرفی کنید ؟
    تشکر

  12. #12
    کاربر دائمی آواتار tehro0n
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    متغیر!
    پست
    465

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    نقل قول نوشته شده توسط ravand مشاهده تاپیک
    یه هاست رایگان آمریکایی گرفتم که سرعتش از نمونه ی پولیش بهتره. من که نیازی به امکانات ندارم چرا برم بیخودی براش پول بدم؟
    خوب پس این امکانی که الان نداری چی میشه؟
    time() رو 60 ثانیه اضافه کن و بگو خروجی کوچکتر از time باشه
    با سیشن هم امتحان کنی همین مشکل رو داری حتما..

    پس فقط می مونه استفاده از post JQuery که اونجا بیای زمان بگیری و 60 ثانیه رو تعریف کنی.. فقط من تو کدت 20 ثانیه میبینم، نمی دونم 60 چجوری میشه!
    البته با این روش هم قطعا کاربری که بخواد زیر 60 ثانیه ارسال می کنه ولی خوب همین می مونه برات، ازش به خوبی استفاده کن!

  13. #13
    کاربر دائمی آواتار Reza1607
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    يه جايي تو مشهد
    پست
    969

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    من الان دقيقا نفهميدم كه شما مي خواين چيكار كنيد ولي اگه مي خواين كه هر كاربر بعد از ارسال يك پست نتونه تا 60 ثانيه بعد ارسالي انجام بده مي تونيد از روش زير استفاده كنيد كه خيلي هم راحت تره


    if(isset($_SESSION['time'])){
    if($_SESSION['time']+60<=time()){
    echo 'شما بايد بعد از هر ارسال 60 ثانيه منتظر بمانيد.';
    exit();
    }
    }
    mysql_connect('localhost','root','') or die('Can not Connect to Database !!!!');
    mysql_select_db('time') or die('Can not Select Database !!!');
    mysql_query('SET NAME `utf8`);

    if(mysql_query("INSERT INTO time(`title`,`matn`,`time`,`ip`) VALUES('$_POST[title]','$_POST[matn]','".time()."','$_SERVER[REMOTE_ADD]')") && mysql_affected_rows()===1)
    {
    echo 'ثبت شد.';
    $_SESSION['time']=time();
    }

  14. #14

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    راوندی جان، هاستت یک set_time_limit ساده بهت اجازه نمیده و میگه بخاطر مسائل امنیتی! (خداییش ربطش رو با امنیت نفهمیدم) این ویژگی غیرفعال شده. حالا این هاست چی براش میمونه که میگی از پولیش بهتره؟ خودمونیم اگه یک اسکریپت حجیم و سنگین داشتی که بیشتر از 30 ثانیه زمان برای اجرا لازم داشته باشه، چطوری میخوای روی این هاست ازش استفاده کنی؟

  15. #15

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    برنامه شما مشکل منطقی داره! شاید همچنین کوئری کمکتون کنه با توجه به هدف:

    SELECT MAX(`time`) FROM `time` WHERE `ip`='$ip'


    ربطی به محدودیت زمان اجرا نداره، کار طبیعی هست که تو یه هاستینگ رایگان (حتی ارزان قیمت) این محدودیت وجود داشته باشه و ربطش به امنیت هم اینه که لود سرور به خاطر درگیر موندن پروسس های وب سرور (و احتمالا خود php در صورتی که cgi اجرا میشه) تا حد ممکن بالا نره!

  16. #16
    کاربر دائمی آواتار ravand
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    راوند کاشان
    پست
    3,378

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    دستور سشن رو که آقا رضا داد تست کردم اینم مثل قبلی فایده ای نداشت.
    من درست نگرفتم چرا و کجا باید از این دستور استفاده کنم؟
    SELECT MAX(`time`) FROM `time` WHERE `ip`='$ip'

  17. #17
    کاربر دائمی آواتار tehro0n
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    متغیر!
    پست
    465

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    شاید منظورش این بود که این کد رو بنویسی!
    <form method="POST" dir="rtl">
    نام <input type="text" name="title">
    نام خانوادگي <input type="text" name="matn">
    <input type="submit" value="ارسال" name="submeted">
    </form>
    <?php
    if(isset($_POST['submeted'])){
    $handle=mysql_connect('localhost','root','');
    if($handle==false){
    die(" نمي تواند ارتباط برقرار كند .\r\n");
    }
    $db=mysql_select_db('time');
    if($db==false){
    die(". نمي تواند به ديتابیسمتصل شود .\r\n");
    }
    $time=time();
    $ip=$_SERVER['REMOTE_ADDR'];
    $sql="SELECT * FROM time WHERE time <= {$time}+60 AND {$ip} == ip";
    mysql_query("SET CHARACTER SET utf8",$handle);
    $result=mysql_query($sql,$handle) or die (mysql_error());
    if(mysql_num_rows($result)){
    die("شصت ثانیه ی دیگر تلاش کنید.");
    }
    $title=$_POST['title'];
    $matn=$_POST['matn'];
    mysql_set_charset('utf8',$handle);
    mysql_query("INSERT INTO time (`title`,`matn`,`time`,`ip`) VALUES('$title','$matn','$time','$ip')");
    $num=mysql_affected_rows($handle);
    if($num==1){
    echo "ارسال شد";
    }
    else
    if($num == 0){
    echo "ارسال نشد";
    }
    mysql_close($handle);
    }
    ?>

    چقدر شبیه بود به هم

  18. #18
    کاربر دائمی آواتار ravand
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    راوند کاشان
    پست
    3,378

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    این خط کدی که شما نوشتید مشکل داره بهتر بود قبلش یه چکی میکردید:
    SELECT * FROM time WHERE time <= {$time}+60 AND {$ip} == ip

  19. #19
    کاربر دائمی آواتار tehro0n
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    متغیر!
    پست
    465

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    نقل قول نوشته شده توسط ravand مشاهده تاپیک
    این خط کدی که شما نوشتید مشکل داره بهتر بود قبلش یه چکی میکردید:
    SELECT * FROM time WHERE time <= {$time}+60 AND {$ip} == ip
    درست می فرمایید، == رو به = تبدیل کن، البته دیگه این چیزا چک کردن نداره :| بخوام دیتا بسازم و بیام تست کنم اووووووووووووووووه

  20. #20
    کاربر دائمی آواتار ravand
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    راوند کاشان
    پست
    3,378

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    درست می فرمایید، == رو به = تبدیل کن، البته دیگه این چیزا چک کردن نداره :| بخوام دیتا بسازم و بیام تست کنم اووووووووووووووووه
    این کاری هم که شما میگفی کردم چند تا راه دیگه ام رفتم فایده ای نداشت این کد شما از لحاظ تئوریشم ناکارامده.چه برسه بخواد در عمل جواب بده.
    من خودم توی برنامه ی wamp یه دیتابیس ساختم که این کدها رو راحت تست میکنم فکر نمیکنم که تست کردنش زیاد وقتی ببره. همیشه مطالب رو تست میکنم بعد میذارم اینجا اتاق چت نیست . بالاخره باید جواب هامون صحیح باشه. خیلی معذرت میخوام جسارته . نباید که بیایم اینجا یه چیزی بپرونیم که!

  21. #21
    کاربر دائمی آواتار Reza1607
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    يه جايي تو مشهد
    پست
    969

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    نقل قول نوشته شده توسط ravand مشاهده تاپیک
    دستور سشن رو که آقا رضا داد تست کردم اینم مثل قبلی فایده ای نداشت.
    من درست نگرفتم چرا و کجا باید از این دستور استفاده کنم؟
    SELECT MAX(`time`) FROM `time` WHERE `ip`='$ip'
    جهت شرط رو اشتباه گذاشته بودم (از اين سوتي ها تا دلتون بخواد ميدم)اون خط شرط رو بردارين و اين رو به جاش بذاريد

    if(($_SESSION['time']+60)>=time()){

  22. #22
    کاربر دائمی آواتار ravand
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    راوند کاشان
    پست
    3,378

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    الهی من قوربونت برم رضا جون برنامه داره کار میکنه نمیدونم دارم خواب میبینم
    داشتم کم کم ناامید میشدم. راستی راستی چرا وقتی زمان رو توی دیتابیس ذخیره میکردم جواب نمیداد ؟ حالا که توی سشن ذخیره کردم جواب میده؟
    در هر حال یه دنیا ممنون. برنامه ات معجزه کرد

  23. #23
    کاربر دائمی آواتار Reza1607
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    يه جايي تو مشهد
    پست
    969

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    نقل قول نوشته شده توسط ravand مشاهده تاپیک
    راستی راستی چرا وقتی زمان رو توی دیتابیس ذخیره میکردم جواب نمیداد ؟ حالا که توی سشن ذخیره کردم جواب میده؟
    خواهش مي كنم خوشحالم كه تونستم كمكتون بكنم
    كلا منطق برنامه شما براي استفاده از ديتابيس اشتباه بود

    mysql_connect('localhost','root','') or die('Can not Connect to Database !!!!');
    mysql_select_db('time') or die('Can not Select Database !!!');
    mysql_query('SET NAME `utf8`');
    $result=mysql_query("SELECT max(`time`) `max_time` FROM `time` WHERE `ip`='$_SERVER[REMOTE_ADD]'");
    if(mysql_num_rows($result)===1){
    $time=mysql_fetch_assoc($result);
    if($time['max_time']+60>=time()){
    echo 'شما بايد بعد از هر ارسال 60 ثانيه منتظر بمانيد.';
    exit();
    }
    }

    if(mysql_query("INSERT INTO time(`title`,`matn`,`time`,`ip`) VALUES('$_POST[title]','$_POST[matn]','".time()."','$_SERVER[REMOTE_ADD]')") && mysql_affected_rows()===1)
    {
    echo 'Save';
    $_SESSION['time']=time();
    }


    البته دوستان اين روش رو قبلا پيشنهاد داده بودن

  24. #24
    کاربر دائمی آواتار tehro0n
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    متغیر!
    پست
    465

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    نقل قول نوشته شده توسط ravand مشاهده تاپیک
    این کاری هم که شما میگفی کردم چند تا راه دیگه ام رفتم فایده ای نداشت این کد شما از لحاظ تئوریشم ناکارامده.چه برسه بخواد در عمل جواب بده.
    من خودم توی برنامه ی wamp یه دیتابیس ساختم که این کدها رو راحت تست میکنم فکر نمیکنم که تست کردنش زیاد وقتی ببره. همیشه مطالب رو تست میکنم بعد میذارم اینجا اتاق چت نیست . بالاخره باید جواب هامون صحیح باشه. خیلی معذرت میخوام جسارته . نباید که بیایم اینجا یه چیزی بپرونیم که!
    این آخه یه خط ساده بود که من هم انقدر سوتی دادم، آخر شب بود دیگه
    شما اون خط رو بردار به جاش این رو بگذار، زمان رو هم جابه جا گفتم.. اگه هم کمی فکر کنی میفهمی که قرار بود بگم اون آی پی هایی که زمانشون جزو بلاک شده هاست و آی پی تکراری هستند رو نمایش بده، حالا بعدش اگه چنین رکوردی وجود داشت اون رو die کن در غیر این صورت یعنی این آی پی تو 60 ثانیه چند رکورد نداده!
    سایت شما را نمی دونم، اما من که سرویس دهنده دارم سعی می کنم انقدر با RAM ام بازی نکنم و جاهای دیگه ازاش استفاده کنم، منظورم ساخت و حذف session سر هر بازدیدکننده است! (خیلی بده)

    و در نهایت فکر کنم راه شما اصلا منطقی نبوده که برای هر بازدید میای اون تک نفر رو تو while میندازی! بعد که کوئری گرفتی می گی خوب دیگه حالا die.. این هم از کد:
    SELECT * FROM time WHERE time+60 >= {$time} AND {$ip} = ip

  25. #25
    کاربر دائمی آواتار ravand
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    راوند کاشان
    پست
    3,378

    نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی

    آقا رضا من این روش دیتابیس هم که دادید رو تست کردم ولی جواب نداد. بیخیال من از همون سشن استفاده میکنم . دیگه حال ندارم بیش از این این مبحث رو کشش بدم

تاپیک های مشابه

  1. پاسخ: 2
    آخرین پست: جمعه 12 خرداد 1391, 09:08 صبح
  2. سوال: چطور می تونم بعد از کلیک کردن کاربر، ارسال فرم رو 60 ثانیه به تاخیر بندازم؟
    نوشته شده توسط i-php-i در بخش JavaScript و Framework های مبتنی بر آن
    پاسخ: 2
    آخرین پست: سه شنبه 01 شهریور 1390, 10:11 صبح
  3. ارسال مقدار از گرید ویو به صفحه بعد
    نوشته شده توسط sajjad1365 در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: شنبه 08 خرداد 1389, 01:19 صبح
  4. ارسال مقدار از دیتابیس به تکست باکس
    نوشته شده توسط elham.net در بخش PHP
    پاسخ: 1
    آخرین پست: پنج شنبه 21 آذر 1387, 23:39 عصر
  5. نحوه ارسال مقدار dropDownText به صفحه بعد
    نوشته شده توسط mahsa_kb در بخش طراحی وب (Web Design)
    پاسخ: 1
    آخرین پست: یک شنبه 27 خرداد 1386, 09:08 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •