PHP bottone per invio mail o ritorno al form

  • Creatore Discussione Creatore Discussione uffre
  • Data di inizio Data di inizio

uffre

Nuovo Utente
3 Nov 2019
8
0
1
Buonasera a tutti,
premesso che non ci capisco nulla di php ... e non solo ...

sono riuscito con vari scopiazzamenti qua e la nel web a creare un form che mi invia una mail dopo che il form html è compilato.
Ora nel file php vorrei mettere due button :
uno che mi riporta alla pagina precedente del form per eventuali modifiche prima dell'invio (e questo ci sono riuscito e funzione)
un altro button per inviare una volta che il form è compilato correttamente (e questo non ci riesco ho provato a mettere un button che richiama una function , ma evidentemente non si fa cosi)
.
Come potrei fare?

Grazie
PHP:
echo "<input type=\"button\" onclick=\"history.back(1)\" value=\"Torna indietro\"/><br><br><br><br>";

echo "<input type=\"button\" onclick=\"invio()\" value=\"Invio\"/><br><br><br><br>";

function invio(){
mail($receivers, $subject, $body, $headers);
echo "La mail e' stata inviata con successo. Grazie per averci contattato";
}
Marco
 
Ultima modifica di un moderatore:
@uffre
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code-gif.6007
o il tag
php-png.6009
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box-inserisci-2-png-jpg.6008


Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti prima di continuare
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 
Ciao Uffre,
la procedura è forse un po' + lunga, ma ti conviene scrivere tre moduli separati, ognuno con una propria funzione.
Di seguito i moduli molto schematizzati (uno disegna il form, uno lo processa e l'ultimo invia la mail)

form.html

HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>

<body>
<form action="contr.php" method="get">
Cognome:
<input type="text" name="cognome"><br><br>
Nome:
<input type="text" name="nome"><br><br>
E_mail:
<input type="text" name="mail"><br><br><br><br>
<input type="submit" name="submit" value="invia">
</form>
</body>
</html>

contr.php
PHP:
<?php
//recupero le variabili passate
$cognome = $_GET['cognome'];
$nome = $_GET['nome'];
$mail = $_GET['mail'];

//esegue i controlli necessari

echo '<input type="button" onClick="location.href=\'form.html\'" value="torna al form">&emsp;';
echo '<input type="button" onClick="location.href=\'invia.php\'" value="invia la mail">';
?>

ed infine invia.php
PHP:
<?php
//invia laa mail

echo 'OK. La mail è stata correttamente inviata';
?>

Come vedi sono molto stilizzati ma..... funzionano. Puoi anche vedere qui il funzionamento
Spero di esserti stato utile.


Zorro
 
Ultima modifica:
Ciao Zorro,
grazie per la risposta;
ho provato a fare come mi hai detto te ma mi si presenta un problema:
Il file CONTR.php lavora bene legge le variabili del form, e i bottoni funzionano come nel tuo link del test.
Il file INVIA.php dove ho inserito gli stessi dati del contr.php (come variabili) praticamente non mi legge i dati del form e di conseguenza non mi invia neanche la mail :-((.
Dove sbaglio?

p.s. io ho come metodo POST e non Get ma non credo possa dipendere da quello

Grazie

Marco
 
Nel file contr.php hai creato un form per passare le variabili interessate a invia.php?
Semplicemente in questo modo
Codice:
<form action="invia.php" method="post">
    <input type="hidden" name="cognome" value="<?php echo $_POST['cognome']; ?>" />
    <input type="hidden" name="nome" value="<?php echo $_POST['nome']; ?>" />
    <input type="hidden" name="mail" value="<?php echo $_POST['mail']; ?>" />
</form>
Così facendo le variabili ricevute da form.html ed elaborate in contr.php potranno essere gestite anche dal codice per l'invio della mail
 
Ciao Felotti,
grazie per la spiegazione ma ho provato ad inserire alla fine del file contr.php l'istruzione che mi hai dato
ma non capisco poi come richiamare le variabili in invia.php:
ho provato a fare cosi ma non mi da nulla

PHP:
echo "I dati inseriti sono .. <br> Nome: ". $_POST["nome"] . "<br>Cognome: " . $_POST["cognome"] . "<br>Data arrivo:
ma non mi visualizza i nomi e cognomi

Scusami ma sono molto scarso in materia.

Marco
 
C'è anche un modo + semplice: mi sono dimenticato di dirtelo: usare le sessioni. Dopo aver recuperato le variabili dal form, le dovrai salvare in altrettante variabili di sessione, che poi richiamerai all'inizio di invia.php. Dovrai quindi creare un altro modulo dove setterai le variabili ad un valore nullo:

PHP:
$_SESSION['cognome'] = '';

quindi, una volta valorizzata la variabile tramite il form (ad esempio cognome = Rossi) assegnerai il valore alla variabile di sessione

PHP:
$_SESSION['cognome'] = $cognome';

ed infine farai esattamente il contrario

PHP:
$cognome  = $_SESSION['cognome'];
all'inizio di invia.php; questo perché, passando da un modulo all'altro le variabili si perdono; usando le sessioni, invece, le puoi recuperare.
NB. Prima di qualsiasi operazione con le sessioni le devi aprire con la funzione

PHP:
session_start();

(è + facile a farsi che a dirsi)



Zorro
 
Ultima modifica:
Ciao Zorro,
quindi con il metodo che mi ha detto Felotti è giusto che non mi funzioni? perchè ho provato ma non ci sono riuscito.

Marco
 
In realtà non ho mai capito bene il funzionamento dei campi hidden, ma con le sessioni è sicuro che risolvi
Ricordati solo di inserire session_start() prima di fare qsualsiasi operazione con le sessioni. Fammi sapere come va


Zorroò
 
Con le sessioni funziona correttamente
La differenza è che le sessioni mantengono la variabile senza richiamarla ad ogni file ma solo quando ti serve.
I campi "hidden" ti servono per passare le variabili di pagina in pagina senza che queste vengano utilizzate in alcuna istruzione.
Se non vuoi usare le sessioni perchè ti appaiono complicate puoi fare una cosa di questo tipo:

form.html
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>

<body>
<form action="contr.php" method="get">
Cognome:
<input type="text" name="cognome"><br><br>
Nome:
<input type="text" name="nome"><br><br>
E_mail:
<input type="text" name="mail"><br><br><br><br>
<input type="submit" name="submit" value="invia">
</form>
</body>
</html>

contr.php
PHP:
<html>
<body>
<?php
//recupero le variabili passate
$cognome = $_GET['cognome'];
$nome = $_GET['nome'];
$mail = $_GET['mail'];
echo '<input type="button" onClick="location.href=\'form.html\'" value="torna al form">&emsp;';
echo '<input type="button" onClick="location.href=\'invia.php\'" value="invia la mail">';
?>
<form action="invia.php" method="GET">
<input type="hidden" name="cognome" value="<?php echo $cognome; ?>" />
<input type="hidden" name="nome" value="<?php echo $nome; ?>" />
<input type="hidden" name="mail" value="<?php echo $mail; ?>" />
</form>
</body>
</html>

invia.php
PHP:
<?php
//Recupero le variabili passate con hidden
$cognome = $_GET['cognome'];
$nome = $_GET['nome'];
$mail = $_GET['mail'];

//codice per inviare la mail

echo 'OK. La mail è stata correttamente inviata';
?>

Se vuoi testare il passaggio delle variabili a invia.php, al posto di inviare la mail, fai una echo e vedrai che funziona correttamente.
Per esempio:
PHP:
<?php
$cognome = $_GET['cognome'];
$nome = $_GET['nome'];
$mail = $_GET['mail'];
echo 'Ciao'.$cognome.' '.$nome.', la tua mail è: '.$mail.' !';
?>
 
E' semplicemente un'altra soluzione
Io mi son sempre trovato bene, valuterà Uffre quale soluzione applicare
Sempre meglio avere delle alternative in più che delle risposte in meno ;)
 
Grazie a tutti , ora appeno ho 5 minuti liberi provo le varie alternative e vi faccio sapere.

Saluti
 
Mi son reso conto ora di non averti inviato il codice aggiornato :mad:
Ad ogni modo, ti allego i codici dei file che ti serviranno

form.php
HTML:
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>

<body>
<form action="contr.php" method="POST">
Cognome:
<input type="text" name="cognome"><br><br>
Nome:
<input type="text" name="nome"><br><br>
E_mail:
<input type="text" name="mail"><br><br><br><br>
<input type="submit" name="submit" value="invia">
</form>
</body>
</html>

contr.php
PHP:
<html>
<body>
<?php
//recupero le variabili passate
$cognome = $_POST['cognome'];
$nome = $_POST['nome'];
$mail = $_POST['mail'];
?>

<form action="invia.php" method="POST">
Torna al form! <input type="radio" name="button" value="Form"><br>
Invia mail!<input type="radio" name="button" value="Mail">

<input type="hidden" name="cognome" value="<?php echo $cognome; ?>" />
<input type="hidden" name="nome" value="<?php echo $nome; ?>" />
<input type="hidden" name="mail" value="<?php echo $mail; ?>" />

<input type="submit" value="Scegli">
</form>
</body>
</html>

checksel.php
PHP:
<html>
<body>
<?php
//recupero le variabili passate
$cognome = $_POST['cognome'];
$nome = $_POST['nome'];
$mail = $_POST['mail'];
?>

<form action="invia.php" method="POST">
Torna al form! <input type="radio" name="button" value="Form"><br>
Invia mail!<input type="radio" name="button" value="Mail">

<input type="hidden" name="cognome" value="<?php echo $cognome; ?>" />
<input type="hidden" name="nome" value="<?php echo $nome; ?>" />
<input type="hidden" name="mail" value="<?php echo $mail; ?>" />

<input type="submit" value="Scegli">
</form>
</body>
</html>

invia.php
PHP:
<?php
$cognome = $_POST['cognome'];
$nome = $_POST['nome'];
$mail = $_POST['mail'];
include('checksel.php');

// CODICE PER INVIARE LA MAIL

//PER VERIFICARE PASSAGGIO VARIABILI INVECE:

echo 'Ciao '.$cognome.' '.$nome.', la tua mail è: '.$mail.' !';
?>

Come vedrai, al posto dei button per la scelta di tornare al form o inviare la mail, ho messo due radio
Inoltre ho aggiunto un file per il controllo della scelta fatta ed, in caso si scelga di inviare la mail, il file viene incluso in invia.php che eseguirà le varie operazioni
 
Buonasera a tutti,
ho provato tutte e due le soluzioni e funzionano tutte e due egregiamente.
Grazie
 

Discussioni simili