Есть вопрос по JavaScript+cookie!

Discussion in 'PHP' started by DesignerMix, 11 May 2007.

  1. DesignerMix

    DesignerMix Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    35
    Likes Received:
    11
    Reputations:
    5
    Вот мой скрипт:

    PHP:
    function getCookieVal (offset)
    {
    var 
    endstr document.cookie.indexOf (";"offset);
    if (
    endstr == -1endstr document.cookie.length;
    return 
    unescape(document.cookie.substring(offsetendstr));
    }

    function 
    GetCookie (name)
    {
    var 
    arg name "=";
    var 
    alen arg.length;
    var 
    clen document.cookie.length;
    var 
    0;
    while (
    clen)
        {
        var 
    alen;
        if (
    document.cookie.substring(ij) == arg) return getCookieVal (j);
        
    document.cookie.indexOf(" "i) + 1;
        if (
    == 0) break;
        }
    return 
    null;
    }

    var 
    currentQuest GetCookie('currentQuest');
    if (
    currentQuest == "1"

    {
    counter();}

    function 
    counter()
    {
    var 
    currentQuest1 '1';
    pathname location.pathname;
    myDomain pathname.substring(0,pathname.lastIndexOf('/')) +'/';
    var 
    largeExpDate = new Date ();
    largeExpDate.setTime(largeExpDate.getTime() + (24 45 45));
    SetCookie('currentQuest1',currentQuest1,largeExpDate,myDomain);
    function 
    SetCookie (namevalue){ var argv SetCookie.arguments;
    var 
    argc SetCookie.arguments.length;
    var 
    expires = (argc 2) ? argv[2] : null;
    var 
    path = (argc 3) ? argv[3] : null;
    var 
    domain = (argc 4) ? argv[4] : null;
    var 
    secure = (argc 5) ? argv[5] : false;
    document.cookie name "=" escape (value) + ((expires == null) ? "" : ("; expires=" expires.toGMTString())) + ((path == null) ? "" : ("; path=" path)) + ((domain == null) ? "" : ("; domain=" domain)) + ((secure == true) ? "; secure" ""); }
    }

    var 
    currentQuest1 GetCookie('currentQuest1');
    if (
    currentQuest1 == "1"

    {
    counter();}

    function 
    counter()
    {
    var 
    test1 '1';
    pathname location.pathname;
    myDomain pathname.substring(0,pathname.lastIndexOf('/')) +'/';
    var 
    largeExpDate = new Date ();
    largeExpDate.setTime(largeExpDate.getTime() + (24 45 45));
    SetCookie('test1',test1,largeExpDate,myDomain);
    function 
    SetCookie (namevalue){ var argv SetCookie.arguments;
    var 
    argc SetCookie.arguments.length;
    var 
    expires = (argc 2) ? argv[2] : null;
    var 
    path = (argc 3) ? argv[3] : null;
    var 
    domain = (argc 4) ? argv[4] : null;
    var 
    secure = (argc 5) ? argv[5] : false;
    document.cookie name "=" escape (value) + ((expires == null) ? "" : ("; expires=" expires.toGMTString())) + ((path == null) ? "" : ("; path=" path)) + ((domain == null) ? "" : ("; domain=" domain)) + ((secure == true) ? "; secure" ""); }
    }

    var 
    test1 GetCookie('test1');
    if (
    test1 == "1"

    document.location.href="www.antichat.ru";
    Поясню что оне должен делать: Во первых должен проверить наличие кука currentQuest , если он есть и равен '1' то создать кук currentQuest1 равный '1' , затем проверяем наличие кука currentQuest1 равного '1' и при этом условии создаём кук test1 и задаём ему значение '1' , и наконец проверяем наличие кука test1 равного '1', если он есть то редиректим юзера на нуюную нам страницу.

    Всё бы хорошо, но в скрипте какая-то ошибка и он не работает, я просто не особо смыслю в JavaScript и поэтому когда я собирал его по кусочкам наверняка запорол какой-нить из них. Кто может ПОМОГИТЕ!
     
  2. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    с функциями у тебя все нормально, только там напутано того рот. Сначала ты вызываешь функцию, а потом объвляешь... так нельзя. сначала объвить потом вызывать. Так еще со скобками косяки и в логике тоже. Короче много где накосячил. Вот работающий код:
    PHP:
    <script language="JavaScript">
    function 
    getCookieVal (offset

    var 
    endstr document.cookie.indexOf (";"offset); 
    if (
    endstr == -1endstr document.cookie.length
    return 
    unescape(document.cookie.substring(offsetendstr)); 


    function 
    GetCookie (name

    var 
    arg name "="
    var 
    alen arg.length
    var 
    clen document.cookie.length
    var 
    0
    while (
    clen
        { 
        var 
    alen
        if (
    document.cookie.substring(ij) == arg) return getCookieVal (j); 
        
    document.cookie.indexOf(" "i) + 1
        if (
    == 0) break; 
        } 
    return 
    null


    function 
    SetCookie (namevalue)

    var 
    argv SetCookie.arguments
    var 
    argc SetCookie.arguments.length
    var 
    expires = (argc 2) ? argv[2] : null
    var 
    path = (argc 3) ? argv[3] : null
    var 
    domain = (argc 4) ? argv[4] : null
    var 
    secure = (argc 5) ? argv[5] : false
    document.cookie name "=" escape (value) + ((expires == null) ? "" : ("; expires=" expires.toGMTString())) + ((path == null) ? "" : ("; path=" path)) + ((domain == null) ? "" : ("; domain=" domain)) + ((secure == true) ? "; secure" ""); 


    function 
    counter() 

    var 
    currentQuest1 '1'
    var 
    largeExpDate = new Date (); 
    largeExpDate.setTime(largeExpDate.getTime() + (24 45 45)); 
    SetCookie('currentQuest1',currentQuest1); 
    }






    var 
    currentQuest=GetCookie('currentQuest');
    if(
    currentQuest=="1")SetCookie('currentQuest1',"1");


    var 
    test1 GetCookie('test1'); 
    if (
    test1 == "1")  document.location="http://antichat.ru";
    </script>
     
    2 people like this.
  3. DesignerMix

    DesignerMix Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    35
    Likes Received:
    11
    Reputations:
    5
    Спасибо je0n!

    Но возник ещё один вопросик: Есть кука answers , значения в которой записаны так: "значение"|"значение"... Я хотел бы знать как проверить наличие любого значения (оно меняеться всё время).
    Например есть три значения 3|-10|9 , а мне нужно знать не то какое значение там записано, но то что их три. Можно ли это как-то осуществить?
     
  4. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    Вот, держи функцию в две строчки :). Возвращает количество значений
    PHP:
    <script language="JavaScript">
    function 
    antichat(str)
    {
        
    s=str.split("|");   //Тут вместо | можешь поставить любой разделитель
        
    return s.length;
    }

    x=antichat('3|-10|9');
    document.write(x);
    </script>
     
  5. DesignerMix

    DesignerMix Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    35
    Likes Received:
    11
    Reputations:
    5
    PHP:
    function getCookieVal (offset)  
    {  
    var 
    endstr document.cookie.indexOf (";"offset);  
    if (
    endstr == -1endstr document.cookie.length;  
    return 
    unescape(document.cookie.substring(offsetendstr));  
    }  

    function 
    GetCookie (name)  
    {  
    var 
    arg name "=";  
    var 
    alen arg.length;  
    var 
    clen document.cookie.length;  
    var 
    0;  
    while (
    clen)  
        {  
        var 
    alen;  
        if (
    document.cookie.substring(ij) == arg) return getCookieVal (j);  
        
    document.cookie.indexOf(" "i) + 1;  
        if (
    == 0) break;  
        }  
    return 
    null;  
    }  

    function 
    SetCookie (namevalue
    {  
    var 
    argv SetCookie.arguments;  
    var 
    argc SetCookie.arguments.length;  
    var 
    expires = (argc 2) ? argv[2] : null;  
    var 
    path = (argc 3) ? argv[3] : null;  
    var 
    domain = (argc 4) ? argv[4] : null;  
    var 
    secure = (argc 5) ? argv[5] : false;  
    document.cookie name "=" escape (value) + ((expires == null) ? "" : ("; expires=" expires.toGMTString())) + ((path == null) ? "" : ("; path=" path)) + ((domain == null) ? "" : ("; domain=" domain)) + ((secure == true) ? "; secure" "");  
    }  

    function 
    counter()  
    {  
    var 
    currentQuest1 '1';  
    var 
    largeExpDate = new Date ();  
    largeExpDate.setTime(largeExpDate.getTime() + (24 45 45));  
    SetCookie('currentQuest1',currentQuest1);  


    var 
    currentQuest=GetCookie('currentQuest'); 
    if(
    currentQuest=="1")SetCookie('currentQuest1',"1"); 

    function 
    Testum(str

        
    s=str.split("|");
        return 
    s.length


    var 
    a=GetCookie('answers'); 
    var 
    c=GetCookie('currentQuest1');
    if(
    a=="1",c=="1")SetCookie('test1',"a");

    var 
    test1 GetCookie('test1');  
    if (
    test1 == "1")  document.location="../../../../../testum/content/chapter1/section/paragraph1/test2.html?access=true";
    В итоге получился вот такой код. Но в кук test1 записываеться почему-то не цифра а сама переменная "a", а почему не знаю. И ещё вопрос можно-ли делать две проверки разом:
    "var a=GetCookie('answers');
    var c=GetCookie('currentQuest1');
    if(a=="1",c=="1")SetCookie('test1',"a");" ​
    или ошибка заключаеться именно в этом?
     
  6. Zebra

    Zebra шлюшко протенга

    Joined:
    11 May 2007
    Messages:
    6
    Likes Received:
    14
    Reputations:
    25
    записывается а потому что а закавычена. SetCookie('test1',"a");
    а проверять мона хоть десять куков
     
    3 people like this.
  7. DesignerMix

    DesignerMix Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    35
    Likes Received:
    11
    Reputations:
    5
    Кавычки я снял, но теперь в test1 записываеться null... Не пойму, вроде ведь всё правильно!?
     
  8. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    Короче по порядку:
    1) проверок можно делать сколько хошь, но не через запятую, а логическими "и" и "или" (еще есть "не"). В твоем случае будет выглядеть вот так:
    PHP:
    if(a=="1" && c=="1")SetCookie('test1',a); 
    2) null у тебя в переменно a, потому что наверное не установлен кук answers

    Вот, что в итоге:

    PHP:
    var a=GetCookie('answers');  
    var 
    c=GetCookie('currentQuest1'); 
    if(
    a!="1" && c!="1")SetCookie('test1',a); 

    var 
    test1 GetCookie('test1');   
    if (
    test1 == "1")  document.location="../../../../../testum/content/chapter1/section/paragraph1/test2.html?access=true"
    P.S. А вообще чем в слепую тупо пытаться собрать код, прочел страниц 50 любой книжки по JavaScript'у, и я больше чем уверен, такие бы элементарные вещи в легкую сам бы делал.
     
    1 person likes this.
  9. Zebra

    Zebra шлюшко протенга

    Joined:
    11 May 2007
    Messages:
    6
    Likes Received:
    14
    Reputations:
    25
    не знаю зачем такая невпупенная функция и зачем проверять по очерди и устанавливать кукисы вообще, но все решается намного проще
    Code:
    <script type="text/javascript">
    function chCookie(name)
    {var nC=name+"=1"
    var clen=name.length+2
    if ((document.cookie.indexOf(nC+";")!=-1)||(document.cookie.indexOf(nC+" ")!=-1)||((document.cookie.indexOf(nC)+clen)==document.cookie.length))
    {return "exist"}}
    
    function sCookie(name, value)
    {document.cookie=name+"="+value+";expires="+сюды срок}
    
    if (chCookie("currentQuest")=="exist")
    {sCookie("currentQuest1", "1")}
    if (chCookie("currentQuest1")=="exist")
    {sCookie("test1", "1")}
    if (chCookie("test1")=="exist")
    {document.location="..."}
    </script>
     
    7 people like this.
  10. DesignerMix

    DesignerMix Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    35
    Likes Received:
    11
    Reputations:
    5
    Спасибо всем! Всё работает +). Берусь за мануалы по JavaScript'у!!!
     
    1 person likes this.