aggiunta campo in Spacemarc Email 1.1.0   facebook   twitter   google+

Discussioni su PHP, Apache e MySQL

Moderatore: spacemarc

akira78
Membro junior
Messaggi: 11
Iscritto il: 15 lug 2014, 10:45

aggiunta campo in Spacemarc Email 1.1.0

Messaggio da akira78 » 15 lug 2014, 10:54

Buongiorno a tutti,
ho implementato il modulo form Spacemarc Email 1.1.0 sul sito e funziona. Ho solo il problema di riuscire ad inserire un campo "Telefono" sotto al campo "Email" ed a far effettuare il controllo su quel campo affinchè vengano inseriti solo numeri.
Ho provato ad aggiungerlo ma non viene preso in considerazione ed il dato non appare nell'email inviata al destinatario.
Siccome sono poco esperto di php, volevo avere qualche dritta al riguardo... :bhò:

Ho provato a cercare risposte sul forum ma non ho trovato niente al riguardo, spero di non aver cercato male! :oops:

Grazie 1000 in anticipo a chiunque mi risponderà! :D

akira78
Membro junior
Messaggi: 11
Iscritto il: 15 lug 2014, 10:45

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da akira78 » 15 lug 2014, 16:12

Per maggiore chiarezza posto qui il codice completo del file email.php:

Codice: Seleziona tutto

session_start();
header('Content-type: text/html; charset=ISO-8859-1');

function captcha() {
    $numb1 = rand(1, 9);
    $numb2 = rand(1, 9);
    $sommanumeri = $numb1 + $numb2;
    $moltipnumeri = $numb1 * $numb2;
    
    $operazioni = array(
        1 => $sommanumeri,
        2 => $moltipnumeri
    );
    $rand = rand(1, 2);
    $_SESSION['antispam'] = $operazioni[$rand];
    $str1 = $numb2;
    $str2 = $numb1;
    $rand_strings = array_rand(array_flip(array($str1, $str2)), 1);
    
    if ($rand == 1) {        
        return  $str1 . ' + ' . $str2;
    } else {
        return $str1 . ' x ' . $str2;
    }
}

$risultato = NULL;
$errore_captcha = NULL;

if (isset($_POST['submit'])) {
    $mittente = (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) ? stripslashes(trim($_POST['mittente'])) : trim($_POST['mittente']);
    
    switch ($_POST['reparto']) {
        case 'generico':
              $email_destinatario = 'info@xxxxxxxxxxxx.com';
         break;
         //case 'commerciale':
         //     $email_destinatario = 'commerciale@sito.tld';
         //break;
         //case 'tecnico':
         //     $email_destinatario = 'tecnico@sito.tld';
         //break;
    }
    
		if ( !preg_match('/^[.a-zA-Z0-9\-\'\s]{1,40}$/', $mittente) || !preg_match('/^[.a-z0-9_-]+@[.a-z0-9_-]+\.[a-z]{2,4}$/', $_POST['email_mittente']) || empty($_POST['telefono']) || empty($_POST['messaggio']) ) {
        $risultato = '<div id="error" style="color: #FF0000;"><span class="testonorm">Riempire tutti i campi in maniera corretta!</span></div>';
    }
    else {
		if  ($_POST['spamcode'] != @$_SESSION['antispam']) {
            $errore_captcha = '<div id="error" style="color: #FF0000;"><span class="testonorm">Risposta antispam errata!</span></div>';
        }
        else {
            $messaggio = (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) ? stripslashes(strip_tags($_POST['messaggio'])) : strip_tags($_POST['messaggio']);
            $phpversion = (!@phpversion()) ? "N/A" : phpversion();
            $header = "From: " . $mittente . " <" . $_POST['email_mittente'] . ">\n";
            $header.= "Reply-To: " . $_POST['email_mittente'] . "\n";
            $header.= "Return-Path: " . $_POST['email_mittente'] . "\n";
            $header.= "X-Mailer: PHP " . $phpversion . "\n";
            $header.= "MIME-Version: 1.0\n";
            $header.= "Content-type: text/plain; charset=ISO-8859-1\n";
            $header.= "Content-Transfer-encoding: 7bit\n";
            if (@mail($email_destinatario, "Modulo per reparto [" . $_POST['reparto'] . "]", "\nDa: " . $mittente . " (" . $_POST['email_mittente'] . " - IP: " . $_SERVER['REMOTE_ADDR'] . ")\n\n$telefono\n\n$messaggio", $header)) {
                $risultato = '<div id="success"><span class="testonorm">Modulo inviato, grazie.</span></div>';
                header('refresh: 4; url=' . $_SERVER['PHP_SELF']);
            }
            else {
                $risultato = '<div id="error" style="color: #FF0000;"><span class="testonorm">Si &egrave; verificato un errore: riprova pi&ugrave; tardi</span></div>';
                header('refresh: 4; url=' . $_SERVER['PHP_SELF']);
        }
	    }
   }
}
?>
<!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">           
  <head>                   
    <title>Contatti</title>                 
  <link href="../stili.css" rel="stylesheet" type="text/css" />
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <style type="text/css">
  body {
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
	background-color: #EEE;
}
  </style>
  </head>           
<body text="#000000">
    <div id="main" align="center">
      <form method="post" name="modulo" action="email.php" id="modulo">
        <table border="0" bgcolor="#EEEEEE" cellspacing="5" cellpadding="5">  
          <tr>
            <td align="left" class="testonorm">Nome</td>
          <td align="left">
            <input name="mittente" type="text" class="testonorm" size="34" maxlength="40" /></td>  
          </tr>  
          <tr>
            <td align="left" class="testonorm">Email</td>
            <td align="left"><input name="email_mittente" type="text" class="testonorm" size="34" maxlength="40" /></td>  
          </tr>
          <tr>
            <td align="left" class="testonorm">Telefono</td>
            <td align="left"><input name="telefono" type="text" class="testonorm" size="34" maxlength="40" /></td>
          </tr>  
          <tr>
            <td align="left" class="testonorm">Invia a</td>
            <td align="left"><select name="reparto" class="testonorm">     
                <option value="generico" selected="selected">Info 
                </option>     
                      
              </select>
              </td>  
          </tr>  
          <tr>      
            <td align="left" valign="top" class="testonorm">Messaggio</td>
              <td align="left"><textarea name="messaggio" cols="56" rows="6" class="testonorm"></textarea><br /><?php echo $risultato . ' ' . $errore_captcha; ?> <br />
                <span class="testonorm">Quanto fa</span> <?php echo captcha(); ?> <input name="spamcode" type="text" size="2" maxlength="2" /> &nbsp; <input name="submit" type="submit" class="testonorm" id="submit" style="font-weight: bold;" value="Invia modulo" />
              </td>  
          </tr>         
        </table> 
      </form> 
      <br /> 
                    
      <!-- Spacemarc Email (C) http://www.spacemarc.it -->   
    </div>
  </body>
</html>
Probabilmente manca qualcosa nel codice php perchè il controllo del campo viene fatto e da errore se non lo riempio, però nella mail che spedisco il campo "telefono" non appare...HELP!

Avatar utente
spacemarc
Amministratore
Messaggi: 1074
Iscritto il: 22 giu 2002, 15:16
Località: Italia
Contatta:

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da spacemarc » 15 lug 2014, 20:34

ciao
aggiungi questa preg_match (al posto del controllo che hai messo tu):

Codice: Seleziona tutto

!preg_match('/^[0-9]{6,10}$/', $_POST['telefono'])


e nel corpo dell'email sostituisci la variabile $telefono con:

Codice: Seleziona tutto

" . $_POST['telefono'] . "
spacemarc.it

akira78
Membro junior
Messaggi: 11
Iscritto il: 15 lug 2014, 10:45

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da akira78 » 15 lug 2014, 22:20

Perfetto!!! :mavieni:
Grazie mille, funziona bene ora....

Visto che ci sono ti chiedo un'altra cosa se possibile: si può fare in modo che, in caso di errata compilazione di un campo o dell'operazione per il captcha, il modulo non venga resettato automaticamente?Visto che qualcuno potrebbe scrivere nel messaggio anche delle frasi abbastanza lunghe e complesse, ritrovarsi a dover scrivere tutto dall'inizio solo per aver compilato male un campo o aver fatto male una moltiplicazione potrebbe essere decisamente snervante!
Penso sarebbe bene permettere la correzione dei dati o l'implementazione di quelli mancanti facendo casomai resettare solo il captcha e lasciando invariati gli altri campi già riempiti... a quel punto sarebbe perfetto!! :D

Fammi sapere se si può fare qualcosa in tal senso, intanto grazie di nuovo per l'aiuto!

