webForumDet fria alternativet

Mailformulär

PHPur Script - PHP

15 svar · 22 234 visningar · startad av Tinwëlint

Medlem sedan maj 2004451 inlägg
Frågan#1

Jag modifierade walter groupius mailform, som han inte orkade lägga upp här (se den här tråden: Länk)
men som han har lagt upp på sin hemsida www.hoglind.org.
Html-koden är inte ett helt dokument utan detta är tänkt att infogas där man vill ha det. Ingen style är heller med utan det får man sköta själv med hjälp av css.
En del funktioner var sådana som jag själv tyckte jag behövde till https://www.kgabudo.org/kontakt.php och kanske inte alla vill ha.
För övrigt är jag inte direkt någon hejare på php utan har fått hjälp med mina ändringar (här bland annat länk)

Då till själva skriptet. Håll till godo:

<?php
//--------------- php micromailer 1.0 by Bjorn Hoglind -----------------
//-------------------- 2004/08/03 [url]www.hoglind.org[/url] ----------------------
// Script to mail from homesite. I am not a big php coder (as you ------
// can see. But the script works fine on my site, whitch was intended.--
// I will probably make improvements, i will publish them to.-----------
// Feel free to do anything with this program, but keep this notice.----
//-------------------------------------------------------------------------------------------------
//modified 2004-08-05 by Anders Johansson, [url]www.karlshagen.net/aj[/url]  (removed the <form> from several prints to pure html)
//modified even more by Anders Johansson 2004-08-08 (added selectbox)'
//extra extra modified by Anders Johansson 2004-08-15 (added checkbox: "send mail to me")
//-----------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------
// The form uses one CSS file for style. It validates xhtml. -----------
//----------------------------------------------------------------------
// --------- INSTRUCTION  ----------------------------------------------
// --------- Paste all the php code into the place where you want the --
// --------- mailform to appear. Change the emailadress to any you want.
// --------- Download to server, the "form"-page and the css file. -----
// --------- dont forget to include the css file in the meta tag -------
//----------------------------------------------------------------------

$mottagare = array(
    '1' => array('Person 1', 'person1@myserver.net'),
    '2' => array('Person 2', 'person2@myserver.net'),
    '3' => array('Person 3', 'person3@myserver.net')
)

//för de olika personer man ska kunna välja att skicka till. Om mailet bara ska kunna skickas till en person se versionen på [url]www.hoglind.org[/url]

?>

<form action="" method="post" id="contactform">
<p>
<select id="to" name="to" tabindex="1">
<?php
foreach ($mottagare as $key => $val) {

echo "<option value=\"$key\">$val[0]</option>\n";

//i den här selecten väljs personen man vill skicka till
}
?>
</select>
<label for="to">Till</label>
<p>
<input id="name" type="text" name="name" size="30" tabindex="2" />
<label for="name">Namn</label>
</p>
<p>
<input id="subject" type="text" name="subject" size="30" tabindex="3" />
<label for="subject">Ämne</label>
</p>
<p>
<input id="email" type="text" name="email" size="30" tabindex="4" />
<label for="email">E-post</label>
</p>
<p>
<label for="message">Skriv ditt meddelande här:</label>
<textarea id="message" name="message" cols="70" rows="5"  tabindex="5"></textarea>
</p>
<p>
<label for="doublesend">Skicka det här mejlet till mig också.</label>
<input id="doublesend" type="checkbox" name="doublesend" />
</p>
<p>
<button name="submit" type="submit" value="Skicka" tabindex="6">Skicka</button>
</p>
</form>

<?php

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "To: $till\r\n";
$headers .= "From: $name\r\n";
//några extra headers

extract($_POST);
if ($_POST['submit']) { 

$till = $mottagare[$_POST['to']][1];
//väljer ut rätt person att skicka till

	if($till && $name && $subject && $email && $message) { // kollar så alla fält är ifyllda
		if (return_valid($email)) { //om emailadressen verkar ok fortsätt
			mail($till,$subject,$message,
			"From: $name <$email>\r\n" .
			$headers
			); // skickar mailet
			
echo "<p>Meddelandet skickat!";
//om man har klickat i rutan för att få en kopia av mejlet till sig själv så skickas det här
	        if ($doublesend) {
      			mail($email,$subject,$message,
						"From: FRÅN VEM VILL DU HÄLSA?? HEMSIDANS NAMN ÄR BRA\r\n" .
						$headers
						);
						echo " Till både dig och den du ville kontakta</p>";
      			}
						else { echo "</p>"; }
			

  	}
	} else { print "<p>Fyll i alla fält!</p>"; }
}

