Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [PHP/AJAX] form contatti method POST

    Salve,
    premetto che non sono molto esperto di js ma soprattutto che sono nuovo del mondo asincrono di ajax.

    Allora, per un progetto che sto portando avanti in questo momento, sto usando il framework MooTools v1.1 dal quale ottengo effetti meravigliosi come le tooltips, i tabbedPane ecc.
    Ora leggendo la documentazione, ma più in generale googleggiando alla ricerca di tutorials ed esempi pratici ho trovato il codice su come effettuare richieste asincrone ad una pagina php tramite appunto MooTools.
    Alla fine ho provato questo "AJAX con MooTools" su html.it e questo dalla documentazione ufficiale (ovviamente è l'equivalente di quello trovato su html.it ma un pò più spicciolo) Ajax.Form.
    Beh anche se semplice come cosa non riesco a risolvere...cioè smanettandoci un pò a volte si apriva il div con la gif animata per il loading senza però poi ricevere i dati dalla pagina, ad esempio form.php, oppure a volte eseguiva direttamente la pagina form.php ma dal suo percorso, e non dalla pagina che effettuava la richiesta come ad esempio form.html.

    Ora vi pongo alcune domande:
    -il file form.php non serve che stia per forza nella stessa directory della pagina form.html giusto? non avrebbe senso altrimenti...
    -nei vari esempi che ho citato il file php è un semplice print_r, ma se io devo usare echo per stampare a video i risultati o un messaggio di notifica va bene lo stesso?


    Non so cosa fare, ma se avete qualche esempio pratico da postare di ciò che cerco, cioè un form php con chiamata asincrona ajax con metodo POST, ve ne sarei molto grato.

    ps=spero sia le sezione giusta per questa discusione...

    grazie ancora
    Per una battaglia sono sempre a disposizione

  2. #2
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    per controllare le chiamate che fai tramite AJAX ti consiglio il comodo plugin per firefox, firebug con il quale puoi controllare le chiamate che effettui tramite ajax e la relativa risposta se c'è.

    per quello che riguarda le domande
    1) dipende da come è strutturato il codice. se spieghi meglio come sono messi i file e che devono fare(ad esempio form.php che è? il file che contiene la grafica del form, oppure il backend chiamato tramite AJAX)

    2) anche qui dipende da cosa devi ottenere. di solito AJAX, proprio per la natura intrinseca del'acronimo, utilizza come formato di ritorno o payload l'XML, cmq è possibilissimo utilizzare altri formati di ritorno come JSON, HTML, text/plain(come nel tuo esempiio, quindi in questo caso print_r e echo sono pressochè simili)...

    ciauz
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  3. #3
    allora posto qualche pezzo di codice:

    premetto che il sito è sviluppato in una sorta di template...

    la pagina che contiene il form html è "contatti.php", e si trova nella root del sito, ad esempio "www.miosito.it/contatti.php".

    /contatti.php
    Codice PHP:
    <?php include_once("includes/common/headersphp.php"); ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="it" xml:lang="it">
        <head>
            <?php include_once("includes/contatti/metatags.php"); ?>
        </head>
        <body>
            <?php include_once("includes/contatti/csspreloadimages.php"); ?>
            <div id="contenitore">
                <?php include_once("includes/common/box_header.php");
                include_once(
    "includes/contatti/corpo.php");
                include_once(
    "includes/common/footerbox.php"); ?>
            </div>
        </body>
    </html>
    <?php include_once("includes/common/endpage.php"); ?>
    /includes/contatti/corpo.php
    Codice PHP:
    <div id="corpo">
        <?php include_once("includes/contatti/corposx.php"); ?>
        <?php include_once("includes/common/corpodx.php"); ?>
        <div class="salvafloat"></div>
    </div>
    /includes/contatti/corposx.php
    Codice PHP:
    <div id="corposx">
        <div id="headcorposx">
            <div id="pagetitle">[img]img/contatti/contatti.png[/img]</div>
               <div id="contenuto">
                [b]Tutti i campi sono obbligatori[/b]
                

                

                

                <div id="outputMessageForm"><?php include_once("includes/contatti/form.php"); echo $msg?></div>
                <div id="contform" align="center">
                    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" id="csend" method="post">
                        <div id="cname" onmouseover="this.style.background='#7caa69'; this.style.color='#ffffff'" onmouseout="this.style.background=''; this.style.color='#333333'">
                            * Nome:
                            

                            <input type="text" name="cname" />
                        </div>
                        

                        <div id="cmail" onmouseover="this.style.background='#7caa69'; this.style.color='#ffffff'" onmouseout="this.style.background=''; this.style.color='#333333'">
                            * E-mail:
                            

                            <input type="text" name="cmail" />
                        </div>
                        

                        <div id="ctext" onmouseover="this.style.background='#7caa69'; this.style.color='#ffffff'" onmouseout="this.style.background=''; this.style.color='#333333'">
                            * Testo:
                            

                            <textarea name="ctext" rows="8" cols="28"></textarea>
                        </div>
                        <button type="reset" name="creset" title="Cancella">[img]img/contatti/cancel.gif[/img]</button> <button type="submit" name="csend" title="Invia">[img]img/contatti/next.gif[/img]</button>
                    </form>
                </div>
            </div>
        </div>
        <div id="foocorposx"></div>
    </div>
    includes/contatti/form.php
    (le funzioni per validare gli input sono raccolte in /includes/common/headers.php)
    Codice PHP:
    <?php

    $nameErr 
    FALSE;
    $mailErr FALSE;
    $textErr FALSE;
    $err FALSE;
    $msg '';

    if(isset(
    $_POST['csend'])) {
        
    $name cleanInputForm($_POST['cname']);
        
    $mail cleanInputForm($_POST['cmail']);
        
    $text cleanInputForm($_POST['ctext']);
        
        
    $msgErr = array();
        
        if(
    my_is_numeric($name)) {
            
    $err true;
            
    $nameErr true;
            
    $msgErr[] = 'Il campo "Nome" non pu&ograve; essere un numero';
        }
        
        if(
    isEmptyString($name)) {
            
    $err true;
            
    $nameErr true;
            
    $msgErr[] = 'Il campo "Nome" non pu&ograve; essere vuoto';
        }
        
        if(
    strlen($name)<2) {
            
    $err true;
            
    $nameErr true;
            
    $msgErr[] = 'Il campo "Nome" non pu&ograve; essere inferiore ai 2 caratteri';
        }
        
        if(
    contieneBadwords($name)) {
            
    $err true;
            
    $nameErr true;
            
    $msgErr[] = 'Il campo "Nome" non pu&ograve; contenere vocaboli volgari e parolacce';
        }
        
        if(
    stringaCaratteriUguali($name)) {
            
    $err true;
            
    $nameErr true;
            
    $msgErr[] = 'Il campo "Nome" non pu&ograve; essere formato da soli caratteri uguali';
        }
        
        if(
    my_is_numeric($mail)) {
            
    $err true;
            
    $mailErr true;
            
    $msgErr[] = 'Il campo "E-mail" non pu&ograve; essere un numero';
        }
        
        if(
    isEmptyString($mail)) {
            
    $err true;
            
    $mailErr true;
            
    $msgErr[] = 'Il campo "E-mail" non pu&ograve; essere vuoto';
        }
        
        if(
    strlen($mail)<9) {
            
    $err true;
            
    $mailErr true;
            
    $msgErr[] = 'Il campo "E-mail" non pu&ograve; essere inferiore ai 9 caratteri';
        }
        
        if(
    stringaCaratteriUguali($mail)) {
            
    $err true;
            
    $mailErr true;
            
    $msgErr[] = 'Il campo "E-mail" non pu&ograve; essere formato da soli caratteri uguali';
        }
        
        if(!
    isValidEmail($mail)) {
            
    $err true;
            
    $mailErr true;
            
    $msgErr[] = 'Il campo "E-mail" non pu&ograve; essere scritto in questo modo';
        }
        
        if(
    my_is_numeric($text)) {
            
    $err true;
            
    $textErr true;
            
    $msgErr[] = 'Il campo "Testo" non pu&ograve; essere un numero';
        }
        
        if(
    isEmptyString($text)) {
            
    $err true;
            
    $textErr true;
            
    $msgErr[] = 'Il campo "Testo" non pu&ograve; essere vuoto';
        }
        
        if(
    strlen($text)<10) {
            
    $err true;
            
    $textErr true;
            
    $msgErr[] = 'Il campo "Testo" non pu&ograve; essere inferiore ai 10 caratteri';
        }
        
        if(
    contieneBadwords($text)) {
            
    $err true;
            
    $textErr true;
            
    $msgErr[] = 'Il campo "Testo" non pu&ograve; contenere vocaboli volgari e parolacce';
        }
        
        if(
    stringaCaratteriUguali($text)) {
            
    $err true;
            
    $textErr true;
            
    $msgErr[] = 'Il campo "Testo" non pu&ograve; essere formato da soli caratteri uguali';
        }
        
        if(
    $err) {
            
    $msg '<span style="color: #cc0000; font-weight: bold">Hai commesso i seguenti errrori nella compilazione del form:
    '
    ;
            foreach(
    $msgErr as $ierr) {
                
    $msg .= $ierr.'
    '
    ;
            }
            
    $msg .= '</span>';
        } else {
            
    $msg 'TEST tutto ok';
        }
    }

    ?>
    ora che hai visto più o meno come è impostato il sito cosa mi consigli di fare?
    come devo procedere?

    grazie ancora per l'aiuto
    Per una battaglia sono sempre a disposizione

  4. #4
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    dove entra in gioco AJAX?
    VVoVe: VVoVe:

    se vuoi consigli su come strutturare il codice php, probabilmente la sezione adatta è un'altra..

    altrimenti fa una domanda un pò + precisa
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  5. #5
    allora,

    includes/contatti/metatags.php, in questo file ho inserito l'fw MooTools e l'evento per la richiesta ajax
    Codice PHP:
    <?php

    echo '<i vari metatag />
    ....
    <link rel="icon" href="favicon.ico" type="image/x-icon" />
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
    <link rel="stylesheet" href="css/common.css?'
    .time().'" type="text/css" />
    <!--[if lte IE 6]>
        <style type="text/css">
            @import url("css/pngfix.css");
        </style>
    <![endif]-->
    <!--[if IE]>
        <style type="text/css">
            @import url("css/iefix.css");
        </style>
    <![endif]-->
    <script type="text/javascript" language="javascript" src="js/mootools.v1.1.js"></script>
    <script type="text/javascript" language="javascript" src="js/common.js"></script>
    <script type="text/javascript" language="javascript" src="js/tabcontent.js"></script>
    <script type="text/javascript" language="javascript" src="js/ajaxreq.js"></script>'
    ;

    ?>
    js/ajaxreq.js
    Codice PHP:
    $('csend').addEvent('submit', function(e) {
        
    /**
         * Prevent the submit event
         */
        
    new Event(e).stop();
     
        
    /**
         * This empties the log and shows the spinning indicator
         */
        
    var log = $('log_res').empty().addClass('ajax-loading');
     
        
    /**
         * send takes care of encoding and returns the Ajax instance.
         * onComplete removes the spinner from the log.
         */
        
    this.send({
            
    updatelog,
            
    onComplete: function() {
                
    log.removeClass('ajax-loading');
            }
        });
    }); 
    questo è il form html (includes/contatti/corposx.php)
    Codice PHP:
    <div id="contform" align="center">
    <
    div id="log">
         <
    div id="log_res">

         </
    div>
    </
    div>
                    <
    form action="includes/contatti/form.php" id="csend" method="post">
                        <
    div id="cname" onmouseover="this.style.background='#7caa69'; this.style.color='#ffffff'" onmouseout="this.style.background=''; this.style.color='#333333'">
                            * 
    Nome:
                            

                            <
    input type="text" name="cname" />
                        </
    div>
                        

                        <
    div id="cmail" onmouseover="this.style.background='#7caa69'; this.style.color='#ffffff'" onmouseout="this.style.background=''; this.style.color='#333333'">
                            * 
    E-mail:
                            

                            <
    input type="text" name="cmail" />
                        </
    div>
                        

                        <
    div id="ctext" onmouseover="this.style.background='#7caa69'; this.style.color='#ffffff'" onmouseout="this.style.background=''; this.style.color='#333333'">
                            * 
    Testo:
                            

                            <
    textarea name="ctext" rows="8" cols="28"></textarea>
                        </
    div>
                        <
    button type="reset" name="creset" title="Cancella">[img]img/contatti/cancel.gif[/img]</button> <button type="submit" name="csend" title="Invia">[img]img/contatti/next.gif[/img]</button>
                    </
    form>
                </
    div
    includes/contatti/form.php (senza usare ajax confermo il suo funzionamento.)
    Codice PHP:
    <?php

    $nameErr 
    FALSE;
    $mailErr FALSE;
    $textErr FALSE;
    $err FALSE;
    $msg '';

    if(isset(
    $_POST['csend'])) {
        
    $name cleanInputForm($_POST['cname']);
        
    $mail cleanInputForm($_POST['cmail']);
        
    $text cleanInputForm($_POST['ctext']);
        
        
    $msgErr = array();
        
        if(
    my_is_numeric($name)) {
            
    $err true;
            
    $nameErr true;
            
    $msgErr[] = 'Il campo "Nome" non pu&ograve; essere un numero';
        }
        
        if(
    isEmptyString($name)) {
            
    $err true;
            
    $nameErr true;
            
    $msgErr[] = 'Il campo "Nome" non pu&ograve; essere vuoto';
        }
        
        if(
    strlen($name)<2) {
            
    $err true;
            
    $nameErr true;
            
    $msgErr[] = 'Il campo "Nome" non pu&ograve; essere inferiore ai 2 caratteri';
        }
        
        if(
    contieneBadwords($name)) {
            
    $err true;
            
    $nameErr true;
            
    $msgErr[] = 'Il campo "Nome" non pu&ograve; contenere vocaboli volgari e parolacce';
        }
        
        if(
    stringaCaratteriUguali($name)) {
            
    $err true;
            
    $nameErr true;
            
    $msgErr[] = 'Il campo "Nome" non pu&ograve; essere formato da soli caratteri uguali';
        }
        
        if(
    my_is_numeric($mail)) {
            
    $err true;
            
    $mailErr true;
            
    $msgErr[] = 'Il campo "E-mail" non pu&ograve; essere un numero';
        }
        
        if(
    isEmptyString($mail)) {
            
    $err true;
            
    $mailErr true;
            
    $msgErr[] = 'Il campo "E-mail" non pu&ograve; essere vuoto';
        }
        
        if(
    strlen($mail)<9) {
            
    $err true;
            
    $mailErr true;
            
    $msgErr[] = 'Il campo "E-mail" non pu&ograve; essere inferiore ai 9 caratteri';
        }
        
        if(
    stringaCaratteriUguali($mail)) {
            
    $err true;
            
    $mailErr true;
            
    $msgErr[] = 'Il campo "E-mail" non pu&ograve; essere formato da soli caratteri uguali';
        }
        
        if(!
    isValidEmail($mail)) {
            
    $err true;
            
    $mailErr true;
            
    $msgErr[] = 'Il campo "E-mail" non pu&ograve; essere scritto in questo modo';
        }
        
        if(
    my_is_numeric($text)) {
            
    $err true;
            
    $textErr true;
            
    $msgErr[] = 'Il campo "Testo" non pu&ograve; essere un numero';
        }
        
        if(
    isEmptyString($text)) {
            
    $err true;
            
    $textErr true;
            
    $msgErr[] = 'Il campo "Testo" non pu&ograve; essere vuoto';
        }
        
        if(
    strlen($text)<10) {
            
    $err true;
            
    $textErr true;
            
    $msgErr[] = 'Il campo "Testo" non pu&ograve; essere inferiore ai 10 caratteri';
        }
        
        if(
    contieneBadwords($text)) {
            
    $err true;
            
    $textErr true;
            
    $msgErr[] = 'Il campo "Testo" non pu&ograve; contenere vocaboli volgari e parolacce';
        }
        
        if(
    stringaCaratteriUguali($text)) {
            
    $err true;
            
    $textErr true;
            
    $msgErr[] = 'Il campo "Testo" non pu&ograve; essere formato da soli caratteri uguali';
        }
        
        if(
    $err) {
            
    $msg '<span style="color: #cc0000; font-weight: bold">Hai commesso i seguenti errrori nella compilazione del form:
    '
    ;
            foreach(
    $msgErr as $ierr) {
                
    $msg .= $ierr.'
    '
    ;
            }
            
    $msg .= '</span>';
        } else {
            
    $msg 'tutto ok';
        }
    }

    ?>
    e questo il piccolo css per i div dei risultati.
    Codice PHP:
    #log {
        
    floatleft;
        
    padding0.5em;
        
    margin-left10px;
        
    width290px;
        
    border1px solid #d6d6d6;
        
    border-left-color#e4e4e4;
        
    border-top-color#e4e4e4;
        
    margin-top10px;
    }
     
    #log_res {
        
    overflowauto;
    }
     
    #log_res.ajax-loading {
        
    padding20px 0;
        
    backgroundurl(../img/contatti/loading.gifno-repeat center;

    Per una battaglia sono sempre a disposizione

  6. #6
    scusatemi ho copiato malela funzioneAJAXreq.js...

    Codice PHP:
    window.addEvent('domready', function(){
        $(
    'csend').addEvent('submit', function(e) {
            
    /**
             * Prevent the submit event
             */
            
    new Event(e).stop();
     
            
    /**
             * This empties the log and shows the spinning indicator
             */
            
    var log = $('log_res').empty().addClass('ajax-loading');
     
            
    /**
             * send takes care of encoding and returns the Ajax instance.
             * onComplete removes the spinner from the log.
             */
            
    this.send({
                
    updatelog,
                
    onComplete: function() {
                    
    log.removeClass('ajax-loading');
                }
            });
        });
    }); 

    e comunque, come dicevo nel primo post,in questo modo, cioè come nella documentazione ufficiale di MooTools, vedo per un secondo la LOADING.GIF del caricamento ma poi si chiude subito il suo div senza mostrare alcun risultato...ufff

    ps=firebug non mi da errori....
    Per una battaglia sono sempre a disposizione

  7. #7
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    non conosco motools, uso prototype, scriptacolous e jquery, cmq penso che l'inghippo sia nella funzione di callback onComplete.
    nel senso che sicuramente la chiamata AJAX va a buon fine, e quindi
    viene chiamata log.removeClass(...), che rimuove la classe(CSS) per la visualizzazione del loading gif... quindi forse nella stessa funzione ci dovrebbe essere il metodo per visualizzare i dati ritornati dal tuo backend in php, in un'elemento della pagina...
    almeno con prototype è così, cioè:
    - invoco la chiamata AJAX a un backend
    - una volta ritornati i valori nella funzione di callback vado eventualmente ad elaborarli e poi visualizzarli nella pagina del tipo
    onComplete: function() {
    log.removeClass('ajax-loading');
    $('idcontenuto').innerHTML = testoritornato
    }

    non stare a guardare la sintassi, ma solo il senso. per la sintassi precisa di motools rifatti alla guida...
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  8. #8
    magari senza usare mootools come devo procedere?
    posso creare un file js con la creazione dell'oggetto xmlhttprequest() ma poi come procedo?
    Per una battaglia sono sempre a disposizione

  9. #9
    quel remove class serve solo a togliere l'immagine gif animata del loading, niente più.
    uff...eppure è una cosa stupida...
    Per una battaglia sono sempre a disposizione

  10. #10
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    Originariamente inviato da sidvizioso
    quel remove class serve solo a togliere l'immagine gif animata del loading, niente più.
    uff...eppure è una cosa stupida...
    si infatti...lo so

    cmq perchè non usare motools??
    guardati la guida, vedrai che lì trovi il problema.
    ho dato una spizzata alla documentazione di mootols...

    prova a mettere cosi

    Codice PHP:
    window.addEvent('domready', function(){
        $(
    'csend').addEvent('submit', function(e) {
            
    /**
             * Prevent the submit event
             */
            
    new Event(e).stop();

            
    /**
             * This empties the log and shows the spinning indicator
             */
            
    var log = $('log_res').empty().addClass('ajax-loading');

            
    /**
             * send takes care of encoding and returns the Ajax instance.
             * onComplete removes the spinner from the log.
             */
            
    this.onSuccess(text){
                 
    //iddiv -> è il valore dell'attributo id del tuo div dove mettere i risultati
                 
    $('iddiv').set('text'text);
            }
            
    this.send({
                
    updatelog,
                
    onComplete: function() {
                    
    log.removeClass('ajax-loading');
                }
            });
        });
    }); 
    cmq non so se può funzionare... ma la soluzione non si dovrebbe discostare molto
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

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.