Kirjautuminen

Haku

Tehtävät

Kilpailu

Ohjelmoi tekoäly!
Tulokset on julkaistu.
Onnea voittajalle!

Keskustelu: Nettisivujen teko: Palautelomake: päivämäärä 01.01.1970

Sivu 1 / 1

Sivun loppuun

ansku_N [02.01.2020 02:07:26]

Lainaa #

Olen täysin aloittelija ohjelmoinnissa.

Olen tehnyt nettisivuille palautelomakkeen sekä form.php-tiedoston, joka lähettää lomakkeen sähköpostiin. Olen googlannut ja kokeillut useita eri koodeja, mutta kaikissa tulee vastaan sama ongelma: kun lomake lähettää sähköpostin, saapuu sähköposti päivämäärällä 1.1.1970.

Mistä tämä johtuu, ja miten tämän voisi korjata?

Yksi lomakkeista, jonka sain muuten toimimaan oli https://www.nettihotelli.fi/?Ohjeet/Muut_kysymykset/Lomakkeenpostittaja , joten vinkkejä voi antaa vaikka liittyen tuohon koodiin tai ehdottaa parempaa.

The Alchemist [02.01.2020 03:40:13]

Lainaa #

Kun saat päivämäärän 1.1.1970, niin se tarkoittaa, että olet yrittänyt muotoilla päivämääräksi jotain numeerista aikaleimaa (Unix timestamp), joka ei ole kelvollinen eli on 0 / null / false. Tarkista siis, minkä arvon annat date()-funktiolle tai mitä nyt käytätkään.

Tuo koodi on täyttä roskaa, minkä näkee suoraan katsomalla kirjoitusasua, enkä koskisi siihen. Googlella löytää parempia, en välitä nyt etsiä itse.

Metabolix [02.01.2020 09:04:38]

Lainaa #

Kyseisessä koodissa ei merkitä ollenkaan lähetysaikaa viestiin, ja yleensä postituksen yhteydessä siihen pitäisi tulla automaattisesti lähetysaika. Tavallaan vika on siis enemmänkin palvelimen sähköpostiasetuksissa, kun tällainen on edes mahdollista.

Ongelman voi ehkä korjata seuraavalla muutoksella:

Etsi tämä kohta:

"\n"

Vaihda siihen näin:

"\r\nDate: ".date(DATE_RFC2822)."\r\n"

Koodi sinänsä ei näytä kovin laadukkaalta, mutta jos se toimii tarpeeksi hyvin, mikäpä siinä sitten. Koodin asettelu vihjaa, että siitä on korjattu mm. register_globalsin aiheuttamia tietoturva-aukkoja jälkikäteen, ja tässä touhussa on vielä sössitty niin, että muuttuja $virhesivu on hyödytön.

ansku_N [02.01.2020 15:08:50]

Lainaa #

Hei,

Kiitos vastauksista! Ongelma on kohdistunut nimenomaan mailisovellukseen kännykässä, tietokoneelta katsottuna päivämäärä näkyy oikein.. Ilmeisesti, koska koodi ei merkitse lähetysaikaa, tulkitsee sähköpostisovellus viestin lähetetyksi ilman mitään lähetysaikaa. Korjaisin kuitenkin mielelläni tämän ongelman, mikäli se on helposti mahdollista korjata.

Olisiko alla oleva yksinkertainen koodi parempi kuin koodi aikaisemmin linkittämälläni sivulla, ja miten siihen voisin lisätä ylläolevan päivämäärää koskevan koodin?

<?php $name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$formcontent="From: $name \n Message: $message";
$recipient = "email@gmail.com";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
  header( 'Location: http://www.yoursite.com/thanks.html' ) ;
?>

walkout_ [04.01.2020 11:53:05]

Lainaa #

submit.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Kiitos palautteesta!</title>
</head>

<body>
<?php

require_once ("config.php");

$fullname = (string) stripslashes($_POST['fullname']);
$company = (string) stripslashes($_POST['company']);
$phonenumber = (string) stripslashes($_POST['phonenumber']);
$email = (string) stripslashes($_POST['email']);
$feedback = (string) stripslashes($_POST['feedback']);

$message = strip_tags(utf8_decode("-- Viesti palautelimakkeesta --\n"
           ."Nimi: ".$fullname."\n"
		   ."Yritys: ".$company."\n"
		   ."Puhelinnumero: ".$phonenumber."\n"
		   ."Sähköpostiosoite: ".$email."\n\n"
		   .$feedback."\n"
		   ."----------------------------------"));

$required = @explode(",", $_POST['required']);
$count = count($required)-1;

for($n=0;$n<=$count;$n++) {
	if($required[$n] != "") {
		$x = $required[$n];
		if($_POST[$x] == "") {
			$stop = "yes";
		}
	}
}

if($stop == "") {

mail($email_To_Sent, $email_Subject, $message,
     "From: $from_Email\r\n"
    ."Reply-To: $email\r\n"
    ."X-Mailer: PHP/" . phpversion());
	echo "Kiitos palautteestasi!";

} else {

	echo "Ole hyvä ja täytä kaikki kenttät lukuunottamatta vapaaehtoista kenttää Yritys! Ja lähetä tämän jälkeen palaute uudestaan!";

}

?>
</body>
</html>

config.php

<?php
$email_To_Sent = "";
$from_Email = "";
$email_Subject = "Viesti palautelomakkeesta";

ja lomakkeen HTML/JavaScript-koodi:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Palautelomake</title>
<script language="javascript" type="text/javascript">
function validateForm()
{
var x=document.forms["feedbackform"]["fullname"].value;
var y=document.forms["feedbackform"]["phonenumber"].value;
var z=document.forms["feedbackform"]["email"].value;
var v=document.forms["feedbackform"]["feedback"].value;

var atpos=z.indexOf("@");
var dotpos=z.lastIndexOf(".");

if (x==null || x=="")
  {
  alert("Nimi on pakollinen tieto! Syötä lomakkeeseen nimesi!");
  return false;
  }

if (y==null || y=="")
  {
  alert("Puhelinnumero on pakollinen tieto! Syötä lomakkeeseen puhelinnumerosi!");
  return false;
  }

if (atpos<1 || dotpos<atpos+2 || dotpos+2>=z.length)
  {
  alert("Sähköposti osoitteesi ei ole validi!");
  return false;
  }

if (v==null || v=="")
  {
  alert("Palaute on pakollinen tieto! Syötä lomakkeeseen palautteesi!");
  return false;
  }


}
</script>
</head>

<body>
<h1>Palautelomake</h1>
<p>
<form action="submit.php" method="post" name="feedbackform" onsubmit="return validateForm()">
<input type="hidden" name="required" value="fullname,phonenumber,email,feedback">
Nimi*: <input class="form" name="fullname" type="text" /><br />
Yritys: <input class="form" name="company" type="text" /><br />
Puhelinnumero*: <input class="form" name="phonenumber" type="text" /><br />
Sähköpostiosoite*: <input class="form" name="email" type="text" /><br />
Palaute*: <br />
<textarea class="form" name="feedback" cols="80" rows="8"></textarea><br />
<input class="form" name="submit" type="submit" value="Lähetä" /> <input class="form" name="reset" type="reset" value="Tyhjennä" />
</form>
</p>
</body>
</html>

The Alchemist [04.01.2020 11:55:44]

Lainaa #

Ei tässä ole oikein mitään järkeä tehdä / käyttää näitä onnettomia räpellyksiä. Pelkän mail()-funkkarin käyttö toimi ehkä joskus 10+ vuotta sitten mutta ei oikein enää sen jälkeen. Viestit lentävät herkästi spammilootaan, jos niissä on yksikin virhe, ja alkeellisella mail()-toteutuksella tehtynä virheitä tulee olemaan lukuisia.

Vaikka osa viesteistä tulisikin läpi, niin se voi olla ihan puhdas vahinko, koska spammisuotimet toimivat ns. arvaamalla ja joskus nekin erehtyvät.

Minä ratkoin palkkatyössäni mail()-funkkariin liittyviä ongelmia jo kahdeksan vuotta sitten, ja sen jälkeen kriteerit ovat ainoastaan tiukentuneet.

Nimimerkin walkout_ ehdottama toteutus on väärin jo siitä syystä, ettei se käytä HTML5:n tuomia uusia input-tyyppejä. Tuollaiset sekavat omat validoinnit ovat huono idea ja turhaa painolastia.

<input type="email" required />

walkout_ [04.01.2020 12:02:49]

Lainaa #

Palutelomakeen teko asiakkalle on usein turhaa, koska asiakkaan asiakaat eivät sitä kuitenkaan halua käyttää vaan mielummin antaa sähköpostiosoite kotisivullaan johon lähettää postia mutta tämä aiheuttaa helposti sen, että siiten alkaa tulla spämmiä vaikka olisi koodilisesti yritetty estää robottien kopiomasta sähköpostiositetta spämmi-listalle, koska ihminen sen osaa joka tapauksessa kopioida.

The Alchemist [04.01.2020 12:03:55]

Lainaa #

Samalla tavalla spammia alkaa tulla sen palautelomakkeen kauttakin. Ehkä jonkin verran vähemmän ja ehkä pienellä viiveellä, mutta lopulta sitä kuitenkin alkaa tulla. Useat sähköpostipalvelut tarjoavat kyllä toimivan spammifiltterin, joka nappaa aika paljon selvää roskaa.

Juuri tästä syystä juosten kustu palautelomake on huono idea, koska viestin (teknisestä näkökulmasta) huono muotoilu johtaa siihen, että spammifiltteri pitää viestiä roskapostina.

walkout_ [04.01.2020 12:07:33]

Lainaa #

Ext JS:llä tekmistäni lomakeista joissa on Google reCapcha ei ole tullut koskaan spämmiä ja muutenkin lomekeet ovat niin monimutkaisia täyttää että spämmibotti ei sitä osaa täyttää.

The Alchemist [05.01.2020 07:14:47]

Lainaa #

Jos lomake on ensisijaisesti javascript-viritelmä, niin spammibotit eivät oikein osaa käyttää sitä. Silloin kun lomake on tehty staattisella HTML:llä, niin spammia alkaa tulla aina, olipa siinä millainen captcha tahansa.

Javascript-sovelluksessa captcha voi jopa olla aika turha, koska tosiaan botit eivät osaa edes löytää lomaketta silloin.

Grez [05.01.2020 10:34:59]

Lainaa #

Javascript ei sinällään kuitekaan estä botteja. Omasta kokemuksesta voin sanoa että spämmiä tulee vaikka palvelinpää ottaisi vastaan pelkkiä selainpään javascriptin pureskelemia JSON-syötteitä. Ehkäpä avainsanana on "viritelmä", eli jos botti ei edes tajua sivulla olevan lomaketta, niin se ei yritä suorittaa javascriptiäkään.

walkout_ [05.01.2020 10:41:34]

Lainaa #

Jos on julkinen lomeke jossa on mm. submit.php tiedosto niin kyllä spämmipotti osaa ks. tiedostoon lähettää jotain vaikka lomake olisi koodattu pelkällä JavaScriptillä. Siis silloin vain esim. lomakekentäät tulee kaikki null-arvolla kun botti ei tiedä miten submit.php-tiedosto on koodattu.

Grez [05.01.2020 11:17:58]

Lainaa #

Selvästikin se botit kuitenkin osaa myös suorittaa javascrtiptiä, koska spämmiä tulee vaikka lomakkeen osoite ei olisi "yleinen", json sanoman kentät ei olisi yleisen nimisiä eikä palvelin välittäisi pyyntöä josta puuttuu tietoja tai on ylimääräisiä kenttiä.

Javascriptin suorittaminen koneellisesti ei kuitenkaan ole temppu eikä mikään.

walkout_ [05.01.2020 13:23:25]

Lainaa #

Minulla on tehtynä tällainen lomake Ext JS:llä:
http://ext.i4ware.fi/careers/index/index
Se on ollut jo vuosia julkisesti online eikä yhtään spämmiä ole tuonne tullut. Jos olisi niin se näkyisi julkisesti, koska siellä on alla gridi joka hake MySQL-tietokantaan tallenut datan.
Lomakkeessa on myös Google reChapcha 2.0.

Grez [05.01.2020 13:28:30]

Lainaa #

Niin tuossahan voisi olettaa että suurin syy miksi spämmiä ei tule on tuo, että siinä on tuo reCaptcha. Ehkä myös sivuston suhteellinen tuntemattomuus.


Sivun alkuun

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta