ugrás a tartalomhoz

PHP mailer

Astroman · Feb. 5. (K), 10.51
Sziasztok,
Az alábbiban kérném a segítségeteket.

Adott egy form, amiből szeretnék majd üzeneteket kapni (saját honlapom mailere). Részben működik - az email megjön - de a text mezőkbe (subject, név, mailcím, illetve a message) írt tartalom nem jön át.

A form:
<script language="javascript">
function CheckAll(x)
{


return true;
}

/// email check

function checkemail(myemail)
{
var str=myemail;
var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
if (filter.test(str))
{
testresults=true
}
else
{
testresults=false
}
return (testresults)
}

/// to check that perticular value is EMPTY OR NOT
function ISBLANK(xx)
{
var cc=0,tt;
for(tt=0; tt<xx.length; tt++)
{
if (xx.charAt(tt)==' ')
{
cc=cc+1; // count blank character
}
}
if (cc==xx.length)
{
return true; //// means it is BLANK
}
return false; //// means it is NOT BLANK
}

function is_radio_button_selected(fieldnm)
{
// set var radio_choice to false
var radio_choice = false;

// Loop from zero to the one minus the number of radio button selections
for (counter = 0; counter < fieldnm.length; counter++)
{
// If a radio button has been selected it will return true
// (If not it will return false)
if (fieldnm[counter].checked)
radio_choice = true;
}

if (!radio_choice)
{
return (false); /// means not selected
}
return (true); /// means selected
}
</script>
<form method="POST" action="_sendmail.php">
<label class="form-label-top" id="label_1" for="input_1">
Subject:
<input type="text" name="subject" size="20">
<span class="form-required">*</span>
</label>
<br/>
<br/>
<label class="form-label-top" id="label_1" for="input_1">
Name:
<input type="text" name="name" size="20">
<span class="form-required">*</span>
</label>
<br/>
<br/>
<label class="form-label-top" id="label_1" for="input_1">
E-mail:
<input type="email" name="email" size="20">
<span class="form-required">*</span>
</label>
<br/>
<br/>
<label class="form-label-top" id="label_1" for="input_1">
Message:
<br/>
<textarea rows="9" name="message" cols="30">
</textarea>
<br/>
<br/>
<div id="cid_2" class="form-input-wide">
<div style="margin-left:66px" class="form-buttons-wrapper">
<button id="input_2" type="submit" class="form-submit-button">
Send
</button>
&nbsp;
<button id="input_reset_2" type="reset" class="form-submit-reset">
Clear Form
</button>
</div>
</div>
</li>
<li style="display:none">
Should be Empty:
<input type="text" name="website" value="" />
</li>
</ul>
</div>
</form>


Illetve a PHP mailer:

<?php ob_start();
$fromemail="Optech<example.com>"; // change here if you want
$toemail="example.com"; // change here if you want
$sub="Optech-üzenet"; // change here if you want
$success_page_name="thanks.html";
////// do not change in following
if($_SERVER['REQUEST_METHOD']=="POST")
{
$fieldnm_1=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['fieldnm_1']));
$fieldnm_2=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['fieldnm_2']));
$fieldnm_3=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['fieldnm_3']));
$fieldnm_4=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['fieldnm_4']));


$contentmsg=stripslashes("<br><b><font style=color:#CC3300>$sub</font></b><br>
<table width=708 border=0 cellpadding=2 cellspacing=1 bgcolor=#CCCCCC>

<tr>
<td width=165 align=right valign=top bgcolor=#FFFFFF><B>Subject:</b> </td>
<td width=565 align=left valign=top bgcolor=#FFFFFF>$fieldnm_1</td>
</tr>

<tr>
<td width=165 align=right valign=top bgcolor=#FFFFFF><B>Name:</b> </td>
<td width=565 align=left valign=top bgcolor=#FFFFFF>$fieldnm_2</td>
</tr>

<tr>
<td width=165 align=right valign=top bgcolor=#FFFFFF><B>E-mail:</b> </td>
<td width=565 align=left valign=top bgcolor=#FFFFFF>$fieldnm_3</td>
</tr>

<tr>
<td width=165 align=right valign=top bgcolor=#FFFFFF><B>Message:</b> </td>
<td width=565 align=left valign=top bgcolor=#FFFFFF>$fieldnm_4</td>
</tr>

</table>
");

////
$headers = "MIME-Version: 1.0

";
$headers .= "Content-type: text/html; charset=iso-8859-1

";

$from=$fromemail;

$headers .= "From: ".$from."

";

@mail($toemail,$sub,$contentmsg,$headers);


header("Location:$success_page_name");

}
?>