function return_valid($email) {
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
return TRUE;
}
else {
  echo "<p>Ogiltig epostadress!</p>";
return FALSE;
}
}
//--------- end 

?>
Medlem sedan feb. 2003777 inlägg
#2

Om jag vill ha fler personer inskrivna i skripet,är det bara att lägga till

$mottagare = array(
    '1' => array('Person 1', 'person1@myserver.net'),
    '2' => array('Person 2', 'person2@myserver.net'),
    '3' => array('Person 3', 'person3@myserver.net')
)
Medlem sedan maj 2004451 inlägg
#3

Visst. Det är bara att utvidga den arrayen så långt du vill. Tänk på att den sista raden inte ska ha ett kommatecken efter sig.

Medlem sedan maj 2004451 inlägg
#4

Här kommer min nya version med lite tillägg från walter groupius version 3.1

<?php
/*
--------------- php micromailer 1.0 by Bjorn Hoglind -----------------
-------------------- 2004/08/03 [url]www.hoglind.org[/url] ----------------------
Script to mail from homesite. I am not a big php coder (as you ------
can see. But the script works fine on my site, whitch was intended.--
I will probably make improvements, i will publish them to.-----------
Feel free to do anything with this program, but keep this notice.----
modified 2004-08-05 by Anders Johansson, [url]www.karlshagen.net/aj[/url]  (move the <form> from several prints to pure html)
modified even more by Anders Johansson 2004-08-08 (added selectbox)
modified a third time by Anders Johansson 2004-09-15 (added some functions from hoglind's v3.1)

Det här leveraras helt utan någon stil. Men ett exempel på css-kod skickas med. En xsl-mall (vilken dock skulle behöva lite css-hjälp för att se snygg ut)för xml-loggen bifogas också.
*/
$din_site = "http:\/\/www.mysite.com";

$mottagare = array(
    '1' => array('Recipient 1', 'nr1@mysite.com'),
    '2' => array('Recipient 2', 'nr2@mysite.com'),
    '3' => array('Webbmaster', 'webmaster@mysite.com')
)
//Du kan fylla på med hur många nya mottagare du vill i den här listan
?>

<form action="" method="post" id="contactform">
<p>
<select id="to" name="to" tabindex="1">
<?php
foreach ($mottagare as $key => $val) {

echo "<option value=\"$key\">$val[0]</option>\n";
//skriver ut mottagarnas namn i en select-box
}
?>
</select>
<label for="to">Till</label>
<p>
<input id="name" type="text" name="name" size="30" tabindex="2" />
<label for="name">Namn</label>
</p>
<p>
<input id="subject" type="text" name="subject" size="30" tabindex="3" />
<label for="subject">Ämne</label>
</p>
<p>
<input id="email" type="text" name="email" size="30" tabindex="4" />
<label for="email">E-post</label>
</p>
<p>
<label for="message">Skriv ditt meddelande här:</label>
<textarea id="message" name="message" cols="70" rows="5"  tabindex="5"></textarea>
</p>
<p>
<label for="doublesend">Skicka det här mejlet till mig också.</label>
<input id="doublesend" type="checkbox" name="doublesend" />
</p>
<p>
<button name="submit" type="submit" value="Skicka" tabindex="6">Skicka</button>
</p>
</form>

<?php

extract($_POST);
if ($_POST['submit']) { 

$till = $mottagare[$_POST['to']][1];
// ur arrayen mottagare väljs nyckeln (ex: 2) som har angetts med to och värdet på plats 1 i den arrayen ut)

	if($till && $name && $subject && $email && $message) { // kollar så alla fält är ifyllda
		if (return_valid($email)) {//om adressen är ok
		       
					  if ($doublesend) {
      			mail($email,$subject,$message,"From: $name <$email>\r\nContent-type: text/html; charset=iso-8859-1\r\n");
						echo "<p>Meddelandet skickat till dig.</p>\n";
      			}
	 		//detta är en funktion som skickar med extra information längst ner i brevet om det skickas till webbmastern
	 		//jag hade nytta av det i min klubb där de andra som har mejladresser ändå inte skulle bry sig om den informationen
    			if ($till = "webmaster@mysite.com") {
					$message .= "\n----------\n";
    			$message .= about_mail();
    			}
			mail($till,$subject,$message,"From: $name <$email>\r\nContent-type: text/html; charset=iso-8859-1\r\n"); // skickar mailet
			//charset på raden ovan bör nog sättas till det charset man skickar ut sina sidor med
							$newlog=new logging("logs","contactlog.txt","contactlog.xml");
							//instantierar logg klassen, i mappen "logs" skapas "contactlog.txt" och "contactlog.xml"
							$newlog->create_txt(); //kör loggfunktioner i logg klassen
							$newlog->create_xml();
			echo ("<p>Meddelandet skickat till". $till."<p>\n");

  	} //slut if valid mail
	} else { print "<p>Fyll i alla fält!</p>\n"; }

} //slut if submit

