ugrás a tartalomhoz

Űrlap kitöltés visszajelzése, hogyan?

tashubanya · 2010. Feb. 2. (K), 01.27
Sziasztok!

Van egy oldalam rajta a legegyszerűbb levélküldő űrlappal, melyet autodidakta oldottam meg. Egészen addig sikerrel, amíg nem akartam azt elérni, hogy az érdeklődők adjanak meg minden adatot a sikeres kapcsolat felvételhez.

A php-m a következő:
  1. <?php  
  2.   
  3. $Email = iconv("UTF-8""ISO-8859-2"$Email);  
  4.   
  5. $ToEmail = iconv("UTF-8""ISO-8859-2""csertantivadar##kukac##csertangaz.hu");  
  6.   
  7. $ToName = iconv("UTF-8""ISO-8859-2""Csertán Tivadar");  
  8.   
  9. $Szoveg = iconv("UTF-8""ISO-8859-2"$Szoveg);  
  10.   
  11. $Nev = iconv("UTF-8""ISO-8859-2"$Nev);  
  12.   
  13. $Targy = iconv("UTF-8""ISO-8859-2"$Targy);  
  14.   
  15. $mailtome = mail($ToName." <".$ToEmail.">",$Targy$Szoveg"From: ".$Nev." <".$Email.">");  
  16.   
  17. $site = iconv("UTF-8""ISO-8859-2"$site);  
  18.   
  19.   
  20. if (!Email.length || Email.indexOf("@") == -1 || Email.indexOf(".") == -1) {  
  21. Visszajelzes = "Kérem, adjon meg egy valódi email címet!";  
  22. }   
  23. else if (!Nev.length) {  
  24. Visszajelzes = "Kérem, adja meg a nevét!";  
  25. }   
  26. else if (!Targy.length) {  
  27. Visszajelzes = "Az üzenetnek nincs tárgya!";  
  28. }   
  29. else if (!Szoveg.length) {  
  30. Visszajelzes = "A levél nem tartalmaz szöveget!";  
  31. }   
  32. else {  
  33. loadVariablesNum ("mail.php""0""POST");  
  34. Visszajelzes = "Levél küldése folyamatban...";  
  35. }  
  36.   
  37.   
  38. ?>  
.

Természetesen ez a kód nem az én tekervényeim szüleménye :S
Megértéseteket és segítségeteket köszönöm előre is!
 
1

még egy apróság...a html

tashubanya · 2010. Feb. 2. (K), 01.35
  1. <h3><form action="mail.php" method="post" name="levelkuldes" id="levelkuldes" target="_self" >  
  2. <h3>Név:<br/>  
  3. <input name="Nev" type="text" id="Nev" style="font-family: Microsoft Sans Serif; font-size: 13px; color:#FFFFFF; width: 250px; " />  
  4. </h3>  
  5. <h3>E-mail:<br/>  
  6. <input name="Email" type="text" id="Email" style="font-family: Microsoft Sans Serif; font-size: 13px; color:#FFFFFF; width: 250px; " />  
  7. </h3>  
  8. <h3>Az üzenet tárgya:<br/>  
  9. <input name="Targy" type="text" id="Targy" style="font-family: Microsoft Sans Serif; font-size: 13px; color:#FFFFFF; width: 250px; " />  
  10. </h3>  
  11. <h3>E-mail szövege:<br/>  
  12. <textarea name="Szoveg" id="Szoveg" style="width: 250px; height: 100px; font-family: Microsoft Sans Serif; font-size: 13px; color:#FFFFFF; "></textarea>  
  13. </h3>  
  14. <input value="1" name="send" type="hidden" />  
  15. <h3>  
  16. <div class="buttons">  
  17. <button type="submit" class="positive" >  
  18. <img src="/images/email.png" alt="Küldés"/> Küldés  
  19. </button>  
  20. </div>  
  21. </form>  
2

Le fognak tiltani

janoszen · 2010. Feb. 2. (K), 10.30
A kódod masszívan hibás, spamelni lehet a megfelelő változók manipulálásával amiért a tárhely-szolgáltatód rövid úton le fog tiltani. Inkább használj egy kész e-mail küldő libraryt, mint pl. a Swiftmailer.
3

hibák

a.d.a.m · 2010. Feb. 2. (K), 10.34
Feltételezem, ha lefuttatod a kódod a rakás hibaüzenetet dob, ha nem a php.ini-ben állítsd át a display_errors-t 1-re.

