Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[PHP] Send Mail

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

[PHP] Send Mail

Postdi romand700 » 27/07/06 03:04

salve,
rieccomi qui con un piccolissimo quesito più che altro è per Triumph Of Steel, visto che sa gia di cosa stiamo parlando. (Stiamo parlando di quello script con i ringrazziamenti sulla stessa pagina)
Come gia detto in precedenza funziona tutto, però c'è una cosa:
ti ricordi la funzione (clicca qui per inviare un'altra e-mail?)
Codice: Seleziona tutto
if (isset($_REQUEST['altra']) && $_REQUEST['altra'] == 1) {
      $_SESSION['formInviato'] = 0;
}


e in un punto della pagina ho questo:
Codice: Seleziona tutto
<a href="pagina.php?altra=1">Invia un'altra mail</a>


Ora il problemino è questo, che il poveretto che sta inviando la seconda email dopo aver riempito ben 20 campi di preventivo va tranquillo ad inviare l'email e convinto di mandarla invece gli spunta fuori il link invia un'altra email, il problema non è tanto questo ma che gli si sono imbiancati nel mentre anche tutti i campi, cosi il poveretto deve rimettersi di sana pianta a reinserirli tutti e poi reinviare.

Come potrei fare per ovviare a questo problema? Si potrebbe che quando si clicca sul link (invia un'altra mail)parte l'email inserita in automatico?

O dimmi te se ci potrebbe essere una soluzione.
Grazie. Anticipatamente
Andrea
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Sponsor
 

Re: [PHP] Sen Mail

Postdi Dylan666 » 27/07/06 03:12

romand700 ha scritto:salve,
rieccomi qui con un piccolissimo quesito più che altro è per Triumph Of Steel, visto che sa gia di cosa stiamo parlando.


I quesiti devono essere per tutti, comprensibili a chiunque. Quindi sarebbe stato meglio se avessi continuato nel topic dove avevi esposto il problema a cui ti ricolleghi o se avessi messo almeno il link a tale discussione ;)

http://www.pc-facile.com/forum/viewtopic.php?t=47703
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi romand700 » 27/07/06 06:46

Opsss. Scusate, invece pensavo il contrario che continuando quello andava troppo alle lunghe.
La prossima volta ne terrò conto.

Andrea
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Postdi Triumph Of Steel » 27/07/06 08:14

beh, quando fai il submit del form (il primo invia) tu fai un request ($_POST) per ogni nome di campo, per poi essere salvato in un DB o inviato via mail.
I request che fai per ogni campo, potrsti associarli ad una $_SESSION, che devi mettere nei tag "value" dei campi del form

Codice: Seleziona tutto
$_SESSION['nomeAzienda'] = (isset($_POST['nomeAzienda']) && $_POST['nomeAzienda'] != "") : $_POST['nomeAzienda'] : "";

e via dicendo per tutti i campi. Nel form:

Codice: Seleziona tutto
<form action="" ....>
<input type="text" name="nomeAzienda" value="<?php $_SESSION['nomeAzienda']; ?>">
Avatar utente
Triumph Of Steel
Moderatore
 
Post: 7852
Iscritto il: 22/08/01 01:00

Postdi romand700 » 27/07/06 19:41

grazie Triumph, ma la vedo al quanto lunghetta come cosa, visto che ho circa 20 campi.
Comunque è una procedura che ne terò conto (interessante) :)

Grazie ancora.
Andrea
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Postdi Triumph Of Steel » 27/07/06 21:14

potresti allora provare con il "foreach"

Codice: Seleziona tutto
foreach ($_POST as $k=>$v) {
 echo $k." => ".$v."<br>";
}


vedi un po' che fa quando invii il form ;) .
Conta che lui prende tutto quello del form (anche il nome e valore del bottone)
Avatar utente
Triumph Of Steel
Moderatore
 
Post: 7852
Iscritto il: 22/08/01 01:00

Postdi romand700 » 28/07/06 03:25

non so proprio dove inserirlo questo codice, forse al posto di Invia un'altra mail? ma questo codice deve rimanere?
Codice: Seleziona tutto
 if (isset($_SESSION['formInviato1']) && $_SESSION['formInviato1'] == 1) {
      // L'utente ha gi&agrave; inviato la mail
      echo "<font face='verdana' size='1'>";
      echo "<a href='preventivi_contatti.php?altra1=1'>Per inviare un'altra mail clicca QUI.</a>";
   } else {   ecc..ecc..


Grazie. ANdrea
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Postdi romand700 » 28/07/06 03:28

Chiarimento:
il codice che mi hai scritto te non so dove inserirlo.

Andrea
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Postdi Triumph Of Steel » 28/07/06 07:50

dovresti inserirlo dove dici tu, ma nell'else.

Codice: Seleziona tutto
if (isset($_SESSION['formInviato1']) && $_SESSION['formInviato1'] == 1) {
      // L'utente ha gi&agrave; inviato la mail
      echo "<font face='verdana' size='1'>";
      echo "<a href='preventivi_contatti.php?altra1=1'>Per inviare un'altra mail clicca QUI.</a>";
} else {
      foreach(...) {
      }
ecc..ecc..

Avatar utente
Triumph Of Steel
Moderatore
 
Post: 7852
Iscritto il: 22/08/01 01:00

Postdi romand700 » 28/07/06 15:51

allora ho provato ma se lo metto dopo else quando invio il form nel campo dei ringraziamenti mi stampa a video questo praticamente anche i campi:
Nome => andrea
Modulo Inviato Correttamente!Email => romand@ecc....it
Modulo Inviato Correttamente!Descrizione => bla, bla
Modulo Inviato Correttamente!formSubmit => 1
Modulo Inviato Correttamente!

e se vado a reinserirla per la seconda volta quando clicco sul pulsante invia mi rida lo stesso il link clicca qui per inviare un'altra mail, perchè ovviamente abbiamo impostato le sessioni che controllano se l'email è stata inviata
Codice: Seleziona tutto
<?php session_start();?>
<?php
if (isset($_REQUEST['altra']) && $_REQUEST['altra'] == 1) {
      $_SESSION['formInviato'] = 0;
 }
?>


comunque questo è tutto il codice:
Codice: Seleziona tutto
<?php

// Controlla che il form sia inviato
if (isset($_POST['formSubmit']) && $_POST['formSubmit'] == 1) {
   // controlla che non abbia già inviato il form 1 volta
   if (isset($_SESSION['formInviato']) && $_SESSION['formInviato'] == 1) {
      // L'utente ha già inviato la mail
      //echo "<font color='#FF9415'><font face='verdana' size='1'>Richiesta gia inviata. Riprova più tardi!";
   echo "<font face='verdana' size='1'>";
   echo "<a href='preventivi_contatti.php?altra=1'>Per inviare un'altra mail clicca QUI.</a>";

   } else {
            foreach ($_POST as $k=>$v) {
 echo $k." => ".$v."<br>";   
}
     // codice che invia la mail
      // L'INDIRIZZO DEL DESTINATARIO DELLA MAIL
$to = "pronti@prontiweb.it";

// IL SOGGETTO DELLA MAIL
$subject = "Modulo Contatti";

// COSTRUIAMO IL CORPO DEL MESSAGGIO
$body = "Contenuto del modulo:\n\n";
$body .= "Nome: " . trim(stripslashes($_POST["Nome"])) . "\n";
$body .= "Email: " . trim(stripslashes($_POST["Email"])) . "\n";
$body .= "Descrizione: " . trim(stripslashes($_POST["Descrizione"])) . "\n";

// INTESTAZIONI SUPPLEMENTARI
$intmail = "From: <" . ($_POST["Email"]) . ">";

// INVIO DELLA MAIL
@mail($to, $subject, $body, $intmail);
     echo "<font color='#FF9415'><b><font face='verdana' size='2'>Modulo Inviato Correttamente!</b>";
      // imposta una sessione per non inviare form con refresh
      $_SESSION['formInviato'] = 1;
   } 
}
?>


Spero in un tuo lampo di genio.

Grazie. Andrea
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Postdi Triumph Of Steel » 28/07/06 21:47

"foreach" e "echo" era solo per farti capire..
tu devi usare il foreach e al posto di echo $k ecc.., devi mettere una cosa del tipo

Codice: Seleziona tutto
foreach ($_POST as $k=>$v) {
   $_SESSION[$k] = $v;
}

poi nel form, per ogni campo, metti:

Codice: Seleziona tutto
<input type="text" name="nome" value="<?php echo $_SESSION['Nome']; ?>">
Avatar utente
Triumph Of Steel
Moderatore
 
Post: 7852
Iscritto il: 22/08/01 01:00

Postdi romand700 » 29/07/06 00:59

stavo provando questa funzione ma quando inserisco nei campi:
Codice: Seleziona tutto
<input type="text" name="nome" value="<?php echo $_SESSION['Nome']; ?>">
Poi quando vado a provare lo script dentro al campo c'è scrittoquesto:
<br /><b>Notice</b>: Undefined index: Nome in <b>c:\programmi\easyphp1-8\www\sito_beta2\preventivi_contatti.php</b> on line <b>394</b><br />


Ti dice qualcosa questo?
Andrea
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Postdi romand700 » 29/07/06 01:18

opss, scusami ma ovviamente quell'errore li me lo dava perchè ero in locale, poi mettendo sul server diciamo quasi tutto ok soltanto che alla seconda mail che provo ad inviare mi ritorna sempre il link( per inviare un'altra mail clicca qui.)

non ne vuole sapere.
Ma il foreach devo lasciarlo come lo hai scritto te?
Codice: Seleziona tutto
foreach ($_POST as $k=>$v) {
   $_SESSION[$k] = $v;
}

Grazie per la pazienza
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Postdi Triumph Of Steel » 29/07/06 09:19

scusa ma allora credo di non aver capito...
mi sembrava che volessi avere i form già compilati quando cliccavi su "invia un'altra mail". Ma il link invia un'altra mail in realtà cosa deve fare? Io pensavo che tornasse indietro e ti facesse compilare nuovamente i campi per un nuovo invio. Nle modo che ti ho detto, usanod la $_SESSION, avresti avuto i campi già compilati come il primo invio.
Avatar utente
Triumph Of Steel
Moderatore
 
Post: 7852
Iscritto il: 22/08/01 01:00

Postdi romand700 » 29/07/06 18:06

Si in parte la tua soluzione è ottima ed è quello che intendevo però ci sono dei probemini da risovere.

Rimangono pieni i campi dopo il primo invio, e quindi quando clicco sul link che dice di inviare un'altra mail mi rida sempre i campi scritti della prima mail, ma dei campi riempiti della seconda mail nessuna traccia.

Quindi il poveretto tutto ll contenuto che ha inserito della seconda mail lo perde comunque e gli rimangono memorizzati i campi della prima (che però non se ne fa nulla perchè la prima è stata inviata correttamente.

Quindi per intenderci la procedura dovrebbe essere questa:
pulire i campi dopo il primo invio(modulo inviato correttamente)

Mentre se l'utente si rimette subito dopo a reinserire e reinviare una mail esce il link di inviare un'altra mail, e a quel punto cliccando sul link deve memorizare i campi appena inseriti e non quelli del primo invio.

Ultma chicca sarebbe che cliccando sul link invia direttamente la mail appena inserita direttamente senza cliccare di nuovo anche sul pulsante invia.

Ultima cosa è che la textarea comunque non mi memorizza il testo:
Codice: Seleziona tutto
<textarea name="Descrizione" cols="30" rows="30" class="form_2" value="<?php echo $_SESSION['Descrizione']; ?>">  </textarea>
dove sbaglio nella textarea?

Grazie come sempre per la tua disponibilità
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Postdi romand700 » 29/07/06 22:41

diciamo che sembrerebbe che ho aggirato il problema mettendo il foreach cosi:
Codice: Seleziona tutto
<form action="preventivi_contatti.php" method="POST" name="form_contatti">
<?php

// Controlla che il form sia inviato
if (isset($_POST['formSubmit']) && $_POST['formSubmit'] == 1) {
   
      foreach ($_POST as $k=>$v)
   $_SESSION[$k] = $v;

// controlla che non abbia già inviato il form 1 volta
   if (isset($_SESSION['formInviato']) && $_SESSION['formInviato'] == 1) {
      // L'utente ha già inviato la mail
      //echo "<font color='#FF9415'><font face='verdana' size='1'>Richiesta gia inviata. Riprova più tardi!";
   echo "<font face='verdana' size='1'>";
   echo "<a href='preventivi_contatti.php?altra=1'>Per inviare un'altra mail clicca QUI.</a>";
   
   } else {
 
     // codice che invia la mail
ecc..
in questo modo ho notato che mi memorizza anche i campi della seconda mail e diciamo che sembrerebe funzionare.
Ora vorrei sapere se come ho messo il foreach va bene o potrebbe creare problemi allo script.

Se dovesse andar bene come potrei fare in modo che cliccando sul link(invia un'altra mail) mi spedisca direttamente il modulo senza dover ricliccare sul pulsante invia del form? e come potrei imbiancare i campi dolo l'invio?

Grazie.
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Postdi Triumph Of Steel » 30/07/06 10:31

il link "invia un'altra mail" era inteso come "torna indietro e ricompila i campi".. in teoria quando invia una mail, non ci dovrebbero essere i campi del form. E' quello che confonde l'utente.
Ti conviene, quando invii il form, scrivere "Grazie per aver inviato.. clicca qui per inviarne un altro", e tornare alla schermata indietro.. questo ti evitava che l'utente facesse 20 refresh della pagina per inviarti 20 mail.
Avatar utente
Triumph Of Steel
Moderatore
 
Post: 7852
Iscritto il: 22/08/01 01:00

Postdi romand700 » 30/07/06 13:48

Si infatti alla fine è questo i sistema che attuerò.

Solo a titolo informativo volevo sapere come si imbiancano i campi.
Es. in Vb uno basta che scrive:

textbox1.text = "" e in PHP?

Grazie.
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Postdi Triumph Of Steel » 30/07/06 19:19

basta che non dai un "value" nei campi.. php non serve.. è HTML..
Avatar utente
Triumph Of Steel
Moderatore
 
Post: 7852
Iscritto il: 22/08/01 01:00

Postdi romand700 » 31/07/06 00:39

Triumph Of Steel ha scritto:Ti conviene, quando invii il form, scrivere "Grazie per aver inviato.. clicca qui per inviarne un altro.


Ok questa è la procedura che alla fine ho attuato. Per evitare di far sbagliare meno possibile l'utente è possibile disabilitare il pulsante del form dopo il primo invio e riabilitarlo solo dopo che l'utente ha cliccato su:
Grazie per aver inviato.. clicca qui per inviarne un altro.

Es. enable false e true che si usa in VB

Grazie. Andrea
romand700
Utente Junior
 
Post: 77
Iscritto il: 06/07/06 22:36

Prossimo

Torna a Programmazione


Topic correlati a "[PHP] Send Mail":

Windows Live Mail
Autore: aleyandro
Forum: Software Windows
Risposte: 2

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti