• User

    incremento anomalo di una variabile in un file .txt

    Ho un problema con un incremento di una variabile copntenuta in in file .txt

    Per ridurre tutto ai minimi termini e spiegare bene, ho un pulsante che richiama una funxione e mi fa stampare una variabile incrementata di 1
    [PHP]
    $var = intval(file_get_contents('prova.txt'));
    file_put_contents('prova.txt',++$var);
    echo $var;
    [/PHP]

    tutto questo però, mi stampa il valore incrementato di uno e un secondo dopo si ricarica nuovamente la pagina con il valore incrementato nuovamente.

    Lo stesso succede anche se al posto di incrementare diminuisco il valore della variabille.

    Come posso risolvere il problema?


  • ModSenior

    Ciao ali7p,
    ma per come hai detto tu il problema non è lo script, ma il fatto che la pagina venga fatta ricaricare e quindi venga chiamata 2 volte in successione.


  • User

    @Thedarkita said:

    Ciao ali7p,
    ma per come hai detto tu il problema non è lo script, ma il fatto che la pagina venga fatta ricaricare e quindi venga chiamata 2 volte in successione.

    uhm... ti illustro il mio caso specifico:

    • ho simulato dei frame con dei semplici div e css
    • ho una funzione javascript invocata in un bottone che mi permette di caricare una pagina in un determinato div
    • la pagina da caricare nel div (ridotta all'osso) è costruita dal codice che ho postato sopra

    perchè si deve ricaricare due volte????

    questo è lo script (che ho copiato di sana pianta)

    <script type="text/javascript">
    
    var loadedobjects=""
    var rootdomain="http:/ /"+window.location.hostname
    
    function ajaxpage(url, containerid){
    var page_request = false
    if (window.XMLHttpRequest) // if Mozilla, Safari etc
    page_request = new XMLHttpRequest()
    else if (window.ActiveXObject){ // if IE
    try {
    page_request = new ActiveXObject("Msxml2.XMLHTTP")
    } 
    catch (e){
    try{
    page_request = new ActiveXObject("Microsoft.XMLHTTP")
    }
    catch (e){}
    }
    }
    else
    return false
    page_request.onreadystatechange=function(){
    loadpage(page_request, containerid)
    }
    page_request.open('GET', url, true)
    page_request.send(null)
    }
    
    function loadpage(page_request, containerid){
    if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
    document.getElementById(containerid).innerHTML=page_request.responseText
    }
    
    function loadobjs(){
    if (!document.getElementById)
    return
    for (i=0; i<arguments.length; i++){
    var file=arguments*
    var fileref=""
    if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
    if (file.indexOf(".js")!=-1){ //If object is a js file
    fileref=document.createElement('script')
    fileref.setAttribute("type","text/javascript");
    fileref.setAttribute("src", file);
    }
    else if (file.indexOf(".css")!=-1){ //If object is a css file
    fileref=document.createElement("link")
    fileref.setAttribute("rel", "stylesheet");
    fileref.setAttribute("type", "text/css");
    fileref.setAttribute("href", file);
    }
    }
    if (fileref!=""){
    document.getElementsByTagName("head").item(0).appendChild(fileref)
    loadedobjects+=file+" " //Remember this object as being already added to page
    }
    }
    }
    
    </script>
    
    ```questa la chiamata:
    [html]    
    <form action="" method="get">
    <a class="acal" href="javascript:ajaxpage('calpiu.php','leftcolumn');"><input type="button" value="&gt;" /></a></form>
    [/html]

  • User

    Ho provato ad usare il database al posto del file .txt, ma il problema è lo stesso 😞
    Qualcuno mi può aiutare, please?


  • ModSenior

    Ho spostato la discussione in area scripting lato client in quanto è chiaro che non è un problema dello script php, bensì di come questo viene richiamato.


  • User

    Non so più dove sbattere la testa.

    Posto tutto il codice che ho ridotto ai minimi termini sperando di scovare l'errore, sperando che qualcuno mi possa aiutare:

    Ho un pulsante così costruito:
    [php]
    <form style="border:0px" action="" method="get">
    <a class="acal" href="javascript:ajaxpage('pagina.php','leftcolumn');"><input type="button" value="<" /></a>
    </form> [/php]che ha caricare pagina.php nel div con id leftcolumn.
    Questa è pagina.php
    [php]
    include("../functions.php");

    GLOBAL $DB;
        
    $rs=$DB->Execute("SELECT * FROM users WHERE id=".$_SESSION[fw_userid]);
    $usr=$rs->FetchRow();
    $prox=$usr[calendario];
        
    echo prova($prox+1);
    $DB->Execute("UPDATE users SET calendario=$prox+1 WHERE id=$_SESSION[fw_userid]"); 
    la funzione prova che si trova in ../functions.php (file che contine solo funzioni) è:
    Codice PHP:
    function prova ($prox=0) {
        return $prox;
    }[/php]Tutto questo carica 2 volte la pagina
    

    A questo punto, come detto da Thedarkita, il problema è nello script... ma javascript per me è arabo :gtsad:
    Qualcuno mi indirizza verso una soluzione, please?

    Riposto il codic (lo spazio in http:/ / è solo perchè no nmi lascia inserire link, nel mio codice non c'è)

    
    <script type="text/javascript">
    
        var loadedobjects=""
        var rootdomain="http:/ /"+window.location.hostname
    
        function ajaxpage(url, containerid){
            var page_request = false
            if (window.XMLHttpRequest) // if Mozilla, Safari etc
                page_request = new XMLHttpRequest()
            else if (window.ActiveXObject){ // if IE
                try {
                    page_request = new ActiveXObject("Msxml2.XMLHTTP")
                } 
                catch (e){
                    try{
                        page_request = new ActiveXObject("Microsoft.XMLHTTP")
                    }
                catch (e){}
                }
            }
            else
            return false
            page_request.onreadystatechange=function(){
                loadpage(page_request, containerid)
            }
            page_request.open('GET', url, true)
            page_request.send(null)
        }
    
        function loadpage(page_request, containerid){
            if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
            document.getElementById(containerid).innerHTML=page_request.responseText
        }
    
        function loadobjs(){
            if (!document.getElementById)
            return
            for (i=0; i<arguments.length; i++){
                var file=arguments*
                var fileref=""
                if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
                    if (file.indexOf(".js")!=-1){ //If object is a js file
                        fileref=document.createElement('script')
                        fileref.setAttribute("type","text/javascript");
                        fileref.setAttribute("src", file);
                    }
                    else if (file.indexOf(".css")!=-1){ //If object is a css file
                        fileref=document.createElement("link")
                        fileref.setAttribute("rel", "stylesheet");
                        fileref.setAttribute("type", "text/css");
                        fileref.setAttribute("href", file);
                    }
                }
                if (fileref!=""){
                    document.getElementsByTagName("head").item(0).appendChild(fileref)
                    loadedobjects+=file+" " //Remember this object as being already added to page
                }
            }
        }
    
        </script>
    
    

  • Super User

    Ciao ali7p,
    occorre capire perché viene richiamata due volte.
    Prova ad inserire degli alert usandoli come debug.
    Per esempio alla prima riga della funzione ajaxpage:

    function ajaxpage(url, containerid){
    alert("TEST");
    ...