webForumDet fria alternativet

Skriva form data till TXT fil

PHP

16 svar · 870 visningar · startad av seamonster

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

Hejsan. Jag har jobbat väldigt länge för att få en Form för att kontakta fungera (skicka e-mail till mig, utan att öppna nått epost program på klientens dator)

Så, du har jag kommit på en idé, att skriva Form datan till en TXT fil på min server, i exempel /posts/.
Ungifär som ett forum fast man inte ser något. Och varje gång någon skickar ett medelenade med min form, ska det skriva en ny TXT fil.

Ledsen att formen är inom <table>:

<form>
Type of Report:
</td>
<td>
<select name="type" id="type">
<option value="add">Add a OS/Program/Game</option>
<option value="wrong">Report System Requirement</option>
<option value="contact">Contact Us</option>
</select>
</td>
</tr>
<tr>
<td>
Name: 
</td>
<td>
<input type="text" name="name" size="39">
</td>
</tr>
<tr>
<td>
Email: 
</td>
<td>
<input type="text" name="email" size="39">
</td>
</tr>
<tr>
<td>
Report:
</td>
<td>
<textarea rows="10" cols="30" name="report"></textarea> 
<br>
<center><input type="submit" value="Send"> <input type="reset" value="Reset"></center>
</form>

Så om man kan skriva en txt fil, för detta formet, ungifär i denna stilen:

Type: xxxxxxx
Name: xxxxxxx
Email: xxxxxxx
Report: xxxxxxx

Och sedan ge filen emailen som namnet, exempel: 123456789@abcdefg.hij
Skulle detta kunna fungera? Eller ger det mig ett jätte säkerhets hål?
Om detta inte är en så bra idé, va finns det för andra alternativ?

/Seamonster

Medlem sedan maj 200848 inlägg
#2

Ingen som har någon aning om detta går?

Medlem sedan jan. 2004140 inlägg
#3

Hey,
tror du angriper ditt problem lite väl krångligt. Om du bara vill få det som skrivs in i formuläret skickat som ett mail till dig samt kan köra PHP på din server, så kan du ju använda mail() funktionen.

En matnyttig länk: http://se.php.net/manual/en/function.mail.php
(om du blir avskräckt, scrolla ner till exempel längre ner)

Lycka till!

Medlem sedan maj 200848 inlägg
#4

Jo, man tycker det borde funka.
Jag tog denna koden bara för att testa om det funkar;

<?php
// The message
$message = "Line 1\nLine 2\nLine 3";

// In case any of our lines are larger than 70 characters, we should use wordwrap()
$message = wordwrap($message, 70);

// Send
mail('caffinated@example.com', 'My Subject', $message);
?>

Ändrade emailen till min email och laddade php filen i webbläsaren... Uppdaterade även ett flertal gånger. Det kom inget mail. Testade på gmail och hotmail.

Jag har PHP, men måste man ha något annat? Servern har även en SMTP mail server installerad. Är det något som jag gör fel?

/Seamonster

Medlem sedan maj 200848 inlägg
#5

jag har även testat följande kod:

<html>
<head><title>Test Page</title></head>
<body>
<form method="post" action="contact.php">
Email: <input name="email" type="text"><br>
Message:<br>
<textarea name="message" rows="15" cols="40"></textarea><br>
<input type="submit">
</form> 
</body>
</html>

Contact.php

<?php
$subject = "Contact Us";
$email = $_REQUEST['email'] ;
$message = $_REQUEST['message'] ;
$headers = "From: $email";
$sent = mail($to, $subject, $message, $headers) ;
if($sent)
{print "Your mail was sent successfully"; }
else
{print "We encountered an error sending your mail"; }
?>

Det ska gå att använda vår SMTP server utan lösenord och jag ska inte behöva ha en epost på samma domän som sidan, eller är detta nåt PHP måste?

/Seamonster

Medlem sedan jan. 2004140 inlägg
#6

Hej igen,
Vi kan utgå från det andra exemplet där du har gjort en contact.php som formuläret skickas till.

För det första kan vi prova att byta ut $_REQUEST till $_POST då vi i själva verket vet hur formuläret skickas (method="post") och behöver alltså inte använda oss utav arrayen $_REQUEST som söker igenom sätten $_GET, $_POST, $_COOKIE i den ordningen.

Sedan ser jag ett fel på följande rad i contact.php:
$headers = "From: $email";

Korrekt skrivet ska det vara på följande vis:

$headers = "From: ".$email;

Samtidigt så har jag svårt att tro att detta skulle påverka att inget mail skickas ut överhuvudtaget. Vad säger din if-sats som kollar sent?

Medlem sedan juni 20014 421 inlägg
#7

dreas skrev:

Sedan ser jag ett fel på följande rad i contact.php:
$headers = "From: $email";

Korrekt skrivet ska det vara på följande vis:

$headers = "From: ".$email;

Med tanke på variabel-interpolationen som sker inom dubbelfnuttar är det inte fel att skriva som han har skrivit.

Medlem sedan maj 200848 inlägg
#8

dreas skrev:

Samtidigt så har jag svårt att tro att detta skulle påverka att inget mail skickas ut överhuvudtaget. Vad säger din if-sats som kollar sent?

"We encountered an error sending your mail"
Altså blir ju inte emailet skickat alls från min server.

Medlem sedan maj 200848 inlägg
#9

DUBBELPOST Sry

Medlem sedan juni 20014 421 inlägg
Medlem sedan maj 200848 inlägg
#11

Aha, okej.
När ja la till

print_r(error_get_last());

i contact.php hände inget specielt förutom det som hände innan.

Vet inte riktigt om det är rätt jag gjorde?

Medlem sedan juni 20014 421 inlägg
#12

lägg till detta högst upp i filen:

error_reporting(E_ALL);
display_errors(true);

Medlem sedan maj 200848 inlägg
#13

Fel i felvisningen:

Fatal error: Call to undefined function display_errors() in /home/albin/public_html/scripts/contact.php on line 3

Jag sökte i PHP Manualen, o den sa att funktionen inte fanns?

Sätter jag det övan för <? tecket får jag fram följande:
"error_reporting(E_ALL); display_errors(true); We encountered an error sending your mail " Vilken borde hända...

Medlem sedan juni 20006 031 inlägg
#14

Har du ställt in smtp i php.ini?
t.ex

[mail function]
; For Win32 only.
SMTP = mail1.telia.com
smtp_port = 25
Medlem sedan juni 20014 421 inlägg
#15

förlåt,

det ska vara:

ini_set("display_errors",true);

Medlem sedan maj 200848 inlägg
#16

Jag satte ini_set("display_errors",true); högst upp i filen (efter <?) men det gjorde ingen skillnad.

Hmm, eftersom det inte bara är jag som använder den här servern, kan man ha en php.ini fil i tex, min mapp? Eftersom jag inte vill ändra hela serverns inställningar

Medlem sedan apr. 2006409 inlägg
#17

Jag vet inte vilken method du använder, men testa att skicka formuläret så här.

$adress = 'webmaster@din-site.com';
$subject = 'You've got mail.';
//loopa igenom allt i post och get, du kan ju ta bort den du inte använder, spara det i meddelande.
$meddelande = "___FORMULÄR___\n";
foreach($_POST as $nyckel => $vad)
{
    $meddelande .= "{$nyckel} : {$vad}\r\n";
}
foreach($_GET as $nyckel => $vad) //loopa get
{
    $meddelande .= "{$nyckel} : {$vad}\r\n";
}

//Jag kommer inte ihåg vilka headers som gör vad.
$headers = "X-Priority: 3\r\n"; //viktigt eller inte.
//ta reda på om du vill/behöver fler headers.

$i = mail($adress, $subject, $meddelande, $headers);
if($i)
{
    echo "Formuläret har skickats!";
}
else
{
    echo "Formuläret kunde inte skickas!";
}
271 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)