PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
Kontaktvormis täpitähed
Postitaja: cat3 2013-09-18 16:23:57
Olen PHP-s suhteliselt algaja. Ei saa kuidagi toimima kontaktvormis saatjat. Kui saaja nimi või meiliaadress täpitähtedega, siis näitab selle asemel C-tähti komade ja punktidega. Kirja sisu näitab normaalselt.
PHP kood siis järgmine:
<?php

$Kellele='mail@mail.ee';
$Back='<br /><a href="javascript:history.go(-1)">Mine tagasi ja paranda viga!</a>';
$Teema="Kiri kodulehelt";
$Sisu=$_POST['Sisu'];
$Tel=$_POST['Tel'];
$Nimi=$_POST['Nimi'];
$Email=$_POST['Email'];
$headers.="Content-Type: text/html; charset=utf-8rn";
$header_ = 'MIME-Version: 1.0' . "rn" . 'Content-type: text/plain; charset=UTF-8' . "rn";

if(isset($_POST['send'])){
$errors=array();
if(strlen($_POST['Nimi'])<2) $errors[]='Nimi peab pikem olema!';
elseif(strlen($_POST['Nimi'])>60) $errors[]='Nimi peab lühem olema olema! (max. 60)';
if(!strstr($_POST['Email'],'@') or !strstr($_POST['Email'],'.') ) $errors[]='Email on vigane!';
elseif(strlen($_POST['Email'])<7) $errors[]='Email on liiga lühike!';
elseif(strlen($_POST['Email'])>50) $errors[]='Email on liiga pikk!';
if(strlen($_POST['Sisu'])<4) $errors[]='Kirja sisu on liiga lühike!';
elseif(strlen($_POST['Sisu'])>2000) $errors[]='Kirja sisu on liiga pikk! (max. 2000)';

if(empty($errors)){
mail($Kellele, '=?UTF-8?B?'.base64_encode($Teema).'?=', "$SisunnTelefoni number:$Tel", "From: $Nimi <$Email>n" .$ccText.$bccText. "hybrid: mailer",$headers);
echo 'Kiri on edukalt saadetud. Vastame esimesel võimalusel.<br /><br />Nimi: '.$Nimi.'<br />Email: '.$Email.'<br />Telefon: '.$Tel.'<br />Teema: '.$Teema.'<br />Sisu: '.$Sisu.' ; }

else{ foreach($errors as $error)echo $error.'<br />'; echo $Back;}
}

?>

See päästaks mu päeva, kui keegi oskaks lahenduse välja pakkuda, tänud
RE: Kontaktvormis täpitähed
Postitaja: google prism 2013-09-18 17:01:12
kas google otsingut oled proovinud, seal on tuhandeid näiteid epostiga vormide tegemiseks, ära hakka ise leiutama. eriti veel kui end algajaks pead
RE: Kontaktvormis täpitähed
Postitaja: martin 2013-09-18 17:55:49
Vaata, kuidas sul $Teema on headerisse pandud - pead $nimi ja $email samuti panema.

'=?UTF-8?B?'.base64_encode($Teema).'?='
RE: Kontaktvormis täpitähed
Postitaja: ise php 2013-09-18 18:21:10

PHP kood:
 
<?php
header
('Content-Type: text/html; charset=utf-8');

 
$Kellele='mail@mail.ee';
 
$Back='<br /><a href="javascript:history.go(-1)">Mine tagasi ja paranda viga!</a>';
 
$Teema="Kiri kodulehelt";
 
$Sisu=$_POST['Sisu'];
 
$Tel=$_POST['Tel'];


ja lase edasi.
RE: Kontaktvormis täpitähed
Postitaja: ise php 2013-09-18 18:28:30
Kui see ei aita, siis mul on sõnumi sisu selliselt pandud,


PHP kood:
 
header
('Content-Type: text/html; charset=utf-8');
ob_start(); //Turn on output buffering 

?> 
<p>Sõnum veebilehelt</p>
<div style="background:#ECECEC;">
<p style="font_weight:bold;background:#cccccc;"><?php echo $pk?></p><br>


<?php
echo $sisu;
?>
</div>
<?php 

//copy current buffer contents into $message variable and delete current output buffer 
$message ob_get_clean(); 
RE: Kontaktvormis täpitähed
Postitaja: cat3 2013-09-18 18:43:50
TSITEERITUD:

PHP kood:
 
<?php
header
('Content-Type: text/html; charset=utf-8');

 
$Kellele='mail@mail.ee';
 
$Back='<br /><a href="javascript:history.go(-1)">Mine tagasi ja paranda viga!</a>';
 
$Teema="Kiri kodulehelt";
 
$Sisu=$_POST['Sisu'];
 
$Tel=$_POST['Tel'];


ja lase edasi.


Kui selle rea panen, siis lööb errori:Cannot modify header information - headers already sent

Viimati muudetud: 18-09-2013 18:45:43
Muutja: cat3
Põhjus:

RE: Kontaktvormis täpitähed
Postitaja: blaa 2013-09-18 18:48:08
võta phpmailer, pole mõtet ise seda asja leiutada

ära testi mail.ee või everyday keskkonnas, need sakivad vilinal
RE: Kontaktvormis täpitähed
Postitaja: ise php 2013-09-18 19:58:12
header alati esimene asi, mis välja trükitakse lehel, tõsta see lihtsalt lehe ette otsa et midagi muud ennem ei oleks. Sul see siiski vist ei aita, kuna see käib rohkem sisu kohta.
RE: Kontaktvormis täpitähed
Postitaja: cat3 2013-09-18 20:21:04
TSITEERITUD:
header alati esimene asi, mis välja trükitakse lehel, tõsta see lihtsalt lehe ette otsa et midagi muud ennem ei oleks. Sul see siiski vist ei aita, kuna see käib rohkem sisu kohta.


Panin jah ülesse, aga tõesti ei aidanud.
RE: Kontaktvormis täpitähed
Postitaja: lost in scope 2013-09-19 12:31:01
kuskohas ei näita subjekti täpitähti?
kas veebilehel või emailis, mis on kohale toimetatud?
RE: Kontaktvormis täpitähed
Postitaja: cat3 2013-09-19 13:22:20
TSITEERITUD:
kuskohas ei näita subjekti täpitähti?
kas veebilehel või emailis, mis on kohale toimetatud?



Teema ja sisu täpitähti näitab, aga saatja ja meiliaadressi täpitähti ei näita kohaletoimetatud emailis.
Kui panen
$Nimi=$_POST['Nimi'];
$Nimi='=?UTF8?B?'.base64_encode($Nimi).'?=';
siis näitab kohaletoimetatud meilis nime täpitähtedega, aga veebilehel kuvab: Nimi: =?UTF-8?B?w4TDnMOVw5ZubmlrZQ==?=
RE: Kontaktvormis täpitähed
Postitaja: cat3 2013-09-19 15:16:43
Panin praegu niimoodi ja minu praeguses serveris ja outlookis meili vaadates kood toimib.
$Kellele='mail@minumail.ee';
$Back='<br /><a href="javascript:history.go(-1)">Mine tagasi ja paranda viga!</a>';
$Teema="Kiri kodulehelt";
$Sisu=$_POST['Sisu'];
$Tel=$_POST['Tel'];
$Sisu.="nnTel:".$Tel;
$Nimi=$_POST['Nimi'];
$Nimi_UTF_8='=?UTF-8?B?'.base64_encode($Nimi).'?=';
$Email=$_POST['Email'];
$headers="MIME-Version: 1.0"."n";
$headers.="Content-type: text/plain; charset=UTF-8"."n";
$headers.="From: $Nimi_UTF_8 <$Email>"."n";

ja mail-i:
mail($Kellele, '=?UTF-8?B?'.base64_encode($Teema).'?=', $Sisu, $headers);

Eks kui õigesse serverisse ülesse panen , siis paistab kas ikka toimib. Loodetavasti ei ole see päris vale lähenemine.
RE: Kontaktvormis täpitähed
Postitaja: martin 2013-09-19 18:05:12
Õige lähenemine!
RE: Kontaktvormis täpitähed
Postitaja: rtfm 2013-09-23 12:57:47
TSITEERITUD:
Panin praegu niimoodi ja minu praeguses serveris ja outlookis meili vaadates kood toimib.
$Kellele='mail@minumail.ee';
$Back='<br /><a href="javascript:history.go(-1)">Mine tagasi ja paranda viga!</a>';
$Teema="Kiri kodulehelt";
$Sisu=$_POST['Sisu'];
$Tel=$_POST['Tel'];
$Sisu.="nnTel:".$Tel;
$Nimi=$_POST['Nimi'];
$Nimi_UTF_8='=?UTF-8?B?'.base64_encode($Nimi).'?=';
$Email=$_POST['Email'];
$headers="MIME-Version: 1.0"."n";
$headers.="Content-type: text/plain; charset=UTF-8"."n";
$headers.="From: $Nimi_UTF_8 <$Email>"."n";

ja mail-i:
mail($Kellele, '=?UTF-8?B?'.base64_encode($Teema).'?=', $Sisu, $headers);

Eks kui õigesse serverisse ülesse panen , siis paistab kas ikka toimib. Loodetavasti ei ole see päris vale lähenemine.


vale lähenemine, ära kunagi kuskil kasuta otse $_POST või $_GET või ühtegi väärtust või massiivi mis saab sisendi otse kliendilt. Ennem tuleb väärtused vastavalt kontekstile varjestada http://phpsecurity.readthedocs.org/en/latest/_articles/PHP-S
RE: Kontaktvormis täpitähed
Postitaja: martin 2013-09-24 11:29:54
No encodingu mõttes õige lähenemine, turvalisuse poolest on vaja veel kodutöö teha :)

Siin üks konkreetsem link:
http://stackoverflow.com/a/4224002/1169324
RE: Kontaktvormis täpitähed
Postitaja: andris 2013-10-30 16:18:40
PHP mail käsk peaks olema viimane asi mida kasutada e-posti saatmiseks - juhul kui sa pole 100% kindel, et mida sa teed. Halval juhul hakatakse sinu skripti kasutama spämmerite poolt spämmilüüsina, paremal juhul ei jõua saadetud kirjad vigase vorminduse tõttu lihtsalt Junk mail kaustast kaugemale. Kui vähegi võimalik, tuleks alati eelistada terviklikke saatmise mooduleid nagu PHPMailer või Swift Mailer.

Toodud näidet on väga kerge ära häkkida suvalistele aadressidele spämmi saatmiseks - kuna ühtegi päise väärtust ei ole sanitiseeritud, siis on ülilihtne suvalise välja abil luua juurde päisesse lisaridu, näiteks To, Cc või Bcc aadressidega. Samuti saab samal viisil üle kirjutada nii kirja pealkirja kui ka sisu - sisu jaoks tuleks muuta kirja Content-Type väärtust, nii et see oleks multipart/*, seejärel tuleks oma spämmisisu lisada esimesse text/html blokki ning kirja "õige" sisu jätta viimasesse multipart osasse, mida üldse välja ei kuvatagi.

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0885190963745