Pulsante invia nei form

Aperto da Neville, Giovedì - 14 Agosto 2014 - 10:57

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

Neville

Ciao a tutti!  :)
Ho bisogno di creare dei form in html. Fin qui tutto ok, ci sono riuscito.
<html>
<head><title>Test form</title></head>
<body>
<form action="index.php" name="myform" method="POST">
Domanda<br>
<input type="radio" name="house" value"Risposta 1">Risposta 1<br>
<input type="radio" name="house" value"Risposta 2">Risposta 2<br>
<input type="radio" name="house" value"Risposta 3">Risposta 3<br>
<input type="radio" name="house" value"Risposta 4">Risposta 4<br>

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

Però non so come fare per far sì che una volta cliccato su Invia, le risposte spuntate vengano inviate a un indirizzo e-mail da me scelto.

Potreste darmi una mano? :)

emanuele

Una guida di php potrebbe fare al caso tuo:
http://www.html.it/pag/16695/le-variabili-get-e-post/

index.php dovraà contenere qualcosa tipo:
$testo_mail = "La risposta scelta è:";
if (!empty($_POST['house']))
{
    $test_mail .= ' ' . $_POST['house'];
    mail ('tuoindirizzo@domain.tld', 'Risposte', $testo_mail);
}

Neville

Grazie mille ;D
Allora, l'e-mail è arrivata però  non c'è scritta la risposta spuntata bensì:
"La risposta scelta č:


------------"

E inoltre è arrivata nella cartella spam  :(

emanuele

Citazione di: Neville il Giovedì - 14 Agosto 2014 - 22:49
Allora, l'e-mail è arrivata però  non c'è scritta la risposta spuntata bensì:
"La risposta scelta č:


------------"
Quel simbolo strano mi fa pensare ci sia qualche problema di encoding... non mi meraviglia.
I testi delle mail "pretendono" cose un po' particolari per funzionare "correttamente".

Citazione di: Neville il Giovedì - 14 Agosto 2014 - 22:49
E inoltre è arrivata nella cartella spam  :(
Nulla di nuovo, mi meraviglierei del contrario... lol
Quello che ho messo è una versione estremamente basilare dell'invio di una mail, ed al giorno d'oggi la maggior parte dei client di posta rischiano di riconoscerla come spam.
Se "puoi", io ti consiglierei di usare SMF, quindi richiamando SSI.php e poi usando la funzione sendmail che si dovrebbe occupare di impostare correttamente tutto ciò che è necessario:
<?php
require_once('/path/to/SSI.php');
require_once(
$sourcedir '/Subs-Post.php');

$oggetto 'Oggetto della mail';
$testo 'Testo della mail';
$destinatario 'destinatario@della.mail';
// oppure:
// $destinatario = array('destinatario1@della.mail', 'destinatario2@della.mail', 'destinatario3@della.mail');
// se lo devi inviare a più indirizzi.

sendmail($destinatario$oggetto$testo);


Neville

Allora, iniziamo con ordine  :P
Ho sbagliato, questo codice funziona!
$testo_mail = "La risposta scelta è:";
if (!empty($_POST['house']))
{
    $test_mail .= ' ' . $_POST['house'];
    mail ('tuoindirizzo@domain.tld', 'Risposte', $testo_mail);
}

L'unica cosa è che se voglio inserire due domande e quindi ricevere nell'email due risposte come faccio?
Ho provato a cambiare un po' le stringhe di codice, ma l'unica cosa che sono riuscito ad ottenere è il ricevere due email con le due risposte. Io vorrei ricevere le due risposte in un'unica email  :(

Comunque il secondo codice che mi hai scritto, quello in cui devo richiamare SSI.php, funziona solo se inserisco un box di testo?

Neville

#5
Ci sono riuscito  ;D

Questo è il codice HTML:
<form method="post" id="form" action="form.php">
Name*
<input type="text" name="name" id="name" class="txt" value=""/>

Email*
<input type="text" name="email" id="email" class="txt" value=""/>

Domanda 1
<input class="radio" type="radio" name="primadomanda" value="A" checked/>A
<input class="radio" type="radio" name="primadomanda" value="B" />B
<input class="radio" type="radio" name="primadomanda" value="C" />C
<input class="radio" type="radio" name="primadomanda" value="D" />D
<br>
<br>
Domanda 2
<input class="radio" type="radio" name="seconda" value="A" checked />A
<input class="radio" type="radio" name="seconda" value="B" />B
<input class="radio" type="radio" name="seconda" value="C" />C
<input class="radio" type="radio" name="seconda" value="D" />D
<br>
<br>
<input class="submit" type="submit" name="submit" value="Submit Form">
</form>


Questo è il codice PHP:
<?php
foreach($_POST as $item){
if(
$item == ''){ 
echo 
"Errore, devi compilare tutti i campi!";
exit;
}
}
  
$name    stripslashes($_POST['name']);
  
$email   stripslashes($_POST['email']);
  
$primadomanda $_POST['primadomanda'];
  
$seconda $_POST['seconda'];



$form_message "Name: $name \nEmail: $email \nDomanda 1: $primadomanda \nDomanda 2: $seconda";


// Exit process if field "human" is filled (because this means it is spam)
if ( $_POST['human'] ) {
  echo 
'Tastes Like Spam!'; exit; }
// if it is not filled, submit form
else {
  
header"Location: http://sito.altervista.org/index.php");

  
mail("email@gmail.com""Email Subject"$form_message"From: $email);
}
?>

L'unica cosa è che vorrei che il form fosse compilabile una sola volta. E' possibile?

emanuele

Consiglio: prima invia la mail, *poi* fa il redirect con header (anche se settare l'header non innesca il redirect immediatamente, meglio evitare rischi ;)).

CitazioneL'unica cosa è che vorrei che il form fosse compilabile una sola volta. E' possibile?
Solo se "ti ricordi" di chi ha già inviato la mail.
Ora, come fare a ricordarsi dipende da molti fattori, per esempio se stessi usando SMF e consentissi di rispondere solo agli utenti registrati potresti usare un certo modo, se stessi usando SMF e consentissi a tutti di rispondere, potresti usare un altro metodo, se non stai usando SMF minimamente... beh, hai svariate alternative.

Neville

Ok grazie mille per il consiglio! :)

Sì, beh, l'idea era quella di fare un form con SMF in modo tale che il "sistema" riconoscesse chi sta inviando il form (nickname, email) però ho cercato un po' su internet e non ho trovato nulla. E' qualcosa di complicato e lungo da fare?


emanuele

No, direi che non è più difficile che farlo senza.
Se poi aggiungi che hai già la connessione al database direi che è più comodo.

Quindi da quel che leggo mi pare di capire che ti rivolgeresti agli utenti già registrati, corretto?

Neville

Esattamente. Vorrei che il form possa essere compilato solo dagli utenti registrati una volta sola. Per gli ospiti, invece, quando tentanto di visitare la pagina in cui si trova il form, esca un avviso con scritto di registrarsi per eseguire il test, e per gli utenti registrati che hanno già inviato il form, esca un avviso con scritto di attendere il risultato del test  :)


P.S.= Ma l'orario del forum è indietro di 8 minuti? O è solo un mio problema?

Neville

Per collegarmi al database devo scrivere una cosa del genere nel file .php?
mysql_connect("sito.altervista.org", "username", "password") or die(mysql_error());
mysql_select_db("Database_Name") or die(mysql_error());

Darknico

Citazione di: Neville il Giovedì - 04 Settembre 2014 - 11:04
P.S.= Ma l'orario del forum è indietro di 8 minuti? O è solo un mio problema?

No, anche a me...prende l'ora del server....strano...verifico appena ho tempo...grazie!
Non supporto privatamente, non risponderei e ci rimarreste male....

emanuele

Sorry, l'altro ieri son stato male ed ho perso il topic.

Allora, siccome vorresti farlo con SMF, lascia stare il 90% di quello che ti ho detto in precedenza.

In particolare il codice per inviare la mail diverrebbe:
<?php
require_once('/percorso/al/forum/SSI.php');

foreach(
$_POST as $item){
if(
$item == ''){ 
fatal_error("Errore, devi compilare tutti i campi!"false);
}
}

  
$name    $smcFunc['htmlspecialchars']($_POST['name']);
  
$email   $smcFunc['htmlspecialchars']($_POST['email']);
  
$primadomanda $smcFunc['htmlspecialchars']($_POST['primadomanda']);
  
$seconda $smcFunc['htmlspecialchars']($_POST['seconda']);



$form_message "Name: $name \nEmail: $email \nDomanda 1: $primadomanda \nDomanda 2: $seconda";


// Exit process if field "human" is filled (because this means it is spam)
if ( !empty($_POST['human']) ) {
  
fatal_error('Tastes Like Spam!'false);
}
// if it is not filled, submit form
else {
require_once(
$sourcedir '/Subs-Post.php');
  
sendmail("email@gmail.com""Email Subject"$form_message);

  
redirectexit("http://sito.altervista.org/index.php");
// Oppure se vuoi reindirizzare alla home del forum solamente:
// redirectexit();

}
?>


Ok, gli ho aggiunto qualche cosina in più, ma sendmail (funzione di SMF) è decisamente meglio se vuoi inviare email (si occupa di impostare correttamente i vari "pezzi" della mail così da aver meno problemi, ad esempio meno probabilità di essere riconosciuta come spam).

Ora, quello che a te interessa è che solo gli utenti registrati siano in grado di inviare mail, per far ciò, io consiglierei qualcosa tipo:

if (!empty($user_info['is_guest']))
{
    fatal_error("Errore, devi essere registrato per rispondere.", false);
}


Infine c'è il database.
Per ricordarti chi ha risposto hai varie opzioni, la più appropriata dipende da almeno una risposta: è un sondaggio che fai una volta e basta, o pianifichi di ripeterlo in futuro e/o farne molteplici in contemporanea?
Se è unico si può fare velocemente con una nuova colonna in members. Se invece hai la necessità di farne più nel tempo e magari più alla volta, allora serve qualcosa di un po' più complesso.

Neville

Wow grazie mille!

Allora, questo è un test che bisognerà fare appena ci si registra sul forum. Quindi sarà sempre attivo.
Se dovessi creare altri form, penso che si potranno compilare e inviare più volte quindi non ci dovrebbe essere bisogno di collegarsi al database. O sbaglio?

emanuele

hmm...
Dico una cosa stupida: ti serve proprio ricevere le risposte via mail?
O ti è "sufficiente" averle nel profilo dell'utente?

Discussioni simili (3)