• User Attivo

    Prova in questo modo:

    [php]
    $message = "";

    foreach($_POST as $key => $value) {

    $message .= $key . ": " . $value . "\n";

    }
    [/php]

    Ciao!


  • User

    Grazi Sups, funziona 🙂

    Mi rimane però ancora un problema, non so come poter usare il checkbox per fare si che l'E-Mail venga inviato solo nel caso questo sia ceccato.


  • User Attivo

    Bene! 🙂

    Per il checkbox:
    Una possibile soluzione in JS:

    
    <script type="text/javascript">
    function conferma_invio()
    {
        var check = document.getElementById("check_invio")
    
        if(!check.checked)
        {
            alert("Devi confermare!");
            return false;
        }
        else
            return true;
    
        return false;
    }
    </script>
    <input type="checkbox" name="conferma" value="si" id="check_invio" />Conferma Invio
    <input type="submit" value="Invia" onclick="return conferma_invio();" />
    [code]
    
    Solo con PHP:
    
    [code]
    <input type="checkbox" name="conferma" value="si" />Conferma Invio
    <input type="submit" value="Invia" />
    
    ... nella pagina che riceve i dati ...
    
    if(!isset($_POST["conferma"]))
    {
        echo "Azione da eseguire per la mancata conferma";
        exit;
    }
    
    echo "Conferma ricevuta!";
    
    

  • User Attivo

    Bene! 🙂

    Per il checkbox:
    Una possibile soluzione in JS:

    
    <script type="text/javascript">
    function conferma_invio()
    {
        var check = document.getElementById("check_invio")
    
        if(!check.checked)
        {
            alert("Devi confermare!");
            return false;
        }
        else
            return true;
    
        return false;
    }
    </script>
    <input type="checkbox" name="conferma" value="si" id="check_invio" />Conferma Invio
    <input type="submit" value="Invia" onclick="return conferma_invio();" />
    
    

    Solo con PHP:

    
    <input type="checkbox" name="conferma" value="si" />Conferma Invio
    <input type="submit" value="Invia" />
    
    ... nella pagina che riceve i dati ...
    
    if(!isset($_POST["conferma"]))
    {
        echo "Azione da eseguire per la mancata conferma";
        exit;
    }
    
    echo "Conferma ricevuta!";
    
    

    In alternativa puoi combinare i due metodi, per quelli che hanno un browser senza JS.


  • User

    Grazie, ho fatto nel seguente modo e sembra funzionare 🙂

    <?php
    $mailto = "[email protected]";
    $subject = "Eintragen";
    $redirect = "eintragen-ok.htm";

    $messaggio="";

    $message = "";

    foreach($_POST as $key => $value) {

    $message .= $key . ": " . $value . "\n";

    }

    if(!isset($_POST["conferma"])) {
    echo ('Kann nicht gesendet werden. Zurück zur vorherigen Seite und versuchen Sie einmal, danke.</p>');
    exit;
    }

    echo "Conferma ricevuta!";

    if (@mail($mailto, $subject, $message)) {
    header("Location: $redirect");
    } else {
    echo('

    Kann nicht gesendet werden. Zurück zur vorherigen Seite und versuchen Sie einmal, danke.</p>');
    }
    ?>

    Ora per ottimizzarlo devo solo trovare come fare per evitare spam, pensavo all'inserimento di lettere e numeri generati come immagine.

    Hai idea di dove trovo qualche esempio?


  • User

    Grazie, ho fatto nel seguente modo e sembra funzionare 🙂

    <?php
    $mailto = "[email protected]";
    $subject = "Eintragen";
    $redirect = "eintragen-ok.htm";

    $messaggio="";

    $message = "";

    foreach($_POST as $key => $value) {

    $message .= $key . ": " . $value . "\n";

    }

    if(!isset($_POST["conferma"])) {
    echo ('Kann nicht gesendet werden. Zurück zur vorherigen Seite und versuchen Sie einmal, danke.</p>');
    exit;
    }

    echo "Conferma ricevuta!";

    if (@mail($mailto, $subject, $message)) {
    header("Location: $redirect");
    } else {
    echo('

    Kann nicht gesendet werden. Zurück zur vorherigen Seite und versuchen Sie einmal, danke.</p>');
    }
    ?>

    Ora per ottimizzarlo devo solo trovare come fare per evitare spam, pensavo all'inserimento di lettere e numeri generati come immagine.

    Hai idea di dove trovo qualche esempio?


  • User Attivo

    Prima di tutto togli echo "Conferma ricevuta!"; se vuoi fare header("Location: $redirect");, altrimenti da errore, non puoi settare l'header dopo aver scritto testo nella pagina.
    Per l'immagine come antispam puoi usare il sistema CAPTCHA, con una semplice ricerca (captcha in php) ne trovi un'infinità.

    Prova qui e *(http://www.w3facile.com/php/verifica-antispam-captcha-php-tutorial.html)i.

    Ciao!


  • User Attivo

    Prima di tutto togli echo "Conferma ricevuta!"; se vuoi fare header("Location: $redirect");, altrimenti da errore, non puoi settare l'header dopo aver scritto testo nella pagina.
    Per l'immagine come antispam puoi usare il sistema CAPTCHA, con una semplice ricerca (captcha in php) ne trovi un'infinità.

    Prova qui e *(http://www.w3facile.com/php/verifica-antispam-captcha-php-tutorial.html)i.

    Ciao!


  • User

    Si, ho creato la pagina captcha.php con il seguente codice:

    <?php
    header("Content-type: image/png");
    $x = 200;
    $y = 75;
    $code = substr($_GET['code'],0,9);
    $space = $x / (strlen($code)+1);

    $img = imagecreatetruecolor($x,$y);

    $bg = imagecolorallocate($img,255,255,255);
    $border = imagecolorallocate($img,0,0,0);
    $colors[] = imagecolorallocate($img,128,64,192);
    $colors[] = imagecolorallocate($img,192,64,128);
    $colors[] = imagecolorallocate($img,108,192,64);

    imagefilledrectangle($img,1,1,$x-2,$y-2,$bg);
    imagerectangle($img,0,0,$x-1,$y-2,$border);

    for ($i=0; $i< strlen ($code); $i++)
    {
    $color = $colors[$i % count($colors)];
    imagettftext($img,28+rand(0,8),-20+rand(0,40),($i+0.3)*$space,50+rand(0,10),$color,'arial.ttf',$code{$i});
    }

    for($i=0;$i<400;$i++)
    {
    $x1 = rand(3,$x-3);
    $y1 = rand(3,$y-3);
    $x2 = $x1-2-rand(0,8);
    $y2 = $y1-2-rand(0,8);
    imageline($img,$x1,$y1,$x2,$y2,$colors[rand(0,count($colors)-1)]);
    }

    imagepng($img);
    ?>

    E caricato nella stessa cartella sul server arial.ttf.

    Digitando il Link ch-regio-info.ch/captcha.php?code=test viene generato il codice, ma non ho capito come poi integrarlo come controllo nella pagina eintragen.htm.


  • User Attivo

    Metti un campo di testo dove scrivere l'utente deve ricopiare il codice dell'immagine.
    Poi all'invio, controlli il codice inserito se è uguale a quello utilizzato dall'immagine.
    Puoi utilizzare le sessioni per questo:

    
    session_start();
    $_SESSION["code"] = "test";
    ...
    <img src="captcha.php" />
    Ricopia codice: <input type="text" name="nospam" />
    
    ... in "captcha.php" aggiungi ...
    session_start();
    header("Content-type: image/png");
    $code = substr($_SESSION['code'],0,9);
    
    ... nella pagina che riceve ...
    if($_POST["nospam"] != $_SESSION["code"])
        echo "Errore SPAM";
    
    

  • User Attivo

    Metti un campo di testo dove scrivere l'utente deve ricopiare il codice dell'immagine.
    Poi all'invio, controlli il codice inserito se è uguale a quello utilizzato dall'immagine.
    Puoi utilizzare le sessioni per questo:

    
    session_start();
    $_SESSION["code"] = "test";
    ...
    <img src="captcha.php" />
    Ricopia codice: <input type="text" name="nospam" />
    
    ... in "captcha.php" aggiungi ...
    session_start();
    header("Content-type: image/png");
    $code = substr($_SESSION['code'],0,9);
    
    ... nella pagina che riceve ...
    if($_POST["nospam"] != $_SESSION["code"])
        echo "Errore SPAM";
    
    

  • User

    Scusa, questa prima parte

    session_start();
    $_SESSION["code"] = "test"

    dove la dovrei mettere?


  • User Attivo

    Devi metterla nella pagina dove c'è il form da compilare, così come il tag img che punta al file captcha.php

    Es.

    
    <?php
    session_start();
    $_SESSION["code"] = "test"
    ?>
    <html ...
    ...
    <form ...
    ...
    <img src="captcha.php" />
    Ricopia codice: <input type="text" name="nospam" />
    
    

  • User

    😞 si, ma in ch-regio-info.ch/eintragen.htm non mi appare nessun testo.


  • User Attivo

    Converti la pagina html in php "eintragen.php", altrimenti non viene interpretato il codice php iniziale.


  • User

    Ciao, ho fatto e in effetti funziona, o meglio appare la scritta, solo che invece di generare un testo questa riproduce sempre solo la parola "test" e inoltre anche scrivendo la parola giusta da errore come SPAM.


  • User Attivo

    Nella pagina con il form di invio:

    
    $_SESSION["code"] = "test";
    
    

    definisce la parola chiave che deve essere copiata dall'utente.
    Se vuoi del testo casuale metti in questo caso:

    
    function codice_casuale($len)
    {
        $caratteri = "abcdefghiljkmnopqrstuvwxyz0123456789";
        $codice = "";
    
        for($i =  0; $i <= $len; $i++)
        {
            $random = rand(0, strlen($caratteri) - 1);
    
            $codice .= substr($caratteri, $random, 1);
        }
    
        return $codice;
    }
    
    $_SESSION["code"] = codice_casuale(5);
    
    

    Mentre, per risolvere il controllo che restituisce sempre spam, devi aggiungere session_start(); all'inizio del file che invia l'email, mi sono dimenticato di metterlo nel post precedente.


  • User

    Grazie mille, mi hai dato veramente un grande aiuto!
    Ora sembra funzionare correttamente 🙂
    Grazie ancora


  • User Attivo

    Prego! 😉