• User

    Ok, mi ci volevano 3 secondi in più per svelare l'arcano (che tanto arcano poi non è!).

    Quando passi una variabile da un form con method="post", nella pagina php di destinazione (in questo caso invia.php) le variabili hanno il nome preceduto da $_POST['value'].

    Praticamente i tuoi dati del form fanno parte dell'array $_POST che viene passato a invia.php

    Così per esempio il valore relativo a:

    <input type="radio" name="radio" id="Citta2" value="Citta2" tabindex="10" />in invia.php sarà espresso dalla variabile

    $_POST['Citta2'] e non semplicemente $Citta2

    Per far funzionare il tutto basta assegnare il valore alle variabili, all'inizio dello script php, così:

    $Citta2 = $_POST['Citta2'];

    Attenzione pero' che uno script così è un invito a nozze per hackers e compagnia bella!
    Dovresti filtrare ogni valore in entrata sui tuoi scripts PHP, controllando il tipo di variabile ma ancora meglio usando sempre espressioni regolari!

    aggiungo:
    quando le cose non funzionano fai sempre un rapido debug preventivo. Se la mail arriva vuota, probabilmente le variabili sono vuote.
    Controlla che le variabili abbiano dei valori con un:

    echo $nome_variabile;
    die;


  • User

    grazie 1000!sei stato gentilissimo!!
    PS.che rischi corro se questi hacker decidono di prendermi di mira?


  • User

    Bhe i rischi che corri sono proporzionali alla complessità del tuo sito e a la quantità e qualità di informazioni che vi sono presenti.

    Se non filtri la tua variabile post, chiunque può "iniettare" del codice all'interno del tuo server.

    Per questo è sempre buona norma usare lo stripslashes se non magic_quotes non è attivo, o filtrare con eregi e l'espressione regolare che ti interessa (es. solo lettere e numeri).

    Per una discussione più approfondita su questo argomento sono sicuro che qualche moderatore appena vedrà il thread ti saprà consigliare la sezione adatta del forum.

    La sicurezza in PHP è una questione di cruciale importanza, che ogni programmatore deve tenere in considerazione prima di scrivere qualsiasi righetta di codice.


  • User

    ma e' un lavoro grosso da fare nel mio caso ,filtrare le variabili?intendo dire e' complesso perche sono alle prime armi...grazie ancora 😉


  • User

    Ho provato cosi...ma non funziona e ho provato anche togliendo $Citta2= lasciando solo $_POST['Citta2']; ...la mail arriva compilata ma con tutti i campi attaccati e non si capisce niente,praticamente la mail che arriva non ha tutti i campi divisi ma e' una frase unica,non legge i campi penso.

    <?php
    /* INVIO SEMPLICE */
    $destinatario = "mia mail";
    $oggetto = "Email inviata dal sito";
    $Citta2 = $_POST['Citta2'];
    $Mare = $_POST['Mare'];
    $Montagna = $_POST['Montagna'];
    $Lago = $_POST['Lago'];
    $Citta = $_POST['Citta'];
    $Provincia = $_POST['Provincia'];
    $NomeH = $_POST['NomeH'];
    $Categoria = $_POST['Categoria'];
    $Periodo = $_POST['Periodo'];
    $Da = $_POST['Da'];
    $Sito = $_POST['Sito'];
    $Email = $_POST['Email'];
    $Nome = $_POST['Nome'];

    $da = $email;
    $intestazioni = "From: $da";
    mail($destinatario,$oggetto,$messaggio,$intestazioni);
    ?>


  • User

    Ragazzi ce nessuno che mi puo aiutare?graziee


  • User

    @gf233 said:

    Ho provato cosi...ma non funziona e ho provato anche togliendo $Citta2= lasciando solo $_POST['Citta2']; ...la mail arriva compilata ma con tutti i campi attaccati e non si capisce niente,praticamente la mail che arriva non ha tutti i campi divisi ma e' una frase unica,non legge i campi penso.

    <?php
    /* INVIO SEMPLICE */
    $destinatario = "mia mail";
    $oggetto = "Email inviata dal sito";
    $Citta2 = $_POST['Citta2'];
    $Mare = $_POST['Mare'];
    $Montagna = $_POST['Montagna'];
    $Lago = $_POST['Lago'];
    $Citta = $_POST['Citta'];
    $Provincia = $_POST['Provincia'];
    $NomeH = $_POST['NomeH'];
    $Categoria = $_POST['Categoria'];
    $Periodo = $_POST['Periodo'];
    $Da = $_POST['Da'];
    $Sito = $_POST['Sito'];
    $Email = $_POST['Email'];
    $Nome = $_POST['Nome'];

    $da = $email;
    $intestazioni = "From: $da";
    mail($destinatario,$oggetto,$messaggio,$intestazioni);
    ?>

    Bhe la devi impaginare..

    Se non vuoi fare una email HTML devi usare \n per una nuova linea e/o \t per una tabulazione.


  • User Attivo

    Ti compilo solo la prima riga per avere un minimo di sicurezza, poi le altre le fai da solo.
    [PHP]$messaggio = "Citta: ".htmlentities($_POST['Citta2'])."\n";[/PHP]


  • User

    perfetto,grazie 1000 ragazzi!!!!!!!!!!!!!!!!!!!!!!


  • User Newbie

    Salve a tutti sono nuovo del forum e soprattutto di linguaggio php. Leggendo questa discussione ho notato che il form in questione è molto simile al mio, il mio è ancora più semplice. Nonostante abbia seguito i consigli citati quando mi invia la mail, invece di tutti i campi:nome,città,email e testo del messaggio, mi arriva solo il testo del messaggio..Dove sbaglio?

    Vi posto il codice:

    Html

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>
    <style type="text/css">
    <!--
    #form1 {
    width: 500px;
    margin-left: 150px;
    margin-top: 50px;
    }
    fieldset {
    margin-left: 10px;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px;
    background-color: #09F;
    color: #FFF;
    padding: 20px;
    }
    fieldset legend {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px;
    text-transform: uppercase;
    }
    fieldset #submit {
    margin-left: 400px;
    padding: 0px;
    }
    fieldset #invia {
    margin-left: 400px;
    }
    -->
    </style>
    </head>
    <body>
    <form action="invia.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
    <fieldset>
    <legend>Informazione di registrazione</legend>
    <p>
    <label for="nome">Nome</label>
    <input type="text" name="nome" id="nome" tabindex="10" />
    </p>
    <p>
    <label for="citta">Città</label>
    <input type="text" name="citta" id="citta" tabindex="20" />
    </p>
    <p>
    <label for="email">Email</label>
    <input type="text" name="email" id="email" tabindex="30" />
    </p>
    <p> </p>
    </fieldset>
    <fieldset>
    <legend></legend>
    <legend>IL tuo Messaggio</legend>
    <p>
    <label>
    <textarea name="testo" cols="50" rows="5" id="testo"></textarea>
    </label>
    </p>
    </p>
    <input type="submit" name="invia" id="invia" value="Invia" />

    </p>
    </fieldset>
    </form>
    </body>
    </html>

    PHP

    <?php

    $destinatario = "[email protected]";
    $oggetto = "email";

    $messaggio = "nome: ".htmlentities($_POST['nome']);
    $messaggio = "citta: ".htmlentities($_POST['citta']);
    $messaggio = "Email: ".htmlentities($_POST['email']);
    $messaggio = "testo: ".htmlentities($_POST['testo']);

    $da = $email ;
    $intestazioni = "From: $da";

    mail($destinatario,$oggetto,$messaggio,$intestazioni);

    ?>

    Grazie mille per l'attenzione(se ci sarà :1:

    Saluti


  • User Attivo

    Devi modificare le quattro righe dove assegni i valori al messaggio in questo modo:
    [php]$messaggio = "nome: ".htmlentities($_POST['nome'])."\n";
    $messaggio .= "citta: ".htmlentities($_POST['citta'])."\n";
    $messaggio .= "Email: ".htmlentities($_POST['email'])."\n";
    $messaggio .= "testo: ".htmlentities($_POST['testo']);[/php]

    In questo modo concateni i vari valori e aggiungi anche un "a capo".


  • User Newbie

    Grazie mille per la risposta...funziona tutto adesso...
    Per caso sai anche se esiste qualcosa di facile facile per rendere obbligatori nome e email per esempio? Cioè che se non mettono quelli la mail non viene inviata?

    Grazie ancora per l'attenzione e la disponibilità..

    Saluti


  • User Attivo

    Ecco come potresti fare per controllare che siano stati inseriti il nome e l'e-mail:
    [php]if (isset($_POST['nome']) && is_string($_POST['nome']) && trim($_POST['nome']) != '')
    && isset($_POST['email']) && is_string($_POST['email']) && trim($_POST['email']) != '')) {
    //Codice per inviare l'e-mail
    } else {
    echo 'Devi compilare i campi nome e e-mail.';
    }[/php]


  • User

    Buongiorno, prima di scrivere al form ho provato e riprovato ma purtroppo non sono riuscito a capire che codice mi manca. praticamente ho copiato un form dal un sito, l'ho messo in ogni pagina del mio sito, ma non capisco che codice manca per fare in modo che tutti i dati vengano inviati al " mio" indirizzo mail. vi scrivo il codice che ho messo in tutte le pagine <h4>RICHIESTE INFO</h4>
    <form id="form_prenotazione" name="form_prenotazione" method="post" action="prenotazione-villaggi-vieste.html" onsubmit="return validateFormPrenotazione();">

    <input name="nomecognome" type="text" id="nomecognome" value="nominativo" onfocus="this.value=''" />
    <input name="email" type="text" id="email" value="e-mail" onfocus="this.value=''" />

    <textarea name="messaggio">Note</textarea>

    <input type="checkbox" name="checkbox" value="checkbox" />
    <a href="#" onclick="window.open('privacy.html','','scrollbars=yes,width=500,height=500,location =1'); return false;">privacy</a>

    <input type="submit" name="Submit_prenotazione" value="RICHIEDI ORA" class="submitbutton" />

    </form> ho provato a inserire questo codice all'inizio della pagina prenotazione-villaggi-vieste.html . <?
    $MailToAddress = "...........";
    $MailFromAddress = $Email;
    $MailSubject = "Utente che chiede info dal mio sito";
    if (!$MailFromAddress) {
    $MailFromAddress = "Tuo nome";
    }
    $Header = "Utente che desidera informazioni su...";
    $Footer = "_______________________________________";
    ?>
    ma niente .. attendo un vostro aiuto.. vi ringrazio anticipatamente Marco


  • Super User

    Ciao Marco,

    Per mandare una email bisogna usare la funzione mail() che tu non stai usando.

    Come al solito gli esempi migliori sono sul manuale di PHP, in questo caso ce ne sono addirittura quattro:

    php.net/manual/en/function.mail.php


  • User

    Ciao, innanzitutto ti ringrazio per la celere risposta. purtroppo ho provato con i vari manuali ma non sono riuscito. gentilmente potresti scrivermi tu il codice magari con affianco la spiegazione " almeno una volta per tutte capisco il meccanismo ! grazie ancora .. ps non è molto che mi sono appassionato in questo campo ... sono ancora inesperto !!! ti ringrazio ancora per l'interessamento


  • Super User

    Ciao Marco

    Più semplice di così è impossibile

    mail('[email protected]','Oggetto','Messaggio');


  • User

    ho provato a mettere il tuo codice <?php
    mail('[email protected]','Oggetto','Messaggio');
    ?> nella pagina ........... prenotazione-villaggi-vieste.html ............ ho cambiato la mail ma ancora niente..


  • Super User

    C'è scritto qualcosa nel log degli errori?


  • User

    <form id="form_prenotazione" name="form_prenotazione" method="post" action="prenotazione-villaggi-vieste.html" onsubmit="return validateFormPrenotazione();">

    <input name="nomecognome" type="text" id="nomecognome" value="nominativo" onfocus="this.value=''" />
    <input name="email" type="text" id="email" value="e-mail" onfocus="this.value=''" />

    <textarea name="messaggio">Note</textarea>

    <input type="checkbox" name="checkbox" value="checkbox" />
    <a href="#" onclick="window.open('privacy.html','','scrollbars=yes,width=500,height=500,location =1'); return false;">privacy</a>

    <input type="submit" name="Submit_prenotazione" value="RICHIEDI ORA" class="submitbutton" />

    </form>
    e nella pagina
    prenotazione-villaggi-vieste.html
    <?php
    mail('[email protected]','Oggetto','Messaggio');
    ?>

    <head>