// Returnerar sant om det är en korrekt adress.
function return_valid($e_mail) {
if(
ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $e_mail)) {
return TRUE;
}
else {
 return FALSE;
}
}
//--------- end 

// returnerar info om adressaten i mailet. i meddelandedelens topp. Som jag (Anders)har gjort bara när mailet är till webbmastern
function about_mail() {
	global $din_site;
		//$headline3="|  obs!, denna info sparas i xml filen log.xml "."\n";
		//$headline2="| ----------------------------------------------"."\n";
		$headline1="Du fick epost från ".$din_site."\n";
		$date.="Den: ".date("D-d-M-Y")."\n";
		$time.="Klockan: ".date("H:i:s")."\n";
		$ip.="Från ip nummer: ".$_SERVER['REMOTE_ADDR']."\n";
		$port.="Adressatens port: ".$_SERVER['REMOTE_PORT']." \n";
		$browser.="Adressatens läsare: ".$_SERVER['HTTP_USER_AGENT']."\n";
		$all = ($headline1.$date.$time.$ip.$port.$browser);
		return "$all";
}

//loggningen
class logging
{
private $folder;
private $logname;
private $xmlname;
private $filename;
private $dirname;

	function logging($f,$l,$x)
	{
		$this->folder=$f;
		$this->logname=$l;
		$this->xmlname=$x;
		$this->mode=$m;
		if ($this->mode==1)
		{
			$this->filename=getcwd()."\\$this->folder\\$this->logname";
			$this->dirname=getcwd()."\\$this->folder\\";
		}
		else 
		{
			$this->filename=getcwd().'/'.$this->folder.'/'.$this->logname;
			$this->dirname=getcwd().'/'.$this->folder.'/';
		}
	}
	
	
	function create_txt()
	{
		if (!file_exists($this->dirname)) mkdir ($this->dirname);
		$fp = fopen ($this->filename,a);
	$logs="<logging>\n";
		$logs.="<ip>".$_SERVER['REMOTE_ADDR']."</ip>\n";
		$logs.="<port>".$_SERVER['REMOTE_PORT']."</port>\n";
		$logs.="<browser>".$_SERVER['HTTP_USER_AGENT']."</browser>\n";
		$logs.="<date>".date("Y-m-d")."</date>\n";
		$logs.="<time>".date("H:i:s")."</time>\n";
		$logs.="</logging>\n\n";
		fwrite($fp,$logs);
		fclose($fp);
	}
//Har ändrat lite här jämfört med hoglinds. Han hade skrivit in rubriken i varje xml-element (<ip>IP: 414.145.553.345</ip>) vilket är helt onödigt
	function create_xml()
	{
		$filename=$this->xmlname;
		$fp=fopen($this->filename,r);
		$contents=fread($fp,filesize($this->filename));
		$final='<?xml version="1.0" encoding="iso-8859-1"?>'."\n".
			   '<!-- generator="logging class Ver:1.1" -->'.
			   "\n".
			   '<start>'
			   .$contents.
			   '</start>';
		fclose($fp);
		if ($this->mode==1) $fp=fopen($this->dirname."\\$filename",w);
		else $fp=fopen($this->dirname."/$filename",w);
		fwrite($fp,$final);
		fclose($fp);
	}

}

?>
form {
padding: 10px;
border: 1px solid #83909c;
background: #F5F3E9;
width: 90%;
}

?>

Här är delen för forms som jag själv använder i min stilmall på www.kgabudo.org. Det verkar nog inte särskilt vettigt utan resten av stilmallen men i sådana fall kan ni ju alltid titta där (https://www.kgabudo.org/css/general.css).

input, textarea, select {
	background: #fff;
	border: 1px solid #666;
	padding: .2em;
	color: #333;
}

input:focus, textarea:focus, select:focus {
 border: 1px solid #000;
}

textarea {
	width: 95%;
}

button, select {
font: Georgia, sans-serif;
}

Och till sist en litet xsl-mall jag gjorde för xml-loggen Den är helt ostylad men går lätt att snygga till med lite css.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml" lang="sv" xml:lang="sv">
<head>
<title>Mail genom mailformen</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
  <body>
    <table>
		<caption>Mail genom mailformen</caption>
		<thead>
      <tr>
        <th>IP</th>
        <th>Port</th>
        <th>Läsare</th>
        <th>Datum</th>
        <th>Tid</th>
      </tr>
		</thead>
		<tbody>
    <xsl:for-each select="start/logging">
    <tr>
      <td><xsl:value-of select="ip"/></td>
      <td><xsl:value-of select="port"/></td>
      <td><xsl:value-of select="browser"/></td>
      <td><xsl:value-of select="date"/></td>
      <td><xsl:value-of select="time"/></td>
    </tr>
    </xsl:for-each>
		</tbody>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>
Medlem sedan okt. 200415 inlägg
#5

Tjena!

Jag testar just nu detta scriptet, och det fungerar att skicka mail, men dessutom visas följande err-code:

Warning: fopen(): SAFE MODE Restriction in effect. The script whose uid is 53754 is not allowed to access /free1go/g/y/www.gylling.1go.dk/logs owned by uid 0 in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 175

Warning: fopen(/free1go/g/y/www.gylling.1go.dk/logs/log.txt): failed to open stream: No such file or directory in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 175

Warning: fwrite(): supplied argument is not a valid stream resource in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 183

Warning: fclose(): supplied argument is not a valid stream resource in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 184

Warning: fopen(): Unable to access /free1go/g/y/www.gylling.1go.dk/logs/log.txt in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 190

Warning: fopen(/free1go/g/y/www.gylling.1go.dk/logs/log.txt): failed to open stream: No such file or directory in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 190

Warning: filesize(): SAFE MODE Restriction in effect. The script whose uid is 53754 is not allowed to access /free1go/g/y/www.gylling.1go.dk/logs owned by uid 0 in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 191

Warning: fread(): supplied argument is not a valid stream resource in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 191

Warning: fclose(): supplied argument is not a valid stream resource in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 198

Warning: fopen(): SAFE MODE Restriction in effect. The script whose uid is 53754 is not allowed to access /free1go/g/y/www.gylling.1go.dk/logs owned by uid 0 in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 200

Warning: fopen(/free1go/g/y/www.gylling.1go.dk/logs//log.xml): failed to open stream: No such file or directory in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 200

Warning: fwrite(): supplied argument is not a valid stream resource in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 201

Warning: fclose(): supplied argument is not a valid stream resource in /free1go/g/y/www.gylling.1go.dk/micromailer.php on line 202

Någon som vet hur jag fixar det? Beror det på 1go.dk kanske?

Tack!

EDIT--> Obs, är ej detta ovanstående moddade utan v3.1, ber om ursäkt för det.

Medlem sedan apr. 200312 679 inlägg
#6

Tinwëlint: När jag använder koden som du skrev i #942759 så får jag ett felmeddelande:

Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in localhost on line 129

Någon som vet vad detta beror på?

Medlem sedan maj 2004451 inlägg
#7

Hmm, lite svårt att veta vilken rad som blir 129. Jag har för mig att den där koden fungerar som den ska för mig. Men du kan ju alltid prova att sätta ett "}" före rad 129. Det är det felet som det är troligast att jag har gjort.

Medlem sedan apr. 200312 679 inlägg
#8

Tinwëlint skrev:

Hmm, lite svårt att veta vilken rad som blir 129. Jag har för mig att den där koden fungerar som den ska för mig. Men du kan ju alltid prova att sätta ett "}" före rad 129. Det är det felet som det är troligast att jag har gjort.

Jag kopierade exakt din kod, jag har testat på två servrar, så jag tror inte att den funkade för dig... :p Eller? Testade att göra en sån där 'måsvinge' innan rad 129, men det gjorde ingen skillnad.

Om du kopierar din egna kod, endast php-koden, utan alla de där extra radbrytningarna som man får. Kan du inte kolla på raden då och se ifall det är nåt simpelt fel? Jag valde "citera" på ditt inlägg, och tog koden där ifrån. :p

Medlem sedan maj 2004451 inlägg
#9

Efter ett snabbt test vet jag vad problemet är. Det var jag som utan att testa ordentligt hade ändrat deklarationen av variablerna i början på logging-klassen så att de använde "private" istället för "var". Detta gjorde jag därför att mitt utvecklingsverktyg PHPEclipse uppmärksammade mig på att "var" var "deprecated" och att man istället borde använda annat. Den skillnaden kanske ligger mot php5 eftersom php4 (som jag testade i, och som jag antar att du silvfer också testade i) inte ens verkar tolka "private" som en variabeldeklaration. Jaja, det fungerar om man använder "var" där som jag har skrivit härunder och som Höglind hade i sitt original.

<?php

/*

--------------- php micromailer 1.0 by Bjorn Hoglind -----------------

-------------------- 2004/08/03 <a href="http://www.hoglind.org" target="_blank">[url]www.hoglind.org[/url]</a> ----------------------

Script to mail from homesite. I am not a big php coder (as you ------

can see. But the script works fine on my site, whitch was intended.--

I will probably make improvements, i will publish them to.-----------

Feel free to do anything with this program, but keep this notice.----

modified 2004-08-05 by Anders Johansson, <a href="http://www.karlshagen.net/aj" target="_blank">[url]www.karlshagen.net/aj[/url]</a>  (move the <form> from several prints to pure html)

modified even more by Anders Johansson 2004-08-08 (added selectbox)

modified a third time by Anders Johansson 2004-09-15 (added some functions from hoglind's v3.1)

Det här leveraras helt utan någon stil. Men ett exempel på css-kod skickas med. En xsl-mall (vilken dock skulle behöva lite css-hjälp för att se snygg ut)för xml-loggen bifogas också.

*/

$din_site = "http://www.mysite.com";

$mottagare = array(

    '1' => array('Recipient 1', 'nr1@mysite.com'),

    '2' => array('Recipient 2', 'nr2@mysite.com'),

    '3' => array('Webbmaster', 'webmaster@mysite.com')

)

//Du kan fylla på med hur många nya mottagare du vill i den här listan

?>

<form action="" method="post" id="contactform">

<p>

<select id="to" name="to" tabindex="1">

<?php

foreach ($mottagare as $key => $val) {

echo "<option value=\"$key\">$val[0]</option>\n";

//skriver ut mottagarnas namn i en select-box

}

?>

</select>

<label for="to">Till</label>

<p>

<input id="name" type="text" name="name" size="30" tabindex="2" />

<label for="name">Namn</label>

</p>

<p>

<input id="subject" type="text" name="subject" size="30" tabindex="3" />

<label for="subject">Ämne</label>

</p>

<p>

<input id="email" type="text" name="email" size="30" tabindex="4" />

<label for="email">E-post</label>

</p>

<p>

<label for="message">Skriv ditt meddelande här:</label>

<textarea id="message" name="message" cols="70" rows="5"  tabindex="5"></textarea>

</p>

<p>

<label for="doublesend">Skicka det här mejlet till mig också.</label>

<input id="doublesend" type="checkbox" name="doublesend" />

</p>

<p>

<button name="submit" type="submit" value="Skicka" tabindex="6">Skicka</button>

</p>

</form>

<?php

extract($_POST);

if ($_POST['submit']) { 

$till = $mottagare[$_POST['to']][1];

// ur arrayen mottagare väljs nyckeln (ex: 2) som har angetts med to och värdet på plats 1 i den arrayen ut)

    if($till && $name && $subject && $email && $message) { // kollar så alla fält är ifyllda

        if (return_valid($email)) {//om adressen är ok

               

                      if ($doublesend) {

                  mail($email,$subject,$message,"From: $name <$email>\r\nContent-type: text/html; charset=iso-8859-1\r\n");

                        echo "<p>Meddelandet skickat till dig.</p>\n";

                  }

             //detta är en funktion som skickar med extra information längst ner i brevet om det skickas till webbmastern

             //jag hade nytta av det i min klubb där de andra som har mejladresser ändå inte skulle bry sig om den informationen

                if ($till = "webmaster@mysite.com") {

                    $message .= "\n----------\n";

                $message .= about_mail();

                }

            mail($till,$subject,$message,"From: $name <$email>\r\nContent-type: text/html; charset=iso-8859-1\r\n"); // skickar mailet

            //charset på raden ovan bör nog sättas till det charset man skickar ut sina sidor med

                            $newlog=new logging("logs","contactlog.txt","contactlog.xml");

                            //instantierar logg klassen, i mappen "logs" skapas "contactlog.txt" och "contactlog.xml"

                            $newlog->create_txt(); //kör loggfunktioner i logg klassen

                            $newlog->create_xml();

            echo ("<p>Meddelandet skickat till". $till."<p>\n");

      } //slut if valid mail

    } else { print "<p>Fyll i alla fält!</p>\n"; }

} //slut if submit

// Returnerar sant om det är en korrekt adress.

function return_valid($e_mail) {

if(

ereg('^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$', $e_mail)) {

return TRUE;

}

else {

 return FALSE;

}

}

//--------- end 

// returnerar info om adressaten i mailet. i meddelandedelens topp. Som jag (Anders)har gjort bara när mailet är till webbmastern

function about_mail() {

    global $din_site;

        //$headline3="|  obs!, denna info sparas i xml filen log.xml "."\n";

        //$headline2="| ----------------------------------------------"."\n";

        $headline1="Du fick epost från ".$din_site."\n";

        $date.="Den: ".date("D-d-M-Y")."\n";

        $time.="Klockan: ".date("H:i:s")."\n";

        $ip.="Från ip nummer: ".$_SERVER['REMOTE_ADDR']."\n";

        $port.="Adressatens port: ".$_SERVER['REMOTE_PORT']." \n";

        $browser.="Adressatens läsare: ".$_SERVER['HTTP_USER_AGENT']."\n";

        $all = ($headline1.$date.$time.$ip.$port.$browser);

        return "$all";

}

//loggningen

class logging

{

var $folder;

var $logname;

var $xmlname;

var $filename;

var $dirname;

    function logging($f,$l,$x)

    {

        $this->folder=$f;

        $this->logname=$l;

        $this->xmlname=$x;

        $this->mode=$m;

        if ($this->mode==1)

        {

            $this->filename=getcwd()."\$this->folder\$this->logname";

            $this->dirname=getcwd()."\$this->folder\";

        }

        else 

        {

            $this->filename=getcwd().'/'.$this->folder.'/'.$this->logname;

            $this->dirname=getcwd().'/'.$this->folder.'/';

        }

    }

    

    

    function create_txt()

    {

        if (!file_exists($this->dirname)) mkdir ($this->dirname);

        $fp = fopen ($this->filename,a);

    $logs="<logging>n";

        $logs.="<ip>".$_SERVER['REMOTE_ADDR']."</ip>n";

        $logs.="<port>".$_SERVER['REMOTE_PORT']."</port>n";

        $logs.="<browser>".$_SERVER['HTTP_USER_AGENT']."</browser>n";

        $logs.="<date>".date("Y-m-d")."</date>n";

        $logs.="<time>".date("H:i:s")."</time>n";

        $logs.="</logging>nn";

        fwrite($fp,$logs);

        fclose($fp);

    }

//Har ändrat lite här jämfört med hoglinds. Han hade skrivit in rubriken i varje xml-element (<ip>IP: 414.145.553.345</ip> ) vilket är helt onödigt

    function create_xml()

    {

        $filename=$this->xmlname;

        $fp=fopen($this->filename,r);

        $contents=fread($fp,filesize($this->filename));

        $final='<?xml version="1.0" encoding="iso-8859-1"?>'."n".

               '<!-- generator="logging class Ver:1.1" -->'.

               "n".

               '<start>'

               .$contents.

               '</start>';

        fclose($fp);

        if ($this->mode==1) $fp=fopen($this->dirname."$filename",w);

        else $fp=fopen($this->dirname."/$filename",w);

        fwrite($fp,$final);

        fclose($fp);

    }

}

?>

form {

padding: 10px;

border: 1px solid #83909c;

background: #F5F3E9;

width: 90%;

}

?>
Medlem sedan apr. 200312 679 inlägg
#10

Parse error: parse error, unexpected '>' in mailform.php on line 314

Funkar fortfarande inte! För mig...

    $logs="<logging>n";

Raden som den klagar på.

Medlem sedan maj 2004451 inlägg
#11

Det är inte så konstigt. Måste ha blivit något fel vid inklistringen. Där ska egentligen sist stå "\n" (alltså en radbrytning).

Ska se om det blir rätt nu då:

r/ Jag följer Kjells rekommendation (http://www.webforum.nu/showthread.php?s=&postid=972536#post972536) och placerar skriptet bland mina filer:

http://member.webforum.nu/Tinw�lint/mail.txt

Medlem sedan dec. 1999757 inlägg
#12

Använd "Mina filer" (kontrollpanelen) istället när det är så här mycket kod så slipper vi dels fel i koden som beror på forumets konverteringar och dels långa inlägg som blir svåra att läsa.
Det går också enkelt att uppdatera textfilen i Mina filer vid behov.

Medlem sedan apr. 200312 679 inlägg
#13

Nu funkar det. Men om man fyller i en felaktig mailadress så "startas" formuläret om och nollställs. Inte så skoj om man skrivit långa mail.

Sen, hur ska man göra för att använda sig av xml-mallen som du har gjort? Jag har inte använt sånt förr. :)

r\

asasddasdd ---------- Du fick epost från silfve.se Den: Sun-26-Dec-2004 Klockan: 19:34:48 Från ip nummer: 213.64.130.95 Adressatens port: 1532 Adressatens läsare: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0

Lite radbrytningar osv. skulle inte heller skada. :) Eller kan jag fixa det själv på nåt lätt sätt?

Medlem sedan maj 2004451 inlägg
#14

OK. Det är nog inte ett superbra system. Det finns säkert en massa förbättringar man kan göra.

xsl-mallen länkar du in i xml-loggen som skapas när du har skickat något mail såhär:

efter xml-deklarationen i början:

<?xml version="1.0" encoding="ISO-8859-1"?>
länkas stylesheetet in:

<?xml-stylesheet type="text/xsl" href="style.xsl"?>

Mer information om xml och xsl finns på https://www.w3schools.com (det var där jag lärde mig det lilla jag kan)

XML-filen visas lämpligast i nån webbläsare med ordentligt stöd (IE6 fungerar nog hyfsat men jag har för mig att jag har haft lite problem där, Firefox fungerar perfekt).
Som sagt är det nog bra och länka in en css-fil för att styla till tabellerna som skapas genom xsl-filen.
Detta görs enklast genom att skapa en vanlig länkning till css i xsl-filen
exempelvis här:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="mintabellstyling.css" />
</head>
Medlem sedan maj 2004451 inlägg
#15

Det här är den versionen jag använder just nu. Det var några fel i den tidigare. Den här är inte så jättesnygg heller egentligen men fungerar.

<?php

//fyll dessa variabler:

$din_site = "http:\/\/www.mysite.com";
$webmaster="webmaster@mysite.com";//fulhack
$mottagare = array(
    1=> array('Recipient 1', 'nr1@mysite.com'),
    2=> array('Recipient 2', 'nr2@mysite.com'),
    3=> array('Webbmaster', 'webmaster@mysite.com')
) 

?>

<form action="" method="post" id="contactform">
<p>
<label for="to">Till</label>
<select id="to" name="to" tabindex="1">
<?php
foreach ($mottagare as $key => $val) {
	if($_GET['mejla']==$key)
		echo "<option value=\"$key\" selected=\"selected\">$val[0]</option>\n";
	else
		echo "<option value=\"$key\">$val[0]</option>\n";
}
?>
</select>
</p>
<p>
<label for="name">Namn</label>
<input id="name" type="text" name="name" size="30" tabindex="2" />
</p>
<p>
<label for="subject">Ämne</label>
<input id="subject" type="text" name="subject" size="30" tabindex="3" />
</p>
<p>
<label for="email">E-post</label>
<input id="email" type="text" name="email" size="30" tabindex="4" />
</p>
<p>
<label for="message">Skriv ditt meddelande här:</label>
<textarea id="message" name="message" cols="70" rows="5"  tabindex="5"></textarea>
</p>
<p>
<label for="doublesend">Skicka det här mejlet till mig också.</label>
<input id="doublesend" type="checkbox" name="doublesend" />
</p>
<p>
<button name="submit" type="submit" value="Skicka" tabindex="6">Skicka</button>
</p>
</form>

<?php

if ($_POST['submit']) { 

$till = $mottagare[$_POST['to']][1];
// ur arrayen mottagare väljs nyckeln (ex: ordf) som har angetts med to och värdet på plats 1 i den arrayen ut)

	if($till && $_POST['name'] && $_POST['subject'] && $_POST['email'] && $_POST['message']) { // kollar så alla fält är ifyllda
		if (return_valid($_POST['email'])) {
		       
					  if ($_POST['doublesend']) {
      				mail($_POST['email'],$_POST['subject'],$_POST['message'],"From: {$_POST['name']} <{$_POST['$email']}>\r\nContent-type: text/html; charset=iso-8859-1\r\n");
						echo "<p>Meddelandet skickat till dig.</p>\n";
      			}
	 		
    			if ($till == $webmaster) {
						$message .= "<br />----------<br />";
	    			$message .= about_mail();
    			}
			mail($_POST['till'],$_POST['subject'],$_POST['message'],"rom: {$_POST['name']} <{$_POST['$email']}>\r\nContent-type: text/html; charset=iso-8859-1\r\n"); // skickar mailet
							$newlog=new logging("logs","contactlog.txt","contactlog.xml"); //instantierar logg klassen
							$newlog->create_txt(); //kör loggfunktioner i logg klassen
							$newlog->create_xml();
			echo "<p>Meddelandet skickat till ".$mottagare[$_POST['to']][0].".<p>\n";

  	} //if valid mail
	} else { print "<p>Fyll i alla fält!</p>\n"; }

} //if submit

// Returnerar sant om det är en korrekt adress.
function return_valid($e_mail) {
if(
	ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $e_mail)) {
	return TRUE;
}
else {
 return FALSE;
}
}
//--------- end 

// returnerar info om adressaten i mailet. i meddelandedelens topp.
function about_mail() {
	global $din_site;
		//$headline3="|  obs!, denna info sparas i xml filen log.xml "."\n";
		//$headline2="| ----------------------------------------------"."\n";
		$headline1="Du fick epost från ".$din_site."<br />";
		$date.="Den: ".date("D-d-M-Y")."<br />";
		$time.="Klockan: ".date("H:i:s")."<br />";
		$ip.="Från ip nummer: ".$_SERVER['REMOTE_ADDR']."<br />";
		$port.="Adressatens port: ".$_SERVER['REMOTE_PORT']." <br />";
		$browser.="Adressatens läsare: ".$_SERVER['HTTP_USER_AGENT']."<br />";
		$all = ($headline1.$date.$time.$ip.$port.$browser);
		return "$all";
}

//loggningen
class logging
{
var $folder;
var $logname;
var $xmlname;
var $filename;
var $dirname;

	function logging($f,$l,$x,$m=0)
	{
		$this->folder=$f;
		$this->logname=$l;
		$this->xmlname=$x;
		$this->mode=$m;
		if ($this->mode==1)
		{
			$this->filename=getcwd()."\\$this->folder\\$this->logname";
			$this->dirname=getcwd()."\\$this->folder\\";
		}
		else 
		{
			$this->filename=getcwd().'/'.$this->folder.'/'.$this->logname;
			$this->dirname=getcwd().'/'.$this->folder.'/';
		}
	}
	
	
	function create_txt()
	{
		if (!file_exists($this->dirname)) mkdir ($this->dirname);
		$fp = fopen ($this->filename,a);
		$logs="<logging>\n";
		$logs.="<ip>".$_SERVER['REMOTE_ADDR']."</ip>\n";
		$logs.="<port>".$_SERVER['REMOTE_PORT']."</port>\n";
		$logs.="<browser>".$_SERVER['HTTP_USER_AGENT']."</browser>\n";
		$logs.="<date>".date("Y-m-d")."</date>\n";
		$logs.="<time>".date("H:i:s")."</time>\n";
		$logs.="</logging>\n\n";
		fwrite($fp,$logs);
		fclose($fp);
	}
	
	function create_xml()
	{
		$filename=$this->xmlname;
		$fp=fopen($this->filename,r);
		$contents=fread($fp,filesize($this->filename));
		$final='<?xml version="1.0" encoding="iso-8859-1"?>'."\n".
			   '<!-- generator="logging class Ver:1.1" -->'.
			   "\n".
			   '<start>'
			   .$contents.
			   '</start>';
		fclose($fp);
		if ($this->mode==1) $fp=fopen($this->dirname."\\$filename",w);
		else $fp=fopen($this->dirname."/$filename",w);
		fwrite($fp,$final);
		fclose($fp);
	}

}

?>
Medlem sedan maj 20053 911 inlägg
#16

Jag testade detta formulär, det verkade passa mig utmärkt. Eftersom jag inte kan ett skvatt om PHP så kopierade jag rätt av och klistrade in på min sida. Allt ser ut att funka men jag vet inte hur jag kan läsa det som någon skickar... (Slå mig inte nu...) Visst är det väl meningen att man ska få ett mail till den adress som man har anget i början på skriptet? Jag har ändrat det till min egen men det verkar inte hjälpa.
När jag testa att skicka till mig själv så kommer det en bekräftelse på att mailet är skickat, alltså inga som helst felmeddelanden. Vad kan det vara??

158 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
155 ms — hämta tråd, inlägg och bilagor (db)