Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Zenida
    Registrato dal
    Mar 2011
    Messaggi
    19

    Aggiornamento dopo submit di un form

    Salve a tutti,
    Il mio sito è sull'hosting gratuito di altervista. Da poco hanno aggiornato i server con php 5.2 (prima 4.4.9)

    Avevo creato una pagina php che consentiva agli amministratori di generare degli avvisi scorrevoli per il sito, ma da quando ho attivato la funzione php 5.2 (dato che è disattivabile)
    questa aveva smesso di funzionare... Dopo qualche ritocco qua è la ho notato che il problema era la tipologia di refresh che stavo eseguendo che ho successivamente modificato.

    Ora ho un altro problema però.
    Vorrei che una volta inserito il nuovo avviso tramite un form e aggiornato nel db avvenisse un unico aggiornamento della pagina che visualizzi il nuovo avviso e non 2 come è ovvio che succede.

    Ho notato che avviene un aggiornamento prima che il valore venga aggiornato sul db perchè continua a mostrare il vecchio avviso e poi il secondo aggiornamento (che è quello che impongo io) visualizza i dati ovviamente aggiornati.

    L'unico che può generare un refresh prima dell'UPDATE sul db è il submit del form. Vorrei impedire questo primo refresh o magari far si che avvenga solo dopo l'update del db.

    Vi posto il codice:
    Codice PHP:
    [COLOR=skyblue]

    [/COLOR][COLOR=orange]
    <div class[/COLOR]=[COLOR=green]"page_title"[/COLOR][COLOR=orange]>
        <h2>[/COLOR]Avvisi Scorrevoli[COLOR=orange]</h2>
    </div>

    <div class[/COLOR]=[COLOR=green]"area_centrale_contenuti"[/COLOR][COLOR=orange]>[/COLOR]
    <?php
        
    /*Controllo permessi utente. (Almeno Moderatori)*/
        
    if ($_SESSION['permessi']<MODERATOR)
        {
            echo 
    '<div class="error">'.gdrcd_filter('out',$MESSAGE['error']['not_allowed']).'</div>';
        }
        else
        {
            
    /*Stabilisco la funzione per aggiornare il db*/
            
    function aggiorna($news_text)
            {
                
    /*Modifico l'avviso attuale nel database*/
                
    $sql "UPDATE avviso_scorrevole SET descrizione='$news_text' WHERE id='1'";
                
    mysql_query($sql); ?> [COLOR=orange]<meta http-equiv[/COLOR]=[COLOR=green]"refresh"[/COLOR][COLOR=orange]content[/COLOR]=[COLOR=green]"0;url=http://astragonia.altervista.org/main.php?page=gestione_avvisi"[/COLOR][COLOR=orange]/>[/COLOR]
    <?php
            
    }
            
    /*Leggo l'avviso attuale dal database*/
            
    $messaggio mysql_query("SELECT * FROM avviso_scorrevole WHERE id=1");
                
            
    /*Memorizzo l'avviso attuale in una variabile e stampo il contenuto a schermo*/
            
    $riga=mysql_fetch_array($messaggio);
            
    $avviso_attuale $riga[descrizione];
            echo 
    '<div class="gestione_avvisi">'.$avviso_attuale.'</div>';
    ?>
            [COLOR=skyblue][/COLOR]
            [COLOR=orange]<form name[/COLOR]=[COLOR=green]"avviso"[/COLOR] [COLOR=orange]method[/COLOR]=[COLOR=green]"POST"[/COLOR][COLOR=orange]>[/COLOR]
                Inserire nuovo avviso:
                [COLOR=orange]<textarea rows[/COLOR]=[COLOR=green]"9"[/COLOR] [COLOR=orange]cols[/COLOR]=[COLOR=green]"80"[/COLOR] [COLOR=orange]name[/COLOR]=[COLOR=green]"msg_avviso"[/COLOR][COLOR=orange]>[/COLOR]<?php echo($avviso_attuale);?>[COLOR=orange]</textarea>
                <input type[/COLOR]=[COLOR=green]"submit"[/COLOR] [COLOR=orange]name[/COLOR]=[COLOR=green]"memorizza"[/COLOR] [COLOR=orange]value[/COLOR]=[COLOR=green]"Salva"[/COLOR] [COLOR=orange]id[/COLOR]=[COLOR=green]"button"[/COLOR][COLOR=orange]>
            </form>[/COLOR]
    <?php
            
    /*Controllo che sia stato premuto il tasto "Salva", in caso affermativo viene richiamata la funzione aggiorna()*/
            
    if (isset($_POST['memorizza']))
            {
                
    aggiorna($_POST['msg_avviso']);
            }
        }
    ?>
    [COLOR=orange]</div>[/COLOR]

  2. #2
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Due considerazioni:
    1. la funzione aggiorna potrebbe stare all'inizio dello script e non dentro gli if
    2. non c'è alcuna necessità di fare un refresh dopo la funzione aggiorna se la richiami prima di caricare i dati da visualizzare

    Cioè:
    1. controlli i permessi
    2. se (isset($_POST['memorizza'])) allora richiami aggiorna() (ma puoi anche eseguire il codice direttamente visto che ti servirà solo una volta in questo script!)
    3. carichi i dati dal DB e li visualizzi

    Nessun refresh richiesto!

    PS ad ogni modo quando mi serve io utilizzo un header(location: ... ) per fare il refresh così l'utente non se ne accorge neppure perchè tutto avviene lato server

  3. #3
    Utente di HTML.it L'avatar di Zenida
    Registrato dal
    Mar 2011
    Messaggi
    19
    ho provato con l'header ma mi da errore probabilmente c'è qualche output... e prima che aggiornassi a php 5.2 non avveniva nessun refresh, così glielo facevo fare io.
    Mentre ora come ti dicevo dopo il submit ma prima dell'update avviene un refresh che non capisco, lo noto perchè la pagina torna in alto e carica i vecchi valori e non quelli appena inseriti.

    Proverò con la funzione posta in alto prima del resto del codice, anche se nn credo cambi molto oppure includendola direttamente nell'IF anche se non credo cambi qualcosa anche in questo secondo caso.

    Se riuscissi a far funzionare l'header sarebbe fantastico infatti... ma purtroppo non va, dev'esserci qualche output.

  4. #4
    Utente di HTML.it L'avatar di Zenida
    Registrato dal
    Mar 2011
    Messaggi
    19
    Ok ho risolto....

    Diciamo che sostanzialmente il problema sta nel fatto che dopo il submit di un form la pagina viene refreshata di conseguenza dato che la mia funzione veniva richiamata dopo che i dati erano stati stampati a video ovviamente quest'ultimi non erano corretti... ma ora che ho messo l'if(isset......) prima di stampare il contenuto del db, quando faccio il submit viene refreshata la pagina e quindi viene richiamata prima la funzione di aggiornamento e dopo viene stampato il contenuto....

    Unico neo è il fatto che viene fatto un primo if(isset.....) con esito sicuramente negativo al caricamento della pagina.... ma figuriamoci a livello di prestazioni non credo che impatti chissà quanto xD

    Ovviamente grazie a Luke per il suggerimento

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.