Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Viestien lähetys ei toimi

Juhko [01.09.2008 16:44:24]

#

viesti_laheta.php

<html>
 <head>
  <title>Viestin l&auml;hetys</title>
 </head>
 <body bgcolor="black" text="8bd3bb" alink="8bd3bb" vlink="8bd3bb" link="8bd3bb">
	<img src="happy.jpg" width="350" height="300"><br><br>
  <a href="viesti_laheta.php">L&auml;het&auml; viesti</a>
<?php
//luetaan viestit taulukkoon
$viestit = file("viestit.txt");
//kaannetaan taulukko, jolloin uusimmat viestit tulevat ylimmiksi
$viestit = array_reverse($viestit);
//viestien maara on suoraan taulukon rivien maara
$viestimaara = count($viestit);

//tulostetaan viestimaara
echo "<p>Yhteens&auml; <b>$viestimaara</b> viesti&auml;.</p><hr>";

//kaydaan jokainen viesti lapi
for ($i = 0; $i < $viestimaara; $i++) {
   //$viestit[$i] on merkkijono, joka sisaltaa viestin $i tiedot
   //pystyviivoilla erotettuna; jaetaan viestit $tiedot-taulukkoon
   $tiedot = explode("|", $viestit[$i], 4);

   //erotellaan tiedot omiin muuttujiinsa
   $nimi = $tiedot[0];
   $email = $tiedot[1];
   $aika = $tiedot[2];
   $viesti = $tiedot[3];

   //tulostetaan viesti
   echo "<p><b>L&auml;hett&auml;j&auml;</b>: <a href=\"mailto:$email\">$nimi</a><br>";
   echo "<b>Aika</b>: " . date("d.m.Y H:i", $aika) . "<br>";
   echo "<br>$viesti<hr>";
}
?>
</body>
</html>

Palvelin on personal.fi.

viestit.txt-tiedoston oikeudet:
User 516, Access: Read & Write
Group 501, Access: Read only
Others, Access: Read Only

(FTP-ohjelmani on Secure FTP 2.5.17)

Myöskään mail-funktio ei toimi.

Niin, sekä tuo viestikoodi että mail-funktio ovat toimineet ennen, onkohan vika minussa, palvelimessa, vai jossakin muussa?

ville-v [01.09.2008 16:50:10]

#

Hyvin valitsit satunnaisen koodipätkän viestisi koristeeksi.

Ongelma: Tiedostoon ei tallennu eikä sähköpostia lähde.

Ongelman syy: Koodissa ei yritetä tallentaa tai lähettää mitään.

Ratkaisu: Lisää koodiin tallennus tai lähetys.

Lebe80 [01.09.2008 16:51:11]

#

Ja siis mikä olikaan kysymys?


Mail -funktiota ei tuossa koodissa ainakaan käytetä, eikä siinä muutenkaan tunnu mitään viestin lähetystä olevan, ainoastaan tulostetaan mailto-linkit (jota klikkaamalla avataa käyttäjän sähköpostiohjelma).


edit:
ville prkl kerkes.

ville-v [01.09.2008 17:00:08]

#

Kerrataan vielä tietojen tallennus, kymmenessä sekunnissa tekaisin tällaisen:

<?php
// Näin tarkistamme onko tietoja lähetetetty
if(isset($_POST["tieto"])){

// Kirjoitamme tiedostoon
$file = fopen("tiedosto.txt", "a+");
fwrite($_POST["tieto"], $file);
fclose($file)

// Näin lähetämme sähköpostin
mail("kohde@www.fi", "otsikko", $_POST["tieto"]);

}
// Jos ei lähetetty, tulostamme lomakkeen. Lomakkeen voisi myös tulostaa joka sivulle, poistamalla else-sanan
else{
?>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">

Name-arvosta tiedämme mistä muuttujasta on kyse
<input name="tieto" type="text" />
<input type="submit" value="Lähetä" />

</form>

Tähän voitaisiin lätkäistä esiin laittamasi tietojen tulostus.

<?php
}
?>

Juhko [01.09.2008 17:14:44]

#

Apua, viestiin putkahti vahingossa koodi, jolla viestit näytetään. Oikea koodi on tässä

<?php
//jos nimea ei ole annettu, naytetaan lomake...
if (!isset($_POST['nimi'])) {
?>
<html>
 <head>
  <title>Viestin l&auml;hetys</title>
 </head>
 <body bgcolor="black" text="8bd3bb" alink="8bd3bb" vlink="8bd3bb" link="8bd3bb">
	<img src="happy.jpg" width="350" height="300"><br><br>
  T&auml;ss&auml; voit l&auml;hett&auml;&auml; Hulluaivon Viestittimeen viestej&auml;, jolloin kaikki voivat lukea niit&auml;!<br><br>

  <form action="viesti_laheta.php" method="post">
  Nimi: <br> <input type="text" name="nimi"> <br>
  S&auml;hk&ouml;posti: <br> <input type="text" name="email"> <br>
  Viesti: <br> <textarea name="viesti"></textarea> <br> <br>
  <input type="submit" value="L&auml;het&auml;">
  </form>

 </body>
</html>
<?php
//...muussa tapauksessa kirjoitetaan viesti tiedostoon
} else {
   //avataan tiedosto append-tilassa: kirjoitetaan tiedoston loppuun
   $tiedosto = fopen("viestit.txt", "a");

   //haetaan lomakkeen kautta tulleet muuttujat
   $nimi = $_POST['nimi'];
   $email = $_POST['email'];
   $viesti = $_POST['viesti'];

   //poistetaan ylimaaraiset kenoviivat (\)
   $viesti = stripslashes($viesti);
   //estetaan HTML-tagien kayttaminen
   $viesti = htmlspecialchars($viesti);
   //muutetaan rivinvaihdot HTML-muotoon
   $viesti = str_replace("\n", "<br>", $viesti);

   //otetaan talteen aika, jolloin viesti lahetettiin
   $aika = time();

   //muodostetaan tiedostoon tallennettava rivi
   $rivi = "$nimi|$email|$aika|$viesti\n";

   //kirjoitetaan rivi tiedostoon
   fwrite($tiedosto, $rivi);

   //suljetaan tiedosto
   fclose($tiedosto);

   //ohjataan kayttaja vieraskirjasivulle
   header("Location: viesti_nayta.php");
}
?>

Edit: Äskeisessä ei yritetäkään lähettää sähköpostia, se koodi on tässä:

<?php
if(isset($_POST['liity'])){
   $teksti = 'Uusi jasen Hulluaivo-klubiin.
-------------------------------------------------------------
Lahettajan IP: '.$_SERVER['REMOTE_ADDR'].'
Jasenen oikea nimi: '.$_POST['oikeanimi'].'
Jasenen kayttajanimi: '.$_POST['nimi'].'
Jasenen salasana: '.MD5($_POST['salasana']).'
Jasenen sahkopostiosoite: '.$_POST['email'];
$laheta = mail("juho.alho@luukku.com","Jasen Hulluaivo-klubiin",$teksti,"From: Hulluaivo <yllapito@hulluaivo.tk>");
header("Location: frontpage.html");
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 TRANSITIONAL//EN">
<html>
	<head>
		<style type="text/css">
			.subtitle {background-color:blue}
			a:link {color:8bb3bd}
			a:visited {color:8bb3bd}
		</style>
	</head>
	<body bgcolor="black" text="#8bd3bd">

<img src="cooltext40090505.gif">

<img src="happy.jpg" width="320" height="280"><br>

Paljon tekstii...<br><br>

<form method="post">
	Mik&auml; on kutsumanimesi? <input type="text" name="oikeanimi"><br>
	Valitse haluamasi k&auml;ytt&auml;j&auml;tunnus: <input type="text" name="nimi"><br>
	Valitse haluamasi salasana: <input type="password" name="salasana"><br>
	S&auml;hk&ouml;postiosoitteesi: <input type="text" name="email"><br>
	&nbsp;- Hyv&auml;ksyn Hulluaivon k&auml;ytt&ouml;ehdot<br>
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="Liity" name="liity"><br>
<br>
Paljon tekstii....
</form>

	</body>
</html>

Sivusto on http://www.hulluaivo.tk/ ja sivut "Viestitin" ja "Liity Hulluaivo-klubiin", joten voitte käydä katsomassa sieltä.
Ps. Tämä EI ole mainos ;)

Deffi [02.09.2008 20:49:37]

#

Empä tiiä, mutta kokeiles antaa viesti_laheta.php:lle Write-oikeudet ja kokeile sitten. Voit kai suoraan chmodata kaiken -> 777, kun eipä siitä mitään merkittävää haittaa ole, ja sitten ei ainakaan pitäisi olla chmodeista kiinni.

Btw, hieno sivu :D
Saisit kyllä ainakin pistää tuon http://user.personal.fi/atk/juhkonkotisivu/users.dat johonkin toiseen kansioon seuraavanlaisen .htaccess-tiedoston kanssa:

deny from all

Sen jälkeen vielä päivität skriptit että ne löytää tuon users.datin sieltä. Hyvä olis tietenkin estää koko tiedostolistaus, vaikka tekemällä index.php-tiedosto tonne /juhkonkotisivu/ -polkuun.

Vastaus

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

Tietoa sivustosta