Cum trimit datele din formular la e-mail

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Liaf
Mesaje:36

Cum trimit datele din formular la e-mail

Am gasit Elemente formular HTML, care mi s-au parut foarte interesante si ma ajuta mult pentru ca nu mai depind de un script aflat pe alt forum.
Pot crea un formular pe care sa il implementez direct la mine pe site.
Cum fac ca sa specific o adresa de e-mail la care sa ajunga acele date ce urmeaza a fi completate pe forumular?

MarPlo Mesaje:4343
Salut
Ca sa trimiti datele dintr-un formular la o adresa de email, trebuie sa folosesti si un script de pe server, cum ar fi PHP.
Browser-ul trimite datele din formular la un script pe server, care apoi le preia si trimite mai departe.
Deci, pe langa HTML, trebue sa cunosti sa lucrezi si cu un limbaj de program pe server, in cazul de aici, PHP.
Pe site sunt lectii la Cursul PHP, printre care si acestea (dar e necesar sa stii si lucruri mai de inceput):
- Utilizare formulare HTML cu PHP, $_GET si $_POST.
- Trimitere date la o adresa de e-mail, cu PHP .

Liaf Mesaje:36
Ok, mersi. Cred ca ma descurd cu asta. Daca nu o sa revin pe parcurs ce intampin probleme. Momentan am doua nelamuriri:
---
1. Am asa:

Cod: Selectaţi tot

<strong>Proprietati :</strong><select name="select"><option>proprietate 1 - 9,5 €</option><option>proprietate 2 - 10,5 €</option></p>
Cum pot face ca atunci cand se merge pe lista de optiuni sau pe "Proprietati-pretul" sa apara informatii undeva in dreapta, gen alegeti proprietatea. alaturi este afisat pretul.
---
2. Am asa:

Cod: Selectaţi tot

<p><strong>Dorinta : </strong><input type="radio" />Da<input type="radio" />Nu</p>
Aici daca apuci sa bifezi una nu se mai poate sterge, daca o bifezi pe cealalta nu se debifeaza ce ai bifat inainte. Cum pot face sa se poata bifa decat Da, sau decat Nu?

steell Mesaje:190
1. Uitete aici:
https://marplo.net/ajax/multiple-sel ... -ajax.html
Poti face ca aici numai ca scoti primele de selecturi, sa ramana numai unu si cand se selecteaza ceva anume se apara ceea ce vrei tu

2.

Cod: Selectaţi tot

<strong>Dorinta : </strong>
<input type="radio" name="nume" value="da" />Da
<input type="radio" name="nume" value="nu" />Nu
Butoanele radio trebuie sa contina acelasi nume la "name", daca vrei sa poata fi selectat doar unul, iar la "value" pui ce vrei sa sa trimita spre scriptul php.
Acel "Da" si acel "Nu" de dupa butoane sunt doar informatii ca sa vezi ce reprezinta fiecare buton, deci nu acestea se trimit la php, ci doar ce este la "value".

Liaf Mesaje:36
Mersi. Am rezolvat aceste aspecte insa am mai intapinat ceva probleme.
Am pus php-ul in public_html/website/comenzi si are numele "comandadomeniu.php".
Arata asa:

Cod: Selectaţi tot

<?php
// Verifica daca au fost trimise datele de la formular
 if (isset($_POST['Email']) && isset($_POST['mesaj'])) {
     $to = 'comandadomeniu@ro-mixers.eu';                 // Adresa unde va fi trimis mesajul 
     $subiect = 'Comanda domeniu'; 
     $mesaj = $_POST['mesaj']; 
     $from = 'From: '. $_POST['Email']; 

     // PHP trimite datele la serverul de e-mail
     if (mail($to, $subiect, $mesaj, $from)) { 
               echo 'Comanda dumneavoastra a fost trimisa. Verificati folderul Spam sau Inbox pentru a afla mai multe despre cum efectuati plata.'; 
     } 
     else {
               echo 'Comanda nu a fost trimisa. Unul dintre campuri nu este completat corect.';
     }
 }
 ?>
Am pus pe site asa in pagina de comanda la e-mail:

Cod: Selectaţi tot

<form action="http://www.ro-mixers.eu/website/comenzi/comandadomeniu.php" method="post">
<p><label><strong><span style="color: #ff4500;">Adresa de e-mail : </span></strong></label><input name="Email:" size="30" type="text" /></p></form>
Nu vad care este problema. De ce atunci cand dau pe trimite, comanda ma duce pe ro-mixers.eu/website/comenzi/comandadomeniu.php , si de ce atunci cand dau Trimite comanda nu ajunge un e-mail la mail-ul pus de mine in php ?

MarPlo Mesaje:4343
In <form> nu e nici un buton "submit" cu Trimite.
In scriptul php se verifica daca sunt date de la casuta 'mesaj' (acel ... && isset($_POST['mesaj'])), dar nu ai un camp cu name="mesaj" in formular.
De asemenea, serverul trebuie sa aibe instalat si un server de email, cauta pe forum ca subiectul mai e discutat.

Liaf Mesaje:36
Nu am pus intregul continut dintre form insa am buton si pentru submit si pentru reset. Nu am postat aici. Il voi posta acum.
Am modificat partea cu mesaj si tot nu se trimite.
Php-ul este asa in "public_html/website/comenzi/comandadomeniu.php":

Cod: Selectaţi tot

<?php
// Verifica daca au fost trimise datele de la formular
 if (isset($_POST['Email']) && isset($_POST['Nume Prenume'])) {
     $to = 'comandadomeniu@ro-mixers.eu';                 // Adresa unde va fi trimis mesajul 
     $subiect = 'Comanda domeniu'; 
     $mesaj = $_POST['Nume Prenume']; 
     $from = 'From: '. $_POST['Email']; 

     // PHP trimite datele la serverul de e-mail
     if (mail($to, $subiect, $mesaj, $from)) { 
               echo 'Comanda dumneavoastra a fost trimisa. Verificati folderul Spam sau Inbox pentru a afla mai multe despre cum efectuati plata.'; 
     } 
     else {
               echo 'Comanda nu a fost trimisa. Unul dintre campuri nu este completat corect.';
     }
 }
 ?>
Si in pagina html arata asa ceea ce am creat eu:

Cod: Selectaţi tot

<h4><span style="text-decoration: underline;">Formular comanda domeniu</span></h4>
<p>Campurile obligatorii sunt marcate astfel : <strong><span style="color: #ff4500;">Obligatoriu</span></strong>, iar cele neobligatorii astfel : <span style="color: #ff4500;">Neobligatoriu</span></p>
<form action="http://www.ro-mixers.eu/website/comenzi/comandadomeniu.php" method="post">
<pre><strong><em>Informatii despre domeniu</em></strong></pre>
<p><label><strong><span style="color: #ff4500;">Terminatia domeniului</span> - alaturi este afisat pretul <span style="color: #ff4500;">: </span></strong></label><select name="Terminatia Domeniului:"><option>eu - 9,5 €</option><option>com - 10,5 €</option><option>net - 9,0 €</option><option>org - 10,0 €</option><option>info - 10,0 €</option><option>biz - 10,0 €</option><option>us - 9,0 €</option><option>de - 10,5 €</option><option>es - 11,0 €</option><option>ws - 11,0 €</option><option>name - 10,5 €</option><option>co - 25,0 €</option><option>me - 25,0 €</option><option>xxx - 100,0 €</option></select></p>
<p><label><strong><span style="color: #ff4500;">Modalitatea de achizitionare : </span></strong></label><input name="Modalitatea de achizitionare:" type="radio" value="Inregistrare" />Inregistrare<input name="Modalitatea de achizitionare:" type="radio" value="Transfer" />Transfer<input name="Modalitatea de achizitionare:" type="radio" value="Reinnoire" />Reinnoire</p>
<p><label><strong><span style="color: #ff4500;">Numele domeniului dorit : </span></strong></label><input name="Numele domeniului dorit:" size="32" type="text" value="www.ACESTA.abc" /></p>
<p><label><strong><span style="color: #ff4500;">NS-urile (nameserverele) : </span></strong></label><input name="NS-urile (nameserverele):" type="checkbox" />Doresc nameservere<input name="NS-urile (nameserverele):" type="checkbox" />Nu doresc nameservere</p>
<p><label><span style="color: #ff4500;">Introduceti NS-urile</span> - pentru bifa la Nu doresc nameservere <span style="color: #ff4500;">: </span></label><input name="Introduceti NS-urile:" size="10" type="file" /></p>
<pre><strong><em>Datele de logare la cPanel-ul domeniului</em></strong></pre>
<p><label><strong><span style="color: #ff4500;">Username : </span></strong></label><input name="Username cPanel:" size="29" type="text" /></p>
<p><label><strong><span style="color: #ff4500;">Parola asociata : </span></strong></label><input name="Parola asociata username-ului cPanel:" size="25" type="password" /></p>
<pre><strong><em>Informatii despre efectuarea platii</em></strong></pre>
<p><label><strong><span style="color: #ff4500;">Modalitatea de plata : </span></strong></label><select name="Modalitatea de plata:"><option>Plata prin SMS</option><option>Mandat postal (posta)</option><option>Transfer bancar (virament)</option></select></p>
<pre><strong><em>Datele de contact ale detinatorului</em></strong></pre>
<p><label><strong><span style="color: #ff4500;">Nume Prenume : </span></strong></label><input name="Nume Prenume:" size="31" type="text" /></p>
<p><label><strong><span style="color: #ff4500;">CNP : </span></strong></label><input name="CNP:" size="40" type="text" /></p>
<p><label><strong><span style="color: #ff4500;">Numarul de telefon : </span></strong></label><input maxlength="3" name="Numarul de telefon (A):" size="3" type="text" /> <input maxlength="3" name="Numarul de telefon (B):" size="3" type="text" /> <input maxlength="4" name="Numarul de telefon (C):" size="4" type="text" /></p>
<p><label><strong><span style="color: #ff4500;">Adresa de e-mail : </span></strong></label><input name="Email:" size="30" type="text" /></p>
<pre><strong><em>Datele de contact ale detinatorului in Ro-Mixers</em></strong></pre>
<p><label><strong><span style="color: #ff4500;">Username-ul de pe site : </span></strong></label><input name="Username-ul de pe site:" size="25" type="text" /></p>
<p><label><strong><span style="color: #ff4500;">Username-ul de pe forum : </span></strong></label><input name="Username-ul de pe forum:" size="23" type="text" /></p>
<pre><strong><em>Informatii aditionale</em></strong></pre>
<p><label><span style="color: #ff4500;">Modalitatea prin care ati aflat ca Ro-Mixers vinde domenii internationale : </span></label><textarea cols="81" rows="1" name="Modalitatea prin care ati aflat ca Ro-Mixers vinde domenii internationale:"></textarea></p>
<p style="text-align: center;"><input type="submit" value="Trimite comanda" /> <input type="reset" value="Reseteaza campurile" /></p>
</form>

MarPlo Mesaje:4343
Valoarea de la atributul "name" (respectiv la preluare cu $_POST in PHP) ar trebui fara spatiu, eventual inlocuit cu liniuta de jos (nume_prenume).
Iin plus, ai adaugat si doua puncte la name="Nume Prenume:".
Trebuie tinut cont de litere mari si mici, de aceea, pt a evita eventuale erori, se obisnueste sa se scrie aceste valori de atribute doar cu litera mica.
- Daca or mai fi alte mici erori de sintaxa, le poti cauta. Ca ajutor, poti folosi in scriptul PHP aceast cod ca sa vezi ce date primeste de la formular, si in functie de acestea poti rezola cum sa faci scriptul.

Cod: Selectaţi tot

var_export($_POST);
 

Liaf Mesaje:36
Am modificat:
Am pus asa in php:

Cod: Selectaţi tot

<?php
// Verifica daca au fost trimise datele de la formular
 if (isset($_POST['email_']) && isset($_POST['nume_prenume_'])) {
     $to = 'comandadomeniu@ro-mixers.eu';                 // Adresa unde va fi trimis mesajul 
     $subiect = 'Comanda domeniu'; 
     $mesaj = $_POST['terminatia_domeniului_<br />modalitatea_de_achizitionare_<br />numele_domeniului_dorit_<br />nameserverele_<br />introduceti_nameserverele_<br />usernameul_cpanel_<br />parola_asociata_usernameului_cpanel_<br />modalitatea_de_plata_<br />nume_prenume_<br />cnp_<br />numarul_de_telefon_a_-numarul_de_telefon_b_-numarul_de_telefon_c_<br />email_<br />usernameul_de_pe_site_<br />usernameul_de_pe_forum_<br />modalitatea_prin_care_ati_aflat_ca_romixers_vinde_domenii_internationale_']; 
     $from = 'From: '. $_POST['email_']; 

     // PHP trimite datele la serverul de e-mail
     if (mail($to, $subiect, $mesaj, $from)) { 
               echo 'Comanda dumneavoastra a fost trimisa. Verificati folderul Spam sau Inbox pentru a afla mai multe despre cum efectuati plata.'; 
     } 
     else {
               echo 'Comanda nu a fost trimisa. Unul dintre campuri nu este completat corect.';
     }
 }
 ?>
Insa acum apar alte probleme. Fisierele txt care se urca pe site nu ajung pe e-mail corect (au 0 kb si nu se pot deschide).
In Mesaj nu mai apare nimic dupa ce am modificat in php

Cod: Selectaţi tot

     $mesaj = $_POST['nume_prenume_']; 
cu

Cod: Selectaţi tot

     $mesaj = $_POST['terminatia_domeniului_<br />modalitatea_de_achizitionare_<br />numele_domeniului_dorit_<br />nameserverele_<br />introduceti_nameserverele_<br />usernameul_cpanel_<br />parola_asociata_usernameului_cpanel_<br />modalitatea_de_plata_<br />nume_prenume_<br />cnp_<br />numarul_de_telefon_a_-numarul_de_telefon_b_-numarul_de_telefon_c_<br />email_<br />usernameul_de_pe_site_<br />usernameul_de_pe_forum_<br />modalitatea_prin_care_ati_aflat_ca_romixers_vinde_domenii_internationale_']; 

MarPlo Mesaje:4343
Trebuie doar un nume simplu la "name" si acelasi la $_POST, fara spatiu, taguri sau alte caractere.
E gresit ghiveciul asta:

Cod: Selectaţi tot

$_POST['terminatia_domeniului_<br />...']
Problema nu e de eroare in cod, ci de necunoastere a elementelor de baza si sintaxa PHP.
Poti sa inveti din codul prezentat in link-urile date la primul raspuns, daca ai rabdare sa le studiezi si sa le testezi.

Liaf Mesaje:36
Pai si eu daca am nevoie ca in mail-ul care se trimite, mesajul sa cuprinda toate acele identitati cum fac?

MarPlo Mesaje:4343
Vezi scriptul din acest tutorial: Trimitere e-mail cu tag-uri HTML si atasament.
Testeaza-l intai asa cum e, fara modificari in cod, sa vezi daca functioneaza; apoi il adaptezi cum stii la formularul pe care-l ai.

Subiecte similare