[PHP] modifica del body email con checked

fabriaqui

Nuovo Utente
11 Apr 2019
8
0
1
Un cordiale saluto a tutti, premetto che mastico poco di php.
In una pagina web ho più form racchiusi in uno script php come fosse uno per evitare conflitto tra più form nella stessa pagina.
Il problema però sta nella personalizzazione della e-mail inviata dal form ...mi spiego meglio.

variabili...

(e-mail form uno)
PHP:
$mail->Body .= "<strong>Hai ricevuto una richiesta di informazioni.</strong>";
...seguono i campi riempiti nel form...
(e-mail form due)
PHP:
$mail->Body .= "<strong> Hai ricevuto una richiesta di aiuto.</strong>";
...seguono i campi riempiti nel form...
Vorrei che apparisse l'una o l'altra dicitura in base alla spunta di un campo cheched posto nel form stesso denominato x o y

E' possibile fare una cosa come questa ?
 
Ultima modifica di un moderatore:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
3.978
295
83
@fabriaqui
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
o il tag
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti

Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 

fabriaqui

Nuovo Utente
11 Apr 2019
8
0
1
:eek: mammamia, cazziato al primo post.
Chiedo scusa Max, avevo letto le regole ma questa parte di è sfuggita. Non lo faccio più :(
 

marino51

Utente Attivo
28 Feb 2013
2.644
134
63
Lombardia
ho capito che,
la scelta del form da inviare, già definisce il corpo del messaggio (info/aiuto)
mentre vorresti scegliere il corpo del messaggio in ciascun form

se ho capito bene,
devi inserire la scelta in entrambi i form
HTML:
<input type='radio' id='tipo' name='tipo' value='I' /> INFO
<input type='radio' id='tipo' name='tipo' value='A' /> AIUTO
nello script richiamato, puoi gestire la scelta del corpo con uno "switch" ( per semplicità e facile comprensione )
PHP:
switch ($_POST['tipo'])
{
  case "I":
    $mail->Body .= "<strong>Hai ricevuto una richiesta di informazioni.</strong>";
    break;

  case "A":
    $mail->Body .= "<strong> Hai ricevuto una richiesta di aiuto.</strong>";
    break;

  default:
    $mail->Body .= "<strong> Hai ricevuto una richiesta.</strong>";
    break;
}
...seguono i campi riempiti nel form...
devi posizionare bene questa scelta nello script di invio della mail
 

fabriaqui

Nuovo Utente
11 Apr 2019
8
0
1
Grazie Marino51 per la risposta, effettivamente mi sono spiegato molto male e domando scusa.

Ho il classico phpmail con form nella pagina html + script con le query + php per l'invio.

Nel formo ho un campo checked con assegnato un value come di seguito...

PHP:
<input type="checkbox" id="spunta_uno" name="spunta_uno" value="prenotazione">
La spunta in questo caso mi serve per la privaci ma vorrei che contestualmente andasse ad indentificarmi il form inviato trasferendo il campo value (nell'esempio prenotazione) nel corpo della e-mail assieme agli altri dati.

Ho provato in questo modo ma non funziona ...

Codice:
script  java

var spunta_uno = $("#spunta_uno").val();
var datastr ='spunta_uno=' + spunta_uno

php

$spunta_uno = $_POST['spunta_uno'];
$mail->Body .= "<br><strong>Tipo di richiesta:</strong> $_POST[spunta_uno]";
(per brevità ho omesso gli altri campi ed il controllo della spunta che restituisce l'errore in fase di invio)

Mi restituisce nella e-mail

Codice:
Tipo di richiesta: [object HTMLInputElement]
Dove sbaglio ?
 

fabriaqui

Nuovo Utente
11 Apr 2019
8
0
1
PS in realtà mi andrebbe bene anche il tuo metodo ma invece che radio devo poter utilizzare o il pulsante di invio o il campo checkbox che andrebbero a svolgere due funzioni contemporaneamente.
Ma nel caso che hai postato tu è sufficiente richiamare i dati son con php ?
Grazie mille.
 

fabriaqui

Nuovo Utente
11 Apr 2019
8
0
1
Niente da fare, il suggerimento di Marino era buono e l'ho messo in atto ma ora ho un problema con la convivenza di più form nella stessa pagina. Come si fa per evitare il conflitto tra form ?
 

marino51

Utente Attivo
28 Feb 2013
2.644
134
63
Lombardia
i form sono definiti nella stessa pagina ma in modo individuale ( form ... /form, form ... /form)
i campi di input possono avere anche gli stessi nomi,
ma devi avere un elemento che li distingue, che potrebbe essere il valore assegnato a ciascun tasto submit ( uno per form )
"submitI" potrebbe essere per info
"submitA" potrebbe essere per aiuto
poi nello script php verificando quale dei due submit arriva, puoi impostare al meglio l'invio della mail

non riesco ad essere più specifico, non avendo codice per capire meglio
 

fabriaqui

Nuovo Utente
11 Apr 2019
8
0
1
Ok posto il codice che è basato sul classico script PHPMailer

Html

HTML:
HTML
<form class="form-inline" id="secondo_form" method="post">

<div id="errore_due" class="error-msg"></div>

<div class="form-group conf-res">
<label>Nome e Cognome</label>
<input type="text" class="form-control" id="nome_cognome_due" name="nome_cognome_due" maxlength="50" spellcheck="false" value="">
</div>

<div class="form-group iata-id">
<label >Telefono</label>
<input type="text" class="form-control iata-input" id="telefono_ass" name="telefono_ass" maxlength="20" value="">
</div>

<div class="view-res" id="invia_due">Invia</div>

<input type="checkbox" id="spunta_due" name="spunta_due" value="B">
</form>
<script src="/js/jquery.min.js"></script>
<script src="/js/jquery_mailer_due.js"></script>
/HTML
poi abbiamo il javascript ...

Codice:
$(document).ready(function(){
$("#invia_due").click(function(){
  
//Recuperiamo tutte le variabili

var valid = '';
var isr = ' manca. </h10>';
var nome_cognome_due = $("#nome_cognome_due").val();
var telefono_ass = $("#telefono_ass").val();
var checkbox_due = $("#checkbox_due").val();


//Eseguiamo una serie di controlli

if (nome_cognome_due.length<1) {
valid += 'Il nominativo'+isr;
}

if (telefono_ass.length<1) {
valid += 'Il telefono'+isr;
}

if ($("#checkbox_due").is(":not(:checked)")){
valid += '<h10>La spunta sulla privacy'+isr;
}


//Se i controlli dei campi form non vengono superati, appare il messaggio di errore.

if (valid!='') {
$("#risposta_due").fadeIn("slow");
$("#risposta_due").html("<b>Errore: </b><br/>"+valid);
$("#risposta_due").css("background-color","#FFFFE5");
}

//Se i controlli vengono superati, compare un messaggio di invio in corso
else {
var datastr ='nome_cognome_due=' + nome_cognome_due + '&telefono_ass=' + telefono_ass;
$("#risposta_due").css("display", "block");
$("#risposta_due").css("background-color","#FFFFE5");
$("#risposta_due").html("<h10>Invio del messaggio in corso..</h10>");
$("#risposta_due").fadeIn("slow");
setTimeout("send('"+datastr+"')",2000);
}

return false;
});
});

//Creazione della funzione di invio. Si baserà sul nostro file php.
//var datastr ='name=' + name + '&mail=' + mail +'&messaggio=' + encodeURIComponent(messaggio);.

function send(datastr){
$.ajax({   
type: "POST",
url: "invio_mail2.php",
data: datastr,
cache: false,
success: function(html){
$("#risposta_due").fadeIn("slow");
$("#risposta_due").html(html);
$("#risposta_due").css("background-color","#FFFFE5");
setTimeout('$("#risposta_due").fadeOut("slow")',2000);
}
});
}
ed infine il file php

PHP:
<?php

header('Content-type: text/html; charset=utf8');
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf8" />';

$data = date("j F Y G:i");
$tome = "xxxxxxxxxxx";
$soggetto = "Messaggio";
$nome_cognome_due = $_POST['nome_cognome_due'];
$telefono_ass = $_POST['telefono_ass'];
$ip = $_SERVER['REMOTE_ADDR'];


require("phpemail/class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();  // telling the class to use SMTP


$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Host       = "xxxxxxxxxxx"; // sets GMAIL as the SMTP server
$mail->Port       = 587;                   // set the SMTP port for the GMAIL

$mail->Username = "xxxxxxxxxxx"; // SMTP username
$mail->Password = "xxxxxxxxxx"; // SMTP password


$mail->From     = "xxxxxxxxxxxxx";
$mail->FromName = "xxxxxxxxxxxxx";
$mail->AddBCC("$tome");


$mail->WordWrap = 50;

$mail->IsHTML(true); // send as HTML

$mail->Subject  = "Richiesta di assistenza";
$mail->Body .= "<br>";
$mail->Body     .= ("<img src=/img/logo_in_nero.png>") ;
$mail->Body .= "<br>";
$mail->Body .= "<br>";
$mail->Body .= "<strong>Richiesta</strong>";
$mail->Body .= "<br>";
$mail->Body .= "<br><strong>Effettuata il:</strong> $data";
$mail->Body .= "<br>";
$mail->Body .= "<br><strong>Da parte di:</strong> $_POST[nome_cognome_due]";
$mail->Body .= "<br>";
$mail->Body .= "<br><strong>Numero di telefono:</strong> $telefono_ass";



//Se l'e-mail viene spedita correttamente, compare un messaggio di avvenuto invio

if(!$mail->Send()) {
  echo 'Il messaggio NON è stato inviato!<br/>';
  echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
  echo '<p>Messaggio INVIATO Grazie.</p>';
}
?>
Nella stessa pagina ho tre form come questo in cui cambiano i campi. Ciascuno ha i propri file ed i propri name ed id specifici ma vanno in conflitto. Avevo pensato che unendo i tre file php come fosse un unico form avrei risolto ma non ha funzionato.