Form con e-mail, dove sbaglio?

Aperto da Flavio93Zena, Giovedì - 07 Aprile 2016 - 07:40

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

Flavio93Zena

<?php 
$action
=$_REQUEST['action']; 
if (
$action=="")    /* display the contact form */ 
    

    
?>

    <form  action="http://virtualinteractivege.com/index.php?page=page4264" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="action" value="submit">
    Your name:<br />
    <input name="name" type="text" value="" size="30"/><br />
    Your email:<br />
    <input name="email" type="text" value="" size="30"/><br />
Select your preferred hosting plan:
<select name="hostplan">
<option value="">Select...</option>
<option value="Standard">Standard</option>
<option value="Ultimate">Ultimate</option>
</select><br />
    Domain name (ex. yourdomain.com):<br />
    <textarea name="domain" rows="1" cols="50"></textarea><br />
* If you currently do not have a domain, you need to register one before your account can be set up.<br />
PayPal Transaction Number<br />
Or Promotion Code<br />
<input name="transactioncode" type="text" value="" size="30"/><br />
    <input type="submit" value="Send email"/>
    </form>
    <?php 
    
}  
else                
/* send the submitted data */ 
    

    
$name=$_REQUEST['name']; 
    
$email=$_REQUEST['email']; 
    
$domain=$_REQUEST['domain']; 
$hostplan=$_REQUEST['hostplan'];
$transactioncode=$_REQUEST['transactioncode'];
    if ((
$name=="")||($email=="")||($domain=="")||($hostplan=="")||($transactioncode==""))
        { 
        echo 
"All fields are required, please fill <a href=\"\">the form</a> again."
        } 
    else{         
        
$from="From: $name<$email>\r\nReturn-path: $email"
        
$subject="Message sent using your contact form"
        
mail("miamail@yahoo.com"$from$subject$email$hostplan$domain$transactioncode); 
        echo 
"Email sent!"
        }
    }   
?>

Lo scopo è inviare una mail con le informazioni dei campi citati. Dove sbaglio? Non invia una mazza ;D
Uso in pagina di simpleportal http://virtualinteractivege.com/index.php?page=page4264 in php.
Grazie in anticipo ::)

Nota: non è che devo per forza farla simile a quella di pastebin..? :/ Non mi piace il back-end :-X Ah, dovrà funzionare fuori da SMF, nel caso ci siano differenze (e credo di sì).

emanuele

Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Nota: non è che devo per forza farla simile a quella di pastebin..? :/ Non mi piace il back-end :-X
* emanuele non ha idea di cosa Flavio stia parlando, quindi con fare accondiscendente cambia discorso

Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Dove sbaglio?
Prima cosa nell'ordine di formulazione delle domande: chiedere "dove sbaglio" prima di aver dato la spiegazione di cosa non funziona non serve. :P

Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Non invia una mazza ;D
Seconda cosa non son sicuro di cosa effettivamente significhi questo "non invia una mazza": non invia ma dice di averlo fatto, oppure non arriva nemmeno all'invio?

Io opterei per la prima, anche solo perché i parametri delle funzioni di php non si inventano a muzzo, perché non è così che funzionano i linguaggi di programmazione, si guarda il manuale (o si usa un IDE con autocompletamento) e si mettono le informazioni richieste nella posizione richiesta.
Lascio a te la pagina del manuale di mail e il compitino di scoprire come la tua funzione è sbagliata:
http://php.net/manual/en/function.mail.php

Flavio93Zena

Citazione di: emanuele il Giovedì - 07 Aprile 2016 - 08:58
Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Nota: non è che devo per forza farla simile a quella di pastebin..? :/ Non mi piace il back-end :-X
* emanuele non ha idea di cosa Flavio stia parlando, quindi con fare accondiscendente cambia discorso
Che memoria  ;D :-X http://www.italiansmf.net/forum/index.php?topic=1876.0

Citazione di: emanuele il Giovedì - 07 Aprile 2016 - 08:58
Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Dove sbaglio?
Prima cosa nell'ordine di formulazione delle domande: chiedere "dove sbaglio" prima di aver dato la spiegazione di cosa non funziona non serve. :P
E' un titolo...

Citazione di: emanuele il Giovedì - 07 Aprile 2016 - 08:58
Citazione di: Flavio93Zena il Giovedì - 07 Aprile 2016 - 07:40
Non invia una mazza ;D
Seconda cosa non son sicuro di cosa effettivamente significhi questo "non invia una mazza": non invia ma dice di averlo fatto, oppure non arriva nemmeno all'invio?
Che torna all'indice senza far nulla.

Citazione di: emanuele il Giovedì - 07 Aprile 2016 - 08:58
Io opterei per la prima, anche solo perché i parametri delle funzioni di php non si inventano a muzzo, perché non è così che funzionano i linguaggi di programmazione, si guarda il manuale (o si usa un IDE con autocompletamento) e si mettono le informazioni richieste nella posizione richiesta.
Lascio a te la pagina del manuale di mail e il compitino di scoprire come la tua funzione è sbagliata:
http://php.net/manual/en/function.mail.php
Più tardi guardo, thx.

Flavio93Zena

Ho avuto un sacco da fare e sono stato dalla mia ragazza (tornato un'ora fa), ma pur avendo guardato non ne ho idea, sinceramente. So qualcosa di template, ma il sorgente lo detesto :/

emanuele

Allora, vediamo un po':
Codice (definizione della funzione da http://php.net/manual/en/function.mail.php) Seleziona

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

Già solo guardando i nomi delle variabili si capisce cosa ci va: il primo parametro è l'indirizzo email di destinazione ($to), il secondo è l'oggetto della mail ($subject), poi il messaggio ($message), poi altri opzionali che presumibilmente possiamo ignorare a meno di avere altre necessità.

Ora vediamo il tuo codice:
Codice (tuo codice) Seleziona
mail("miamail@yahoo.com", $from, $subject, $email, $hostplan, $domain, $transactioncode);
come primo parametro hai messo il destinatario. Come secondo hai messo qualcosa che sembra l'header del mittente. Poi l'oggetto, quindi l'email del mittente, e per finire una serie di parametri presi dalla tua form.

Quindi, leggendo le specifiche della funzione mail, "semplicemente" devi:
0) passare a mail solo i valori che effettivamente accetta,
1) mettere in ordine corretto le variabili,
2) (conseguenza di 1) creare un testo del messaggio.

Quindi il finale sarà qualcosa tipo:

$body = 'Messaggio da: ' . $email . '
domain: ' . $domain . '
hostplan: ' . $hostplan . '
transactioncode: ' . $transactioncode;

mail("miamail@yahoo.com", $subject, $body);

Flavio93Zena

Ew, sì ho invertito il valore xD Non credevo importasse l'ordine, per qualche strana ragione che nemmeno io stesso comprendo :P
Ad ogni modo, come faccio allora a passare quelle variabili $additional? Vanno (più o meno) bene come le ho scritte io?

emanuele

Ora sai che l'ordine conta e "quello" che passi conta, fai uno sforzo e desumi da questo che anche il numero dei parametri che passi ad una funzione conti.
Da queste informazioni sai che mail accetta "solo" 5 parametri, non i 7 che gli passi tu.

Ora passiamo alla domanda: perché vuoi aggiungere certe cose come header aggiuntivi?

Flavio93Zena

Non li voglio come header aggiuntivi, mi van bene in qualsiasi modo, basta farli passare per la mail @_@ Mi sembra strano che ci possano essere solo 5 parametri però...

emanuele

Io ho l'impressione netta che non hai voglia di capire come funziona l'invio della mail, quindi suppongo che scrivere il codice direttamente sia la soluzione che fa perdere meno tempo a tutti. :P
<?php 
$action
=$_REQUEST['action']; 
if (
$action=="")    /* display the contact form */ 
    

    
?>

    <form  action="http://virtualinteractivege.com/index.php?page=page4264" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="action" value="submit">
    Your name:<br />
    <input name="name" type="text" value="" size="30"/><br />
    Your email:<br />
    <input name="email" type="text" value="" size="30"/><br />
Select your preferred hosting plan:
<select name="hostplan">
<option value="">Select...</option>
<option value="Standard">Standard</option>
<option value="Ultimate">Ultimate</option>
</select><br />
    Domain name (ex. yourdomain.com):<br />
    <textarea name="domain" rows="1" cols="50"></textarea><br />
* If you currently do not have a domain, you need to register one before your account can be set up.<br />
PayPal Transaction Number<br />
Or Promotion Code<br />
<input name="transactioncode" type="text" value="" size="30"/><br />
    <input type="submit" value="Send email"/>
    </form>
    <?php 
    
}  
else                
/* send the submitted data */ 
    

    
$name=$_REQUEST['name']; 
    
$email=$_REQUEST['email']; 
    
$domain=$_REQUEST['domain']; 
$hostplan=$_REQUEST['hostplan'];
$transactioncode=$_REQUEST['transactioncode'];
    if ((
$name=="")||($email=="")||($domain=="")||($hostplan=="")||($transactioncode==""))
        { 
        echo 
"All fields are required, please fill <a href=\"\">the form</a> again."
        } 
    else{         
        
$body 'Messaggio da: ' $email '
domain: ' 
$domain '
hostplan: ' 
$hostplan '
transactioncode: ' 
$transactioncode;

        
mail("miamail@yahoo.com"$subject$body);

        echo 
"Email sent!"
        }
    }   
?>

Flavio93Zena

Se ti dicessi che non voglio leggerlo per cercare di capirlo mi crederesti quando ti dico che ci sto provando? ;) Ma non è così facile, non ho mai lavorato attorno al codice delle email prima, per cui ci capisco più o meno poco :-[
Non capisco come funzionano i parametri aggiuntivi, non si può i qualche modo infilare un array di variabili dentro alla quinta variabile o qualcosa di simile?

emanuele

Proviamo con un'altra domanda: tu devi inviare una mail, la funzione richiede tre parametri obbligatori, tu non hai idea di cosa servano gli altri. Perché vuoi usarli?
Una mail è composta da:
1) mittente,
2) destinatario,
3) oggetto,
4) corpo.

Posto che di default il server imposta un mittente quando una mail viene inviata, quello che resta sono 3 parametri, che guarda caso sono anche quelli obbligatori della funzione "mail" di php.
Perché ti servono i parametri aggiuntivi?

Flavio93Zena

Ew, wait, posso spedire diverse variabili nel corpo allora! Io avevo capito che fossero solo variabili fisse (una ed una soltanto).
Cioè tipo:
1) mittente,
2) destinatario,
3) oggetto,
4) variabile1,
5) variabile2.
Comincio a capirci qualcosa, anche se non saprei bene come mettere le diverse variabili nel body @_@

emanuele

Te l'ho scritto sopra nell'esempio.
Te l'ho scritto sopra nel codice "finale".

Il corpo è una stringa, come costruisci una stringa in PHP?

Flavio93Zena

Dopo un po' di "lavori" per così dire ;D Sono giunto a questo:
<?php 
$action
=$_REQUEST['action']; 
if (
$action=="")    /* display the contact form */ 
    

    
?>

    <form  action="https://www.allpoints.host/premiumsignup.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="action" value="submit">
    Your name:<br />
    <input name="name" type="text" value="" size="30" style="color: #000;"/><br /><br />
    Your email:<br />
    <input name="email" type="text" value="" size="30" style="color: #000;"/><br /><br />
Select your preferred hosting plan:
<select name="hostplan" style="color: #000;">
  <option value="">Select...</option>
  <option value="Standard">Standard</option>
  <option value="Ultimate">Ultimate</option>
</select><br /><br />
    Domain name (ex. yourdomain.com):<br /><br />
    <input name="domain" type="text" value="" size="30" style="color: #000;"></textarea><br />
* If you currently do not have a domain, you need to register one before your account can be set up.<br /><br />
PayPal Transaction Number<br />
Or Promotion Code<br />
    <?php 
    
}  
else                
/* send the submitted data */ 
    

    
$name=$_REQUEST['name']; 
    
$email=$_REQUEST['email']; 
    
$domain=$_REQUEST['domain']; 
// $hostplan=$_REQUEST['hostplan'];
$transactioncode=$_REQUEST['transactioncode'];
    if ((
$name=="")||($email=="")||($domain=="")||($hostplan=="")||($transactioncode=="")!!($g-recaptcha-response==""))
        { 
        echo 
"All fields are required, please fill <a href=\"\">the form</a> again."
        } 
    else{         
$headers  'MIME-Version: 1.0' "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' "\r\n";
$headers .= 'From: $name <$email>' "\r\n";
$subject 'All Points Web Hosting: Premium Signup Application: ' $name '';
        
$body 'Message from: ' $name '
Domain: ' 
$domain '
Hostplan: ' 
$hostplan '
Transactioncode: ' 
$transactioncode;

        
mail("censored@gmail.com"$subject$body$headers);
        
header("Location: https://www.allpoints.host/success.php");
        }
    }   
?>

Funziona tutto tranne i maledetti headers, non riesco a capire cosa ci sia di sbagliato :/ Purtroppo, non essendo corretti, le mail finiscono invariabilmente nella cartella spam. Ho consultato il manuale di php ma sinceramente mi sembra di fare giusto :(

Un'altra cosa, ho provato ad aggiungere il recaptcha di google, fallendo miseramente. Ma come diavolo sono fatti i doc di google?!?! Un cretino lo spiegherebbe meglio, non si capisce un accidente!!!

emanuele

Del problema delle mail che vanno nello spam devi parlarne con Spuds. xD

Comunque, prima di guardare il manuale di php per le mail, dovresti guardare nel manuale di php la differenza tra single quote e double quote in relazione alle stringhe:
$headers .= 'From: $name <$email>' . "\r\n";
Quello che tu vuoi, in verità è:
$headers .= "From: $name <$email>\r\n";

RTFM! FTW! :P

Discussioni simili (3)