Avatar utente
spacemarc
Amministratore
Messaggi: 1074
Iscritto il: 22 giu 2002, 15:16
Località: Italia
Contatta:

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da spacemarc » 16 lug 2014, 14:11

dovresti inserire questo controllo per ogni campo:

Codice: Seleziona tutto

value="<?php echo (isset($_POST['nomecampo'])) ? htmlentities($_POST['nomecampo'], ENT_QUOTES) : NULL; ?>"
spacemarc.it

akira78
Membro junior
Messaggi: 11
Iscritto il: 15 lug 2014, 10:45

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da akira78 » 21 lug 2014, 16:44

Ciao, scusa per il ritardo nella risposta ma ho avuto qualche problemino col portatile....
Ho inserito la stringa che mi hai indicato sui campi e sembra funzionare su tutti tranne che sul campo messaggio (la "textarea"), cioè proprio su quello in cui serve di più!!

Puoi cortesemente controllare se l'ho messo bene?

Codice: Seleziona tutto

<textarea name="messaggio" cols="56" rows="6" class="testonorm" value="<?php echo (isset($_POST['messaggio'])) ? htmlentities($_POST['messaggio'], ENT_QUOTES) : NULL; ?>"></textarea>
Grazie ancora! :D

Avatar utente
spacemarc
Amministratore
Messaggi: 1074
Iscritto il: 22 giu 2002, 15:16
Località: Italia
Contatta:

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da spacemarc » 21 lug 2014, 20:17

per la textarea non esiste l'attributo "value"

<textarea...><?php echo (isset($_POST['messaggio'])) ? htmlentities($_POST['messaggio'], ENT_QUOTES) : NULL; ?></textarea>
spacemarc.it

akira78
Membro junior
Messaggi: 11
Iscritto il: 15 lug 2014, 10:45

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da akira78 » 21 lug 2014, 20:38

Perfetto!! :ganzo:

Grazie mille... :D

akira78
Membro junior
Messaggi: 11
Iscritto il: 15 lug 2014, 10:45

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da akira78 » 31 dic 2014, 12:54

Eccomi di nuovo qui.... :ciauz: intanto tanti auguri per il Natale da poco passato e per il 2015 che sta per arrivare!

Nuovo dilemma con lo script:
stavolta devo aggiungere un campo "select" per far scegliere all'utente tra 2 opzioni, solo che non so come far controllare quel campo... inoltre (non so se dipende da un'errata configurazione da parte mia), ogni volta che faccio un test online per l'invio della mail dal modulo, mi viene indicato "Risposta antispam errata" anche se questa è giusta!

Il codice è il seguente:

Codice: Seleziona tutto

session_start();
header('Content-type: text/html; charset=ISO-8859-1');

function captcha() {
    $numb1 = rand(1, 9);
    $numb2 = rand(1, 9);
    $sommanumeri = $numb1 + $numb2;
    $moltipnumeri = $numb1 * $numb2;
    
    $operazioni = array(
        1 => $sommanumeri,
        2 => $moltipnumeri
    );
    $rand = rand(1, 2);
    $_SESSION['antispam'] = $operazioni[$rand];
    $str1 = $numb2;
    $str2 = $numb1;
    $rand_strings = array_rand(array_flip(array($str1, $str2)), 1);
    
    if ($rand == 1) {        
        return  $str1 . ' + ' . $str2;
    } else {
        return $str1 . ' x ' . $str2;
    }
}

$risultato = NULL;
$errore_captcha = NULL;

if (isset($_POST['submit'])) {
    $mittente = (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) ? stripslashes(trim($_POST['mittente'])) : trim($_POST['mittente']);
    
    switch ($_POST['reparto']) {
        case 'generico':
              $email_destinatario = 'info@xxxxxxxxxxxxxxxx.com';
         break;
         //case 'commerciale':
         //     $email_destinatario = 'commerciale@sito.tld';
         //break;
         //case 'tecnico':
         //     $email_destinatario = 'tecnico@sito.tld';
         //break;
    }
	
  
		if ( !preg_match('/^[.a-zA-Z0-9\-\'\s]{1,40}$/', $mittente) || !preg_match('/^[.a-z0-9_-]+@[.a-z0-9_-]+\.[a-z]{2,4}$/', $_POST['email_mittente']) || !preg_match('/^[0-9]{6,10}$/', $_POST['telefono']) || empty($_POST['messaggio']) ) {
        $risultato = '<div id="error" style="color: #FF0000;"><span class="testonorm">Riempire tutti i campi in maniera corretta!</span></div>';
    }
    else {
		if  ($_POST['spamcode'] != @$_SESSION['antispam']) {
            $errore_captcha = '<div id="error" style="color: #FF0000;"><span class="testonorm">Risposta antispam errata!</span></div>';
        }
        else {
            $messaggio = (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) ? stripslashes(strip_tags($_POST['messaggio'])) : strip_tags($_POST['messaggio']);
            $phpversion = (!@phpversion()) ? "N/A" : phpversion();
            $header = "From: " . $mittente . " <" . $_POST['email_mittente'] . ">\n";
            $header.= "Reply-To: " . $_POST['email_mittente'] . "\n";
            $header.= "Return-Path: " . $_POST['email_mittente'] . "\n";
            $header.= "X-Mailer: PHP " . $phpversion . "\n";
            $header.= "MIME-Version: 1.0\n";
            $header.= "Content-type: text/plain; charset=ISO-8859-1\n";
            $header.= "Content-Transfer-encoding: 7bit\n";
            if (@mail($email_destinatario, "Mail da form sito internet", "\nDa: " . $mittente . " (" . $_POST['email_mittente'] . " - IP: " . $_SERVER['REMOTE_ADDR'] . ")\n\nTelefono: " . $_POST['telefono'] . "\n\nTesto messaggio: \n$messaggio", $header)) {
                $risultato = '<div id="success" style="color:;"><span class="testonorm"><strong>Email inviata, risponderemo il prima possibile.</strong></span></div>';
                header('refresh: 4; url=' . $_SERVER['PHP_SELF']);
            }
            else {
                $risultato = '<div id="error" style="color: #3C6;"><span class="testonorm">Si &egrave; verificato un errore: riprova pi&ugrave; tardi</span></div>';
                header('refresh: 4; url=' . $_SERVER['PHP_SELF']);
        }
	    }
   }
}
?>
<!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">           
  <head>                   
    <title>Contatti</title>                 
  <link href="../style.css" rel="stylesheet" type="text/css" />
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <style type="text/css">
  body {
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
	background-image: url();
}
  </style>
  <link href="../stili.css" rel="stylesheet" type="text/css" />
  </head>           
<body>
    <div id="main" align="center">
      <form method="post" name="modulo" action="email.php" id="modulo">
        <table width="760" border="0" cellpadding="5" cellspacing="5" bgcolor="#ebeff7" class="sfondo1">  
          <tr>
            <td align="left"><strong class="testonormale">Nome / Name</strong></td>
          <td align="left">
            <input name="mittente" type="text" class="testonormale" size="34" maxlength="40" value="<?php echo (isset($_POST['mittente'])) ? htmlentities($_POST['mittente'], ENT_QUOTES) : NULL; ?>" /></td>  
          </tr>  
          <tr>
            <td align="left"><strong class="testonormale">Email</strong></td>
            <td align="left"><input name="email_mittente" type="text" class="testonormale" size="34" maxlength="40" value="<?php echo (isset($_POST['email_mittente'])) ? htmlentities($_POST['email_mittente'], ENT_QUOTES) : NULL; ?>" /></td>  
          </tr>
          <tr>
            <td align="left"><strong class="testonormale">Telefono / Phone</strong></td>
            <td align="left"><input name="telefono" type="text" class="testonormale" size="34" maxlength="40" value="<?php echo (isset($_POST['telefono'])) ? htmlentities($_POST['telefono'], ENT_QUOTES) : NULL; ?>" /></td>
          </tr>
          <tr>
            <td align="left" class="testonormale"><strong>Transfer</strong></td>
            <td align="left"><select name="Transfer" class="testonormale">     
                <option value="shuttle" selected="selected">Shuttle</option>
                <option value="private">Private</option>   
            </select></td>
          </tr>  
          <tr>
            <td align="left"><strong class="testonormale">Invia a / Send to</strong></td>
          <td align="left"><select name="reparto" class="testonormale">     
                <option value="generico" selected="selected">Info 
                </option>     
                      
              </select>
              </td>  
          </tr>  
          <tr>      
            <td align="left" valign="top"><strong class="testonormale">Messaggio / Message</strong></td>
              <td align="left"><textarea name="messaggio" cols="42" rows="4" class="testonormale"><?php echo (isset($_POST['messaggio'])) ? htmlentities($_POST['messaggio'], ENT_QUOTES) : NULL; ?></textarea><br /><?php echo $risultato . ' ' . $errore_captcha; ?> <br />
                <span class="testonormalerosso">Quanto fa</span> <?php echo captcha(); ?> <input name="spamcode" type="text" size="2" maxlength="2" /> &nbsp; <input name="submit" type="submit" class="testodisclaimer" id="submit" style="font-weight: bold;" value="Invia modulo" />
Se potessi darmi qualche indicazione al riguardo te ne sarei veramente grato... :D :D

Avatar utente
spacemarc
Amministratore
Messaggi: 1074
Iscritto il: 22 giu 2002, 15:16
Località: Italia
Contatta:

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da spacemarc » 2 gen 2015, 15:31

ciao,
il campo select è una variabile $_POST come le altre, nel tuo caso è $_POST['Transfer'] e puoi gestirlo come vuoi.

Riguardo all'invio dell'email, l'ho provato, la risposta antispam è corretta e il messaggio viene inviato
spacemarc.it

akira78
Membro junior
Messaggi: 11
Iscritto il: 15 lug 2014, 10:45

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da akira78 » 2 gen 2015, 17:46

Ciao, grazie della risposta!
A me continua a dare errore quando faccio il test online... ti chiedo troppo se puoi dare una controllata su http://www.transfercivitavecchia.com/contatti.html ?ho provato con 3 browser diversi quindi deve essere 1 problema di configurazione della pagina o del server (è un hosting)! :confused:

Nel codice ho aggiunto:

Codice: Seleziona tutto

if ( !preg_match('/^[.a-zA-Z0-9\-\'\s]{1,40}$/', $mittente) || !preg_match('/^[.a-z0-9_-]+@[.a-z0-9_-]+\.[a-z]{2,4}$/', $_POST['email_mittente']) || !preg_match('/^[0-9]{6,10}$/', $_POST['telefono']) || empty($_POST['messaggio']) || $_POST['Transfer']) {
        $risultato = '<div id="error" style="color: #FF0000;"><span class="testonorm">Riempire tutti i campi in maniera corretta!</span></div>';
    }
 
Spero vada bene così! :roll:

Grazie ancora.

Avatar utente
spacemarc
Amministratore
Messaggi: 1074
Iscritto il: 22 giu 2002, 15:16
Località: Italia
Contatta:

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da spacemarc » 2 gen 2015, 18:28

dice "campi obbligatori" e non risposta antispam errata. Questo perchè nell'if metti $_POST['Transfer'] ma senza nessun controllo su questa variabile.

Nel caso di un menù a tendina con due sole scelte un controllo in realtà non servirebbe neanche perchè arriva per email uno dei due valori, cioè quello selezionato dall'utente: puoi togliere || $_POST['Transfer']
spacemarc.it

akira78
Membro junior
Messaggi: 11
Iscritto il: 15 lug 2014, 10:45

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da akira78 » 2 gen 2015, 20:01

Tolto il controllo, ora è tornato l'errore dell'antispam... :dho:

Avatar utente
spacemarc
Amministratore
Messaggi: 1074
Iscritto il: 22 giu 2002, 15:16
Località: Italia
Contatta:

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da spacemarc » 5 gen 2015, 21:22

a me funziona, sia in localhost che online.
Fatti stampare un pò di valori, subito dopo if (isset($_POST['submit'])) inserisci

Codice: Seleziona tutto

echo '<pre>';
print_r($_SESSION);
echo '</pre>';
echo '<br />';
echo '<pre>';
print_r($_POST);
echo '</pre>';
e vedi cosa viene inviato effettivamente.
spacemarc.it

akira78
Membro junior
Messaggi: 11
Iscritto il: 15 lug 2014, 10:45

Re: aggiunta campo in Spacemarc Email 1.1.0

Messaggio da akira78 » 5 gen 2015, 21:56

Dopo aver inserito il codice da te indicato, ti allego cosa mi appare all'apertura della pagina e dopo aver riempito i campi (ovviamente ho inserito il numero corretto come risposta dell'antispam) e cliccato su "invia modulo":

Immagine

Immagine

Sto facendo i test online su Chrome ma con Mozilla fa la stessa cosa...

Rispondi

Chi c’è in linea

Visitano il forum: Google [Bot], Yahoo [Bot] e 1 ospite