• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
عدم تغییر تصویر کپچا بدون رفرش صفحه
#1
سلام .
ما این کد رو مینویسیم که از کش شدن تصویر کپچا جلوگیری کنه :
کد پی‌اچ‌پی:
<img src="captcha/captcha.php?<?php echo microtime(); ?>" /> 

تو کدایگنایتر به چه شکل باید بنویسم ؟
با این که کش رو فعال نکردم اما فقط با رفرش صفحه کپچا تغییر میکنه .
در کنترلر از این استفاده میکنم :
کد پی‌اچ‌پی:
$this->create_cap(); 

که create_cap ، استفاده از helper کدایگنایتر هست :
کد پی‌اچ‌پی:
public function create_cap()
{
    
$vals = array(
        
'word' => rand(11111,99999),
        
'img_path' => 'main/captcha/',
        
'img_url' => 'main/captcha/',
        
'font_path' => './path/to/fonts/texb.ttf',
        
'img_width' => '150',
        
'img_height' => 30,
        
'expiration' => 300
        
);
    
        
$cap create_captcha($vals);
            
        
$data['cap_name'] = $cap['time'];
        
$data['cap_word'] = $cap['word'];
        
$this->session->set_userdata('sess_cap',$data['cap_word']);
        return 
$data;

و این هم در قسمت view:
کد پی‌اچ‌پی:
<img src="<?php echo base_url(); ?>main/captcha/<?php echo $cap_name;?>.jpg"width="90%" height="40" id="captcha"/> 

microtime رو کجا بزارم ؟
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :
#2
<img src="<?php echo base_url(); ?>main/captcha/<?php echo $cap_name;?>.jpg<?php echo "?".time(); ?>"; width="90%" height="40" id="captcha"/>
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : undefined pary_daryayi
#3
نباید این اتفاق بیوفته.
کد:
$cap['time']
هر سری تغییر میکنه که اشاره به تصویر جدیدی با اون نام در مسیر داده شد(مثلا main/captcha) داره. پس نیازی به microtime نیست.
کد زیرُ از سورس پروژم بیرون کشیدم، بدون هیچ مشکلی کار میکنه.

controller
کد پی‌اچ‌پی:
public function re_cap()
    {
        
$this->load->helper(array('url''captcha'));

        
$vals = array(
            
'img_path' => 'static/',
            
'img_url' => base_url().'static/',
        );
        
$captcha create_captcha($vals);
        echo 
$captcha['time'];
    } 

view
کد:
<script type="text/javascript">
    $(document).ready(function(e) {
        $('#sub').click(function(){
            $.post('<?php echo base_url().'index.php/resources/re_cap' ?>',{},function(data){
                url='<?php echo base_url().'static/' ?>'+data+'.jpg';
                $('#img').attr('src',url);
            })
        });
    });
    </script>
<img src="<?php echo base_url().'static/'.$time.'.jpg' ?>" width="150" height="30" style="border:0;" id="img"/>
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : pary_daryayi
#4
آقا احسان مگه شما هم CI کار میکنید ؟
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :
#5
تاریخ عضویتشو نیگا
احسان همه کاره است
بار بخوره مجلس هم گرم میکنه اساسی Big Grin
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : undefined
#6
نقل قول:آقا احسان مگه شما هم CI کار میکنید؟
بله، منتها هیچ پروژه تجاری باهاش انجام ندادم.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : pary_daryayi
#7
باز هم باید رفرش کنم که کپچا عوض بشه ،
یک نفر گفت چون از اینترنت مخابرات استفاده میکنی کش اتفاق میفته ، میگفت من که سایت رو تست میکنم کپچا هر بار عوض میشه ...

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

کد پی‌اچ‌پی:
if(file_exists(base_url()."main/captcha/".$this->session->userdata['sess_cap_name'].'.jpg')){

 
$this->session->unset_userdata('sess_cap');// word cap
 
unlink(base_url()."main/captcha/".$this->session->userdata['sess_cap_name'].'.jpg');
}else{
                
    echo 
'no<br/>';
    echo 
base_url()."main/captcha/".$this->session->userdata['sess_cap_name'].'.jpg';
    echo 
'<img src="',base_url()."main/captcha/".$this->session->userdata['sess_cap_name'].'.jpg','"/>';


ولی با اینکه نام تولید شده در مسیر وجود داره ، میگه وجود نداره . قسمت else اجرا میشه و همونطور که میبینید در else هم مسیر رو و هم تصویر رو چاپ میکنه . اگر وجود نداره چطور تصویر رو چاپ میکنه ؟HuhHuh
نکته ای داره استفاده از file_exists ؟

ویرایش :
پیدا کردم دوستان . نکته اش اینکه در file_exixt و unlink نباید از base_url استفاده بشه :
درستش اینه :
کد پی‌اچ‌پی:
if(file_exists("./main/captcha/".$this->session->userdata['sess_cap_name'].'.jpg')){
 
unlink("./main/captcha/".$this->session->userdata['sess_cap_name'].'.jpg');

آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :
#8
یه پیشنهاد دارم
چرا خودت یه کپچا نمیسازی؟
این داستان کش کردن که ربطی به مخابرات داشته باشه رو من نمیدونم اما اینجارو نیگا ببین اینم
همون مشکل رو داره ؟
http://demo.hastishop.ir/buy/54#buy

روی عکس کپچا واسه رلود کلیک کن
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : undefined pary_daryayi
#9
نقل قول:یک نفر گفت چون از اینترنت مخابرات استفاده میکنی کش اتفاق میفته ، میگفت من که سایت رو تست میکنم کپچا هر بار عوض میشه ...
روی لوکال چی؟ تست کردیش؟ در این صورت نباید روی لوکال مشکلی داشته باشه.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : pary_daryayi
#10
(۱۳۹۳ خرداد ۲۷, ۰۳:۱۸ ب.ظ)Ehsan نوشته:
نقل قول:یک نفر گفت چون از اینترنت مخابرات استفاده میکنی کش اتفاق میفته ، میگفت من که سایت رو تست میکنم کپچا هر بار عوض میشه ...
روی لوکال چی؟ تست کردیش؟ در این صورت نباید روی لوکال مشکلی داشته باشه.

روی لوکال مشکلی نداره

(۱۳۹۳ خرداد ۲۷, ۱۱:۱۲ ق.ظ)Reza نوشته: یه پیشنهاد دارم
چرا خودت یه کپچا نمیسازی؟
این داستان کش کردن که ربطی به مخابرات داشته باشه رو من نمیدونم اما اینجارو نیگا ببین اینم
همون مشکل رو داره ؟
http://demo.hastishop.ir/buy/54#buy

روی عکس کپچا واسه رلود کلیک کن
هر سه یا چهار بار یک بار همون تصویر قبلی تکرار میشه ،
پس مشکل از کد نباید باشه ، اینهمه وقت گذاشتم ....Confused

من تصویر رو با آجاکس صدا زدم و فعلا نتیجه داده :
کد آجاکس :
کد:
$(document).ready(function(){

    getcaptcha();
  
    function getcaptcha(){
    $.ajax({
         type:'GET',
         url:base_url+"site/cap/new_cap",
         success: function(data){
             $('#show-cap').html(data)

             }
                        
        });        
    
    }
    
    $("#refresh-cap").click(function()
    {
        getcaptcha();
    });
        
});

view:
کد پی‌اچ‌پی:
<div id="show-cap" style="display:inline"></div>
<
img src="<?php echo base_url(); ?>main/images/Refresh.png" width="25" style="cursor:pointer" id="refresh-cap"/> 

controller :
کد پی‌اچ‌پی:
function new_cap() {
   
          
$vals = array(
            
'word' => rand(11111,99999),
            
'img_path' => 'main/captcha/',
            
'img_url' => 'main/captcha/',
            
'font_path' => './path/to/fonts/texb.ttf',
            
'img_width' => '150',
            
'img_height' => 30,
            
'expiration' => 3600
            
);
        
        
$cap create_captcha($vals);
        
$cap_name $cap['time'];
        
$cap_word $cap['word'];
        
$this->session->set_userdata('sess_cap',$cap_word);
        
$this->session->set_userdata('sess_cap_name',$cap_name);
        echo 
'<img src="',base_url(),'main/captcha/'$cap_name,'.jpg?',microtime(),'"  /> ';
    } 

فقط الان یک مشکل وجود داره :
تو لوکال ، دکمه ی رفرش کار میکنه ، اما روی وب هیچ تغییری نمیکنه .
جالبه اگه alert از data بگیرم اسم عکس رو نشون میده .
این خطا رو هم تو کنسول دارم :
کد:
event.returnValue is deprecated. Please use the standard event.preventDefault() instead.
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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