Előre is köszönöm a segítséget.
 
1

Ezeket küldi a böngésző a

kuka · Feb. 5. (K), 11.28
Ezeket küldi a böngésző a szerverre:
<input type="text" name="subject" size="20">
<input type="text" name="name" size="20">
<input type="email" name="email" size="20">
<textarea rows="9" name="message" cols="30">
</textarea>
<input type="text" name="website" value="" />

Ezeket küldi tovább a PHP e-mailben:
$fieldnm_1=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['fieldnm_1']));
$fieldnm_2=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['fieldnm_2']));
$fieldnm_3=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['fieldnm_3']));
$fieldnm_4=str_replace ( array("\n"), array("<br>"),trim($_REQUEST['fieldnm_4']));

Próbáld ugyanazokat a mezőneveket használni mindenhol ahol ugyanazokat az adatokat szándékszol kezelni.
2

Részsiker

Astroman · Feb. 5. (K), 11.47
Valóban a fieldnameket nem írtam át. :)
Viszont úgy tűnik van még mit csiszolgatni. Az egyik, hogy az ékezetes karaktereket nem kezeli. Ezt hogyan lehetne kiküszöbölni. - Ezt átkódolással megoldottam.


A másik pedig szeretném, hogy az üresen hagyott mezőknél figyelmeztessen. Azt hittem ezt sikerült megoldani, de csak a mailcím mezőben figyelmeztet a "@" hiányára.
3

A további véleményalkotáshoz

kuka · Feb. 5. (K), 11.55
A további véleményalkotáshoz szükséges volna a teljes szkript. (Ha kérhetnénk, olvasható állapotban, azaz [colorer] és [/colorer] között.) A fentebbiben nem találom, hogy vannak meghívva azok az ellenőrző függvények.
4

Teljes form script

Astroman · Feb. 5. (K), 12.03
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Kapcsolat - OPTECH</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body id="index_2">
<div class="container_all">
	<div class="level_1">
		<div class="width">
			<ul>
				<li><a href="index.html">GAL&Eacute;RI&Aacute;K</a></li>
				<li><a href="about.html">MAGAMR&Oacute;L</a></li>
				<li><a href="contacts.html" class="active">KAPCSOLAT</a></li>
				<li class="last"><a href="index.html"><img alt="home" src="css/img/home.png" /></a></li>
			</ul>
			
		</div>
	</div>
	<div class="level_2">
		<div class="width">
		</div>
	</div>
	<div class="level_3">
		<div class="width">
			<h3>KAPCSOLAT</h3>
			<br><br>
			<div class="right"><div class="indent"><div class="w100">
				<h6><font size="2" color="#bb5e00">Ha b&aacute;rmilyen k&eacute;rd&eacute;sed van az al&aacute;bbi lehet&otilde;s&eacute;geken el&eacute;rsz!</font></p>
				<br><br>
			</div></div></div>
			<div class="clear"></div>
			<CENTER>
			<script language="javascript">
function CheckAll(x)
{
    
 
	 return true;
}

/// email check

function checkemail(myemail)
{
var str=myemail;
var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
if (filter.test(str))
{
testresults=true
}
else
{
testresults=false
}
return (testresults)
}

/// to check that perticular value is EMPTY OR NOT
function ISBLANK(xx)
{ 
        var cc=0,tt;
		for(tt=0; tt<xx.length; tt++)
		{
		     if (xx.charAt(tt)==' ')
			 {
			 	cc=cc+1; // count blank character
			 }
		}
		if (cc==xx.length)
		{
			return true;  //// means it is BLANK
		}
	     return false;	//// means it is NOT BLANK
}

function is_radio_button_selected(fieldnm)
{
// set var radio_choice to false
var radio_choice = false;

// Loop from zero to the one minus the number of radio button selections
for (counter = 0; counter < fieldnm.length; counter++)
{
// If a radio button has been selected it will return true
// (If not it will return false)
if (fieldnm[counter].checked)
radio_choice = true; 
}

if (!radio_choice)
{
return (false); /// means not selected
}
return (true); /// means selected
}
</script>
             <form method="POST" action="_sendmail.php">
			 <label class="form-label-top" id="label_1" for="input_1">
                 Subject:
                 <input type="text" name="subject" size="20">
				 <span class="form-required">*</span>
        </label>
                 <br/>
                 <br/>
				 <label class="form-label-top" id="label_1" for="input_1">
                 Name:
                 <input type="text" name="name" size="20">
				 <span class="form-required">*</span>
        </label>
                 <br/>
                 <br/>
				 <label class="form-label-top" id="label_1" for="input_1">
                 E-mail:
                 <input type="email" name="email" size="20">
				 <span class="form-required">*</span>
        </label>
                 <br/>
                 <br/>
				 <label class="form-label-top" id="label_1" for="input_1">
                 Message:
                 <br/>
                 <textarea rows="9" name="message" cols="30">
                 </textarea>
                 <br/>
                 <br/>
                  <div id="cid_2" class="form-input-wide">
          <div style="margin-left:66px" class="form-buttons-wrapper">
            <button id="input_2" type="submit" class="form-submit-button">
              Send
            </button>
            &nbsp;
            <button id="input_reset_2" type="reset" class="form-submit-reset">
              Clear Form
            </button>
          </div>
        </div>
      </li>
      <li style="display:none">
        Should be Empty:
        <input type="text" name="website" value="" />
      </li>
    </ul>
  </div>
             </form>
			 <br>
			 <br>
         </CENTER>
		 <CENTER>
     2019. All Rights Reserved. 
            <p>Designed by Tam&aacute;s N&eacute;meth
			</CENTER>
		</div>
	</div>
</div>
</body>
</html>            
     </body>
 </html>
 </body>
</html>
5

Upsz. Erre nem számítottam.

kuka · Feb. 5. (K), 12.33
Upsz. Erre nem számítottam. Az a teljes szkript úgy használatlan ahogy van. Egyelőre minimálisra fogva a változtatások mennyiségét, először is meg kellene hívni a CheckAll() függvényt űrlapküldés előtt (bárhova beszúrható, én a szkript legvégére szoktam hagyni):

window.addEventListener('load', function() {
    document.querySelector('form[action="_sendmail.php"]').addEventListener('submit', CheckAll, false)
}, false)
A CheckAll() függvényben meg elvégezni az ellenőrzéseket:

function CheckAll(esemeny)
{
    var hibaLista = []

    ;['subject', 'name', 'email'].forEach(function(mezo) {
        if (ISBLANK(esemeny.target.elements[mezo].value)) {
            hibaLista.push(mezo + ' kitöltése kötelező')
        }
    })
        
    if (ISBLANK(esemeny.target.elements['email'].value)) {
        hibaLista.push('email értéke e-mail cím kell legyen')
    }
        
    if (hibaLista.length) {
        alert(hibaLista.join('\n'))
        esemeny.preventDefault();
    }

    return true;
}
6

Lecseréltem, de nem

Astroman · Feb. 5. (K), 12.49
Lecseréltem a függvényt, de valamiért ugyanúgy engedi kiküldeni üresen.
7

Upsz, hiba az e-mail

kuka · Feb. 5. (K), 13.08
Upsz, hiba az e-mail ellenőrzésben, a feltétel így kell kinézzen:

    if (! checkemail(esemeny.target.elements['email'].value)) {
        hibaLista.push('email értéke e-mail cím kell legyen')
    }
De az ürsség ellenőrzésnek ettől függetlenül működnie kell.

Gondolom az alert() sem jelenik meg a hibaüzenettel, úgy-e? Ha hozzáadsz egy sornyi naplózást az eseménykezelőhöz akkor megjelenik valami a böngésző fejlesztőeszközeinek Console fülében?

window.addEventListener('load', function() {
    console.log('window onload folyamatban, az űrlap :', document.querySelector('form[action="_sendmail.php"]'));
    document.querySelector('form[action="_sendmail.php"]').addEventListener('submit', CheckAll, false)
}, false)
8

Email-ellenőrzés most jó

Astroman · Feb. 5. (K), 13.27
Email-ellenőrzés most jó, de a többi mező ellenőrzése továbbra sem működik.

Csak ezt a figyelmeztetést találtam:

/deep/ combinator is deprecated. See https://www.chromestatus.com/features/6750456638341120 for more details.
tree.css.js:9 The -webkit-canvas CSS feature is deprecated. Please use a positioned <canvas> element instead.
9

Hát ha nálad nem ez

kuka · Feb. 5. (K), 13.52
Hát ha nálad nem ez történik:

Akkor arra kell gyanakodjak, hogy valami félrement amikor szerkesztette a JavaScript kódot.
Email-ellenőrzés most jó
Ha nem a fenti alert() figyelmeztetést kapod, attól tartok az a böngésző beépített ellenőrzése, mivel type="email" attribútumot adtál meg az beviteli mezőnek. Vagyis a szkripttel való ellenőrzés szempontjából valószínűleg az sem jó.
10

Egyik böngészőben sem

Astroman · Feb. 5. (K), 14.24
Egyik böngészőben sem jelenik meg a figyelmeztetés, továbbra is csupán az email mező kitöltésénél szól a "@" hiányára.
Attól tartok ezt már nem értem (eddig sem nagyon szagoltam hozzá) :) :( , hiszen bármit írok át a függvényben, nem történik változás.
Azt hiszem Te megtettél minden tőled telhetőt, amiért nagyon hálás vagyok. :)
11

Nos, esetleg ki is hagyhatod

kuka · Feb. 5. (K), 14.46
Nos, esetleg ki is hagyhatod a teljes JavaScript részt. Ha a böngésző beépített ellenőrzése megfelel, akkor a required attribútum segítségével felkérheted, hogy az üres mezőkért is ő sikítson:

<input type="text" name="subject" size="20" required="required">
https://caniuse.com/#feat=form-validation szerint a támogatottsággal manapság már nem kellene gond legyen.
12

Siker

Astroman · Feb. 5. (K), 15.01
WOW, Te mekkora király vagy!!!
Kombináltam a kettőt. Bent hagytam a mailcím-ellenőrzéshez a scriptet és beírtam a attribútumot és teljes siker!
Ezer köszi.! :)
13

Bár már megoldódott,

Pepita · Feb. 5. (K), 16.06
annyit azért célszerű "elkövetni", hogy ha valamilyen felhasználótól érkező adatot ellenőrizni akarsz, akkor azt szerver oldalon (is) ellenőrzöd.
Ne felejtsük el, hogy bármit írsz html-be vagy javascript-be, az a böngészőben tetszés szerint módosítható.
Ha csak annyi az ellenőrzés, hogy valami ne legyen üres, akkor arra (a trimmelések, egyéb átalakítások után) a php empty függvénye a legalkalmasabb.

Ezen kívül én tennék valami captcha-t is, hogy ne töltsék tele a postaládámat kedves robotok.
14

Ezen kívül én tennék valami

kuka · Feb. 5. (K), 16.19
Ezen kívül én tennék valami captcha-t is, hogy ne töltsék tele a postaládámat kedves robotok.
Szerintem erre lett volna hivatott a website mező:

<li style="display:none">
Should be Empty:
<input type="text" name="website" value="" />
</li>
Csak éppen kellene hozzá a PHP kód legelejére egy

// ha egy naiv bot rákattant és kitöltötte, akkor felejtős
if (! empty($_REQUEST['website'])) {
    return;
}
(Mondjuk személyesen már ott kirúgtam volna a szkriptet ahol nl2br() helyett str_replace(array("\n"), array("<br>"), …) van.)
15

Nagyon köszi.

Astroman · Feb. 5. (K), 19.45
Már tolom is be. :) Erre sem gondoltam, de nagyon hasznos.
Ezt is nagyon köszi. :)