-
ارسال مقدار به دیتابیس 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);
}
?>
راستی روی سایتم که تست میکنم مقادیر به دیتابیس ارسال میشه ولی اون شصت ثانیه انتظار کار نمیکنه.
متشکرم.
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
به مدیر سرور بگو مقدار timeout رو بیشتر کنه
مثلا 5 دقیقه
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
نقل قول:
نوشته شده توسط
mamali-mohammad
به مدیر سرور بگو مقدار timeout رو بیشتر کنه
مثلا 5 دقیقه
متاسفانه سرور رایگان هست.
ولی خب من دارم برنامه نویسی میکنم چه ربطی به این موضوع داره؟ من میخوام با این برنامه ی ساده این کار رو بکنم. نمیفهمم چرا مدیر سرور باید این کار رو بکنه؟
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
دوست عزیز، اسکریپت شما بعد از 30 ثانیه، با خطای Time-out error مواجه میشه. این دو خط رو ابتدای کدتون بگذارین:
ignore_user_abort(true);
set_time_limit(0);
تا سرور جلوی اجرای اسکریپتتون رو نگیره.
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
تست کردم خطا داد:
به خاطر این این خط خطا داد:
set_time_limit(0);
خطای زیر:
Warning: set_time_limit() has been disabled for security reasons in
وقتی برش داشتم خطایی نداد ولی کارم نکرد.
من برام عجیبه که چرا کار نمیکنه . خب برنامه ی من مثل این می مونه که بگید اگر 40 بزرگتر از 20 باشه پیغام بده.
همین. چرا کار نمیکنه؟؟؟
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
عجب سرور باحالیه! set_time_limit رو بخاطر مسائل امنیتی! غیرفعال کرده.
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
راه حل دیگه ای برای انجام این کار وجود نداره؟ من بیام یه دستور دیگه بنویسم؟ :متفکر:
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
سلام.دوست من چرا بجای خواندن تایم از دیتا بیس از کوکی استفاده نمی کنید که کدتون سریع تر و کارتون راحت تر بشه.
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
میگم راوندی جان، وقتش نیست به این نتیجه برسی که هاست رایگان بدرد نمیخوره؟
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
نقل قول:
نوشته شده توسط
Beginner2013
سلام.دوست من چرا بجای خواندن تایم از دیتا بیس از کوکی استفاده نمی کنید که کدتون سریع تر و کارتون راحت تر بشه.
فکر میکنم اگه هکر مردم آزار باشه کوکی و سشن رو به راحتی جعل میکنه.
نقل قول:
میگم راوندی جان، وقتش نیست به این نتیجه برسی که هاست رایگان بدرد نمیخوره؟
به نظر شما با این سرور های درپیت کسی دلش میاد پولش رو حروم کنه؟ :لبخند:
یه هاست رایگان آمریکایی گرفتم که سرعتش از نمونه ی پولیش بهتره. من که نیازی به امکانات ندارم چرا برم بیخودی براش پول بدم؟ :لبخند:
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
سلام
داداش میشه این هاست رایگان رو معرفی کنید ؟
تشکر
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
نقل قول:
نوشته شده توسط
ravand
یه هاست رایگان آمریکایی گرفتم که سرعتش از نمونه ی پولیش بهتره. من که نیازی به امکانات ندارم چرا برم بیخودی براش پول بدم؟ :لبخند:
خوب پس این امکانی که الان نداری چی میشه؟
time() رو 60 ثانیه اضافه کن و بگو خروجی کوچکتر از time باشه :لبخند:
با سیشن هم امتحان کنی همین مشکل رو داری حتما..
پس فقط می مونه استفاده از post JQuery که اونجا بیای زمان بگیری و 60 ثانیه رو تعریف کنی.. فقط من تو کدت 20 ثانیه میبینم، نمی دونم 60 چجوری میشه!
البته با این روش هم قطعا کاربری که بخواد زیر 60 ثانیه ارسال می کنه ولی خوب همین می مونه برات، ازش به خوبی استفاده کن!
-
نقل قول: ارسال مقدار به دیتابیس 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();
}
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
راوندی جان، هاستت یک set_time_limit ساده بهت اجازه نمیده و میگه بخاطر مسائل امنیتی! (خداییش ربطش رو با امنیت نفهمیدم) این ویژگی غیرفعال شده. حالا این هاست چی براش میمونه که میگی از پولیش بهتره؟ خودمونیم اگه یک اسکریپت حجیم و سنگین داشتی که بیشتر از 30 ثانیه زمان برای اجرا لازم داشته باشه، چطوری میخوای روی این هاست ازش استفاده کنی؟
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
برنامه شما مشکل منطقی داره! شاید همچنین کوئری کمکتون کنه با توجه به هدف:
SELECT MAX(`time`) FROM `time` WHERE `ip`='$ip'
ربطی به محدودیت زمان اجرا نداره، کار طبیعی هست که تو یه هاستینگ رایگان (حتی ارزان قیمت) این محدودیت وجود داشته باشه و ربطش به امنیت هم اینه که لود سرور به خاطر درگیر موندن پروسس های وب سرور (و احتمالا خود php در صورتی که cgi اجرا میشه) تا حد ممکن بالا نره!
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
دستور سشن رو که آقا رضا داد تست کردم اینم مثل قبلی فایده ای نداشت.
من درست نگرفتم چرا و کجا باید از این دستور استفاده کنم؟
SELECT MAX(`time`) FROM `time` WHERE `ip`='$ip'
-
نقل قول: ارسال مقدار به دیتابیس 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);
}
?>
چقدر شبیه بود به هم :لبخند:
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
این خط کدی که شما نوشتید مشکل داره بهتر بود قبلش یه چکی میکردید:
SELECT * FROM time WHERE time <= {$time}+60 AND {$ip} == ip
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
نقل قول:
نوشته شده توسط
ravand
این خط کدی که شما نوشتید مشکل داره بهتر بود قبلش یه چکی میکردید:
SELECT * FROM time WHERE time <= {$time}+60 AND {$ip} == ip
درست می فرمایید، == رو به = تبدیل کن، البته دیگه این چیزا چک کردن نداره :| بخوام دیتا بسازم و بیام تست کنم اووووووووووووووووه
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
نقل قول:
درست می فرمایید، == رو به = تبدیل کن، البته دیگه این چیزا چک کردن نداره :| بخوام دیتا بسازم و بیام تست کنم اووووووووووووووووه
این کاری هم که شما میگفی کردم چند تا راه دیگه ام رفتم فایده ای نداشت این کد شما از لحاظ تئوریشم ناکارامده.چه برسه بخواد در عمل جواب بده.
من خودم توی برنامه ی wamp یه دیتابیس ساختم که این کدها رو راحت تست میکنم فکر نمیکنم که تست کردنش زیاد وقتی ببره. همیشه مطالب رو تست میکنم بعد میذارم اینجا اتاق چت نیست . بالاخره باید جواب هامون صحیح باشه. خیلی معذرت میخوام جسارته . نباید که بیایم اینجا یه چیزی بپرونیم که! :لبخند:
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
نقل قول:
نوشته شده توسط
ravand
دستور سشن رو که آقا رضا داد تست کردم اینم مثل قبلی فایده ای نداشت.
من درست نگرفتم چرا و کجا باید از این دستور استفاده کنم؟
SELECT MAX(`time`) FROM `time` WHERE `ip`='$ip'
جهت شرط رو اشتباه گذاشته بودم (از اين سوتي ها تا دلتون بخواد ميدم)اون خط شرط رو بردارين و اين رو به جاش بذاريد
if(($_SESSION['time']+60)>=time()){
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
الهی من قوربونت برم رضا جون برنامه داره کار میکنه نمیدونم دارم خواب میبینم :قهقهه:
داشتم کم کم ناامید میشدم. راستی راستی چرا وقتی زمان رو توی دیتابیس ذخیره میکردم جواب نمیداد ؟ حالا که توی سشن ذخیره کردم جواب میده؟ :متعجب:
در هر حال یه دنیا ممنون. برنامه ات معجزه کرد :تشویق:
-
نقل قول: ارسال مقدار به دیتابیس 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();
}
البته دوستان اين روش رو قبلا پيشنهاد داده بودن
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
نقل قول:
نوشته شده توسط
ravand
این کاری هم که شما میگفی کردم چند تا راه دیگه ام رفتم فایده ای نداشت این کد شما از لحاظ تئوریشم ناکارامده.چه برسه بخواد در عمل جواب بده.
من خودم توی برنامه ی wamp یه دیتابیس ساختم که این کدها رو راحت تست میکنم فکر نمیکنم که تست کردنش زیاد وقتی ببره. همیشه مطالب رو تست میکنم بعد میذارم اینجا اتاق چت نیست . بالاخره باید جواب هامون صحیح باشه. خیلی معذرت میخوام جسارته . نباید که بیایم اینجا یه چیزی بپرونیم که! :لبخند:
این آخه یه خط ساده بود که من هم انقدر سوتی دادم، آخر شب بود دیگه :لبخند:
شما اون خط رو بردار به جاش این رو بگذار، زمان رو هم جابه جا گفتم.. اگه هم کمی فکر کنی میفهمی که قرار بود بگم اون آی پی هایی که زمانشون جزو بلاک شده هاست و آی پی تکراری هستند رو نمایش بده، حالا بعدش اگه چنین رکوردی وجود داشت اون رو die کن در غیر این صورت یعنی این آی پی تو 60 ثانیه چند رکورد نداده!
سایت شما را نمی دونم، اما من که سرویس دهنده دارم سعی می کنم انقدر با RAM ام بازی نکنم و جاهای دیگه ازاش استفاده کنم، منظورم ساخت و حذف session سر هر بازدیدکننده است! (خیلی بده)
و در نهایت فکر کنم راه شما اصلا منطقی نبوده که برای هر بازدید میای اون تک نفر رو تو while میندازی! بعد که کوئری گرفتی می گی خوب دیگه حالا die.. این هم از کد:
SELECT * FROM time WHERE time+60 >= {$time} AND {$ip} = ip
-
نقل قول: ارسال مقدار به دیتابیس 60 ثانیه بعد از ارسال قبلی
آقا رضا من این روش دیتابیس هم که دادید رو تست کردم ولی جواب نداد. بیخیال من از همون سشن استفاده میکنم . دیگه حال ندارم بیش از این این مبحث رو کشش بدم :لبخند: