Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Sähköpostia lähettävä lomake

Sivun loppuun

Hymyhemmo [24.08.2012 16:58:56]

#

Eli tein tälläisen lomakkeen:
HTML (viesti.html):

<html>
<head>
<title> Viesti </title>
</head>
<BODY BACKGROUND="images/templatemo_background.jpg">
<form action="lahetaviesti.php" method="post">
<table width="400" border="0" align="center">
<tr>
  <td>Vastaanottajan sähköpostiosoite:<br><input type="text" name="vemail" size="60"></td>
</tr>

<tr>
  <td>Lähettäjä:<br><input type="text" name="nimi" size="60"></td>
</tr>

<tr>
  <td>Oma emailisi (jos haluat, että se mainitaan viestissä):<br><input type="text" name="email" size="60"></td>
</tr>

<tr>
  <td>Aihe:<br><input type="text" name="aihe" size="60"></td>
</tr>

<tr>
  <td>Viesti (HTML):<br><textarea name="viesti" cols="45" rows="4"></textarea></td>
</tr>
<tr>
  <td align="center"><input type="submit" value="Lähetä"> <input type="reset" value="Tyhjennä"></td>
</tr>
</table>
</form>

</body>
</html>

Ja sitten tämä PHP (lahetaviesti.php):

<html>
<head>
<title> Viesti lähetys </title>
</head>
<body>
<table width="400" align="center">
<tr>
 <td align="center">

<?php
$posti = array
  (
  nimi=>$_POST['nimi'],
  email=>$_POST['email'],
  viesti=>$_POST['viesti']
  aihe=>$_POST['aihe']
  vemail=>$_POST['vemail']
  );

foreach ($posti as $arvo)
{
  if (empty($arvo))
  {
  die("Jätitkö jotain tyhjäksi?");
  }
}

$osoite = $_POST['vemail'];
$otsikko = $_POST['aihe'];
$viesti = "Olet saanut viestin.
Lähettäjä on: ".$_POST['nimi']." hänen sähköpostiosoite on: ".$_POST['email']."
Viesti: ".$_POST['viesti']."
";

mail ($osoite, $otsikko, $viesti, From= $_POST['vemail']);

echo "Viesti lähetty onnistuneesti!";
?>

 </td>
</tr>
</table>
</body>
</html>

Virhe koodi nettisivulle on:
Parse error: syntax error, unexpected T_STRING, expecting ')' in /home/a7046829/public_html/lahetaviesti.php on line 16

Mikä on koodissa vikana, kun ei toimi?

JaskaP [24.08.2012 17:09:30]

#

En PHP:stä ymmärrä mitään, mutta pilkkuja ainakin näyttäisi puuttuvan $posti-taulukon määrittelystä.

Hymyhemmo [24.08.2012 17:21:30]

#

Ok vielä yks juttu miten saan tämän sisään

"From: osoitteesi@palvelin.tunnus");

Tämän

$_POST['vemail']

Eli se muuttaa vastaan ottajaa. Koska se ei vielä toimi.... Kiitos jo etukäteen!

-tossu- [24.08.2012 17:22:15]

#

Tyhjien kenttien tarkistus onnistuu paljon helpommin tähän tyyliin:

if (empty($_POST['nimi']) || empty($_POST['email']))
	die("Jätitkö jotain tyhjäksi?");

Edit: Korjasin koodin

Headerit pitää antaa mail-funktiolle näin:

mail($osoite, $otsikko, $viesti, "From: " . $_POST['vemail']);

Tällaisia mail-skriptejä ei sitten kannata laittaa julkisille sivuille.

Hymyhemmo [24.08.2012 18:19:59]

#

Minkä takia?

-tossu- [24.08.2012 19:08:48]

#

Joku keksii ennen pitkää käyttää lomaketta häiriköintiin tms, mistä sähköpostipalvelimesi ylläpitäjä tuskin pitää.

Hymyhemmo [24.08.2012 19:20:14]

#

OK...no olen jo suunniteluut sen turvaamiseen, luulin että siinä on tietoturva aukko.

Lisäys:

Mitenkä saisin vielä tällä koodilla:

<?php

$salakoodi ="XXXXXXXX";

//Printtaa kuka on käyttäjä

if ($_SESSION["accesslevel"] == "$salakoodi")
{

$kukakayttaa = $_SESSION["username"];
print ("Käyttäjä: "."$kukakayttaa");

}

?>

Printattua tuon käyttäjä nimen tuohon

$osoite =

kohtaan?

-tossu- [24.08.2012 20:59:39]

#

PHP huolehtii sessioiden turvallisuudesta, eli et tarvitse mitään salakoodeja. Voit tallentaa oikeudet sessioihin ihan muodossa $_SESSION['saa_lahettaa_maileja'] = true

Luin koodiasi tarkemmin, enkä käsitä, miksi olet asettanut vastaanottajan ja lähettäjän osoitteen samaksi. Molempina käytetään $_POST['vemail']:ia.

Mikäli haluat lähettää postia osoitteeseen $_SESSION['username'], onnistuu se joko sijoittamalla se muuttujaan $osoite tai kirjoittamalla $_SESSION['username'] suoraan mail-funktion parametriksi.

$osoite = $_SESSION['username'];
// Tai
mail($_SESSION['username'], $otsikko, $viesti, "From: " . $_POST['vemail']);

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta