• 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! 😉