Amit én látok:
1) a 20,23,26,29 sorokban használni próbált .length, .indexOf JavaScript funkció és nem PHP-s.
2) a 20 sortól hibás az összes változó definiálása (szintén JavaScript típusú), a PHP-ban kell elé a $
3) a kódodból ítélve register_globals be van kapcsolva, talán szerencsésebb lenne a $_POST szuperglobális változón keresztül elérni az adatokat.
4) mit csinál ez a függvény: loadVariablesNum ?
5) ha a php kódod mindössze ennyi, akkor futtatásakor feltűnhetett, hogy minden esetben elküldi az e-mailt függetlenül a kitöltöttségtől, mert a mail() függvényt nem helyezted el az else ágban
6) a Visszajelzes változó adataival nem kezdesz semmit, nem iratod képernyőre és nem is adod át semmilyen függvénynek sem.
4

ActionScript

Poetro · 2010. Feb. 2. (K), 11.55
A kód inkább néz ki ActionScript kódnak, ugyanis abban van loadVariablesNum, ami betölt változókat egy fájlból, aminek tartalma GET formátumú elemeket tartalmaz, például:
params.txt
var1=hello&var2=goodbye&done=done
és a hozzá kapcsolódó ActionScript
target_mc.loadVariables("params.txt", 1);
5

ajajj

tashubanya · 2010. Feb. 3. (Sze), 14.44
Köszönöm az eddigi hozzászólásokat.
A php-be írt kódot egy fórumról vettem, ezek szerint előbb itt kellett volna kérdezni építő ötletek miatt.
6

jelenleg

tashubanya · 2010. Feb. 3. (Sze), 14.49
Jelenleg idáig jutottam, nem kevés segítséggel.
Bár így is megkapom a helytelenül kitöltött leveleket, de legalább megvan a látszat az ellenkezőjéről.
  1. <?php  
  2.   
  3. if ($_POST['Nev'] == '') {  
  4.   
  5.     $errors['Nev'] = 'A név mezőt kötelező kitölteni.';  
  6.   
  7. }  
  8. if (strlen(trim($_POST['Email'])) < 7 ) {  
  9.   
  10.     $errors['Email'] = 'Az e-mail cím mezőbe valós e-mail címet kell megadni.';  
  11.   
  12. }  
  13. elseif (preg_match( '/^[A-Z0-9._-]+##kukac##[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z.]{2,6}$/i' , $_POST['Email']) == 0) {  
  14.   
  15.     $errors['Email'] = 'Az e-mail cím formátuma nem helyes.';  
  16.   
  17. }  
  18.   
  19. if ($_POST['Targy'] == '') {  
  20.   
  21.     $errors['Targy'] = 'A tárgy mezőt kötelező kitölteni.';  
  22.   
  23. }  
  24.   
  25. if ($_POST['Szoveg'] == '') {  
  26.   
  27.     $errors['Szoveg'] = 'A szöveg mezőt kötelező kitölteni.';  
  28.   
  29. }   
  30.   
  31.   
  32. if ($errors) {  
  33.   
  34.     $Email = iconv("UTF-8""ISO-8859-2"$Email);  
  35.     $ToEmail = iconv("UTF-8""ISO-8859-2""");  
  36.     $ToName = iconv("UTF-8""ISO-8859-2""");  
  37.     $Szoveg = iconv("UTF-8""ISO-8859-2"$Szoveg);  
  38.     $Nev = iconv("UTF-8""ISO-8859-2"$Nev);  
  39.     $Targy = iconv("UTF-8""ISO-8859-2"$Targy);  
  40.     $mailtome = mail($ToName." <".$ToEmail.">",$Targy$Szoveg"From: ".$Nev." <".$Email.">");  
  41.     $site = iconv("UTF-8""ISO-8859-2"$site);  
  42.       
  43.     $redirect_to_url = "Location: hiba.html";  
  44.   header($redirect_to_url);  
  45.   exit();  
  46.                                           
  47. }  
  48. else {  
  49.   
  50.     $redirect_to_url = "Location: ok.html";  
  51.   header($redirect_to_url);  
  52.   exit();  
  53.   
  54. }  
  55.   
  56.   
  57. ?>  
Proclub! Hogyan értetted azt, hogy spamelni lehet?? Egyelőre nem kerestek meg a szolgáltatótól...
8

spam

janoszen · 2010. Feb. 3. (Sze), 18.06
Ha pl a From mezőt megfelelően manipulálom, tudok MIME injectiont csinálni, bele tudok írni a levél törzsébe és tudok pl egy sima plain text levélből HTML levelet csinálni, de az sem kizárt, hogy ki tudom kényszeríteni, hogy másnak menjen a levél (pl egy BCC hozzáadásával). Nem vagyok szakértő a témában, kicsit utána kéne olvasni, de mint rendszerüzemeltető gyakran gyűlik meg a bajom a mindenféle odapakolt escapelés nélküli mail függvényes scriptekkel. Csak idő kérdése, mikor találnak be a spambotok. Ergó, ha nem akarsz RFC 822-t olvasni, akkor jobb, ha egy kész libraryt használsz és bízol benne, hogy az azt megíró emberek nálad jobban értettek a levelezéshez.

Példa az exploithoz:
A From e-mail cím helyére beírom a következőt:
enmailem##kukac##endomainem.hu>
BCC: Spam Pista <pista##kukac##spam.hu>

Itt van a spam
.


Ez implementációtól függően simán eredményezheti, hogy a pista##kukac##spam.hu címre megy el a levél, a . miatt meg a levél többi részét kidobja a levelező a fenébe.
7

$errors

Poetro · 2010. Feb. 3. (Sze), 17.17
Most akkor akkor küldöd el a leveleket ha vannak hibák? Vagy akkor ha nincsennek?
mert a
if ($errors) {

arra utal, ha vannak hibák akkor megy a levél.

Proclub pedig arra utalt, ha megfelelő formátumú paramétereket ad át a formodnak, akkor nem csak neked, de akárki másnak is el tudja küldeni a levelet, ergo akárkit tud SPAMelni a rosszindulatú felhasználó.
9

ajajajajjj

tashubanya · 2010. Feb. 3. (Sze), 22.25
Köszönöm.
Igyekszem mielőbb javítani a hibákat és jobban belemerülni a témába. Mielőtt több ezer embert őrületbe kergetnek a spam-ek.
10

akkor most ez van

tashubanya · 2010. Feb. 4. (Cs), 00.45
if ($errors) korrigálva, elvileg ebből a szempontból rendben van.
  1. <?php  
  2. if ($errors){  
  3.   
  4.     $redirect_to_url = "hiba.html";  
  5.   header($redirect_to_url);  
  6.   exit();  
  7.                                           
  8. }  
  9. else {  
  10.     $Email = iconv("UTF-8""ISO-8859-2"$Email);  
  11.     $ToEmail = iconv("UTF-8""ISO-8859-2""");  
  12.     $ToName = iconv("UTF-8""ISO-8859-2""");  
  13.     $Szoveg = iconv("UTF-8""ISO-8859-2"$Szoveg);  
  14.     $Nev = iconv("UTF-8""ISO-8859-2"$Nev);  
  15.     $Targy = iconv("UTF-8""ISO-8859-2"$Targy);  
  16.     $mailtome = mail($ToName." <".$ToEmail.">",$Targy$Szoveg"From: ".$Nev." <".$Email.">");  
  17.     $site = iconv("UTF-8""ISO-8859-2"$site);  
  18.   
  19.     $redirect_to_url = "ok.html";  
  20.   header($redirect_to_url);  
  21.   exit();  
  22.   
  23. }  
  24. ?>  
Ami a sablonok használatát illeti, letöltöttem a swiftmailer-t és a php mailer-t is, de sajnos nem egészen értem, hogyan kellene alkalmazni ezeket...nomeg szeretem én csinálni a dolgokat, hiszen ebből tanulok, azt hiszem....az informatikusok pedig legalább tudnak az amatőrökön vidulni/bosszankodni :D
Esetleg valahol használható magyar nyelvű leírás valamelyik sablon használatához????
11

Angol

janoszen · 2010. Feb. 4. (Cs), 09.31
Az angol nélkül sehova nem fogsz jutni ebben a szakmában sajnos, mert a dokumentációk 99%-a angolul van és senki nem fog olyan doksit fordítani, ami 2-3 havonta elavul. A PHP doksit is föladták egy ponton.
12

sprehhelek én inglis

tashubanya · 2010. Feb. 4. (Cs), 14.08
Az angol nyelv nem idegen tőlem.
Nem kell nekem ez a szakma, csak magamnak dolgozok, szerencsére :D
Ettől függetlenül magyar honban díjazom a magyar doksikat...csupán erre gondoltam ;)