Avatar billede jahamnej Nybegynder
15. december 2004 - 11:24 Der er 37 kommentarer og
1 løsning

tilføj nyhedsbrev modul

Hejsan eksperter...

Jeg arbejder i øjeblikket på et meget let cms, faktisk så let at det sikkert ikke kvalificerer sig som et cms, men anyway så mangler jeg en funktion, som måske burde være en smal sag, men med mine evner i php, så er det bare ikke lige til.

Brugeren kan lige nu logge ind, tilføje nyheder, opdatere diverse sider, uploade billeder, osv... Alt dette er bare forskellige scripts jeg har fundet, redigeret - og sat sammen, så det ligner et mini-cms. Det funger alt sammen meget godt, men der skal også være mulighed for at sende nyhedsbreve ud. Her går jeg i stå, da de løsninger jeg finder, næsten altid kræver sql, eller bare ikke til at bygge ind i mit "system"...

Så det jeg søger er....
Brugere tilmelder sig bare et eller andet sted (med mulighed for at afmelde også), og deres oplysninger gemmes i en txt fil. I administrationen skal man blot kunne skrive og sende en mail til alle gemt i denne txt fil. Ekstremt simpelt! Men alligevel for meget for mig åbenbart.

Er der nogen som enten har et lignende script, eller er villig til at guide mig igennem? En hver form for hjælp er velkommen. =]
Avatar billede jakobdo Ekspert
15. december 2004 - 11:35 #1
Lidt hurtig forklaring:

(jeg antager du gemmer hver modtager af emailen på en nye linie i din fil)

$filename = "modtagere.txt";
$subject  = "Test email";
$message  = "Hej dav...";

$lines = @file($filename);
foreach ($lines as $email)
{
  mail($email, $subject, $message,
    "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
    "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
    "X-Mailer: PHP/" . phpversion());
}
Avatar billede jahamnej Nybegynder
15. december 2004 - 11:39 #2
hovsa, jeg har vist ikke formuleret mig ordentligt.

Jeg har overhovedet ikke lavet noget på dette nyhedsbrev-script, hverken i front eller back... :)
Avatar billede jakobdo Ekspert
15. december 2004 - 12:32 #3
Har du ikke evt tænkt dig at lave det i en database så?
Avatar billede jahamnej Nybegynder
15. december 2004 - 12:41 #4
Jeg ville foretrække at den gemmer i txt filer, da jeg ikke har styr på sql. Men selvfølgelig, hvis vi ikke kan finde frem til en txt løsning, sårh...
Avatar billede jakobdo Ekspert
15. december 2004 - 14:47 #5
En txt løsning bør være muligt...
Lige hvordan vi laver selve afmeldingen ved jeg ikke lige, men resten! :o)

Men jeg gider ikke lave et modul til det, men vil gerne fodre dig med bider!
Avatar billede jahamnej Nybegynder
15. december 2004 - 17:55 #6
Det iorden, faktisk lige hvad jeg søger... ellers lærer man jo ikke noget =]
Avatar billede jakobdo Ekspert
15. december 2004 - 17:58 #7
Jeg vil evt anbefale dig at lave en løsning, hvor man kan tilmelde sig.
Nu ved jeg ikke hvor meget PHP du kan?

Er du med på forms?
Filbehandling?
Få værdier fra forms?
Avatar billede jahamnej Nybegynder
15. december 2004 - 20:25 #8
jeg kan ikke sproget som sådan. Jeg kan bare genkende nogle funktioner og dermed også rette diverse (lette) scripts til, som jeg vil ha dem. Du ser altså ikke mig skrive noget fra bunden, nok også derfor jeg spørger dig om hjælp :)

Jeg vil selvfølgelig ikke spørge dig om at skrive det hele og så poste det, bare for at jeg skal kopiere og ikke lære en skid af det. Men hvis du sådan kunne guide mig igennem dette script...

f. eks hvis vi starter med formen, hvordan får jeg så gemt, lad os sige navn og email i txt filen...
Avatar billede jakobdo Ekspert
15. december 2004 - 20:44 #9
Jeg ville nok starte med at lave en form:

<form action="action.php" method="post">
<input type="text" name="navn">
<input type="text" name="email">
<input type="submit" value="Tilmeld Nyhedsbrev" name="tilmeld">
</form>

Din tilmeld.php kunne så evt se ud sådan:

$filename = 'tilmeld.txt';

if(isset($_POST['navn']) && isset($_POST['email']))
{
    $name  = $_POST['navn'];
    $email = $_POST['email'];
   
    if (is_writable($filename))
    {
        if (!$handle = fopen($filename, 'ab'))
        {
            echo "Det var ikke muligt at åbne filen: ($filename)";
            exit;
        }
        if (fwrite($handle, $name . ";" . $email) === FALSE)
        {
            echo "Det var ikke muligt at skrive til filen: ($filename)";
            exit;
        }
        echo "$name er tilmeldt nyhedsbrevet med email: $email";
   
    fclose($handle);
                   
}
else
{
    echo "File $filename er ikke skrivbar";
}

Her skal du huske på, der er ingen validering på hvad som bliver gemt i filen!
Husk også at filen skal være skrivbar, hvis du opretter en fil til test.
Avatar billede jakobdo Ekspert
15. december 2004 - 20:45 #10
PS: Meget af koden er Copy/Paste fra PHP-manualen! (husk, den er din ven) :o)
Avatar billede jahamnej Nybegynder
16. december 2004 - 13:46 #11
funger ikke for mig, måske fordi jeg bare er forvirret. Du har både gang i en action.php og en du vil kalde tilmeld.php, og jeg mente så at det var en og samme fil...

lavede så en side med formen, som kalder scriptet fra tilmeld.php, men det funger ikke,...
Avatar billede jakobdo Ekspert
16. december 2004 - 13:48 #12
ahhh, ja, den skal selvfølgelig hedde tilmeld.php
Hvad får du af fejl?
Avatar billede jahamnej Nybegynder
16. december 2004 - 14:07 #13
Parse error: parse error, unexpected $ in /home/web/gb0056/nb/tilmeld.php on line 33
Avatar billede jakobdo Ekspert
16. december 2004 - 14:09 #14
Nu mangler jeg jo lidt kode, da jeg ikke har 33 linier i koden som jeg gav dig i går! :o)
Avatar billede jahamnej Nybegynder
16. december 2004 - 14:11 #15
synes også det er pænt underligt, da jeg kun har 31 linier
Avatar billede jakobdo Ekspert
16. december 2004 - 14:13 #16
Har du nogle includes?
Avatar billede jahamnej Nybegynder
16. december 2004 - 14:13 #17
oki, pillede lidt ved det, og nu siger den fejl på linie 30, hvilket er den sidste.... og det fatter jeg minus af...

<?php
$filename = 'tilmeld.txt';

if(isset($_POST['navn']) && isset($_POST['email']))
{
    $name  = $_POST['navn'];
    $email = $_POST['email'];
   
    if (is_writable($filename))
    {
        if (!$handle = fopen($filename, 'ab'))
        {
            echo "Det var ikke muligt at åbne filen: ($filename)";
            exit;
        }
        if (fwrite($handle, $name . ";" . $email) === FALSE)
        {
            echo "Det var ikke muligt at skrive til filen: ($filename)";
            exit;
        }
        echo "$name er tilmeldt nyhedsbrevet med email: $email";
   
    fclose($handle);
                   
}
else
{
    echo "File $filename er ikke skrivbar";
}
?>
Avatar billede jakobdo Ekspert
16. december 2004 - 14:16 #18
Der mangler en }
brug denne kode:

<?php
$filename = 'tilmeld.txt';

if(isset($_POST['navn']) && isset($_POST['email']))
{
    $name  = $_POST['navn'];
    $email = $_POST['email'];
 
    if (is_writable($filename))
    {
        if (!$handle = fopen($filename, 'ab'))
        {
            echo "Det var ikke muligt at åbne filen: ($filename)";
            exit;
        }
       
        if (fwrite($handle, $name . ";" . $email) === FALSE)
        {
            echo "Det var ikke muligt at skrive til filen: ($filename)";
            exit;
        }
       
        echo "$name er tilmeldt nyhedsbrevet med email: $email";
 
        fclose($handle);
    }
}
else
{
    echo "File $filename er ikke skrivbar";
}
?>
Avatar billede jahamnej Nybegynder
16. december 2004 - 14:20 #19
aha... sådan noget overser jeg altid..

nå, men den skriver og gemmer, men så kommer næste problem.
Den adskiller ikke de forskellige brugere. Den skriver f. eks

Test;test@test.com22Test;22test@test.com

der er ikke noget der adskiller første email fra andet navn...
Der skal vel være noget, så det f.eks stilles op sådan her...

Test;test@test.com
22Test;22test@test.com
Avatar billede jakobdo Ekspert
16. december 2004 - 14:32 #20
Ret linien:
if (fwrite($handle, $name . ";" . $email) === FALSE)
med:
if (fwrite($handle, $name . ";" . $email . "\n") === FALSE)
Avatar billede jahamnej Nybegynder
16. december 2004 - 14:37 #21
ahh kewl... sad faktisk og rodede med den linie... men gjorde bare det hele værre. >.<

Så, nu er der vel bare en funktion tilbage. En form som sender mail ud til alle tilmeldte. Altså hvor man kan skrive, trykke send, og så er der automatisk et emne på...
Avatar billede jakobdo Ekspert
16. december 2004 - 14:55 #22
$filename = "tilmeld.txt";
$subject  = "Test email";
$message1 = "Hej ";
$message2 = " hvordan går det?";

$lines = @file($filename);
foreach ($lines as $string)
{
    if (preg_match('/(\\w+);(.+)/', $string, $matches))
    {
        $message = $message1 . $matches[1] . $message2;
       
        mail($matches[2], $subject, $message,
        "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
        "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
        "X-Mailer: PHP/" . phpversion());
   
    echo "Email afsendt til: " . $matches[1] . "<br>";
    }
    else
    {
        echo "Ingen emails fundet<br>";
    }
}
Avatar billede jahamnej Nybegynder
16. december 2004 - 14:59 #23
ok, mente nu at man kan indtaste selve indholdet i et tekstfelt, og derefter sende til alle brugere.
Avatar billede jahamnej Nybegynder
16. december 2004 - 15:00 #24
men synes det er meget kewl, at den lige siger "hej john"
Avatar billede jakobdo Ekspert
16. december 2004 - 15:00 #25
:o)
Avatar billede jakobdo Ekspert
16. december 2004 - 15:05 #26
Her er din form:

<form action="tilmeld.php" method="post">
<input type="text" name="subject">
<textarea cols="100" rows="25" name="message">
<input type="submit" value="Send Nyhedsbrev">
</form>

og gem denne fil som:

tilmeld.php

<?php
$filename = 'tilmeld.txt';

if(isset($_POST['navn']) && isset($_POST['email']))
{
    $name  = $_POST['navn'];
    $email = $_POST['email'];
 
    if (is_writable($filename))
    {
        if (!$handle = fopen($filename, 'ab'))
        {
            echo "Det var ikke muligt at åbne filen: ($filename)";
            exit;
        }
       
        if (fwrite($handle, $name . ";" . $email . "\n") === FALSE)
        {
            echo "Det var ikke muligt at skrive til filen: ($filename)";
            exit;
        }
       
        echo "$name er tilmeldt nyhedsbrevet med email: $email";
 
        fclose($handle);
    }
    else
    {
        echo "File $filename er ikke skrivbar";
    }
}

if(isset($_POST['message']) && isset($_POST['subject']))
{
    $subject  = $_POST['subject'];

    $lines = @file($filename);
    foreach ($lines as $string)
    {
        if (preg_match('/(\\w+);(.+)/', $string, $matches))
        {
            $message = "Hej " . $matches[1] . "\n\n" . $message;
       
            mail($matches[2], $subject, $message,
            "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
            "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
            "X-Mailer: PHP/" . phpversion());
   
        echo "Email afsendt til: " . $matches[1] . "<br>";
        }
        else
        {
            echo "Ingen emails fundet<br>";
        }
    }
}
?>
Avatar billede jahamnej Nybegynder
16. december 2004 - 15:22 #27
skal den her erstatte den originale tilmeld fil. Altså så den både står for registrering og send
Avatar billede jakobdo Ekspert
16. december 2004 - 15:35 #28
Jep!
Avatar billede jahamnej Nybegynder
16. december 2004 - 15:36 #29
sorry det er mig der tåger...

Øhm, der er dog en fejl i formen. Den viser ingen knap, men derimod teksten "<input type="submit" value="Send Nyhedsbrev">
</form>" i tekstfeltet
Avatar billede jakobdo Ekspert
16. december 2004 - 15:39 #30
Sorry, jeg sidder også og tåger...

<form action="tilmeld.php" method="post">
<input type="text" name="subject">
<textarea cols="100" rows="25" name="message"></textarea>
<input type="submit" value="Send Nyhedsbrev">
</form>

Havde glemt: </textarea>
Avatar billede jahamnej Nybegynder
16. december 2004 - 15:43 #31
lol, burde jeg selv have spottet
Avatar billede jahamnej Nybegynder
16. december 2004 - 15:47 #32
ahhh et sidste problem...

Når man modtager mailen, skriver den hej til alle som er tilmeldt... ikke så fedt =]
Avatar billede jakobdo Ekspert
16. december 2004 - 15:57 #33
Ret dette:

if (preg_match('/(\\w+);(.+)/', $string, $matches))
        {
            $message = "Hej " . $matches[1] . "\n\n" . $message;
     
            mail($matches[2], $subject, $message,
            "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
            "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
            "X-Mailer: PHP/" . phpversion());

til dette:

if (preg_match('/(\\w+);(.+)/', $string, $matches))
        {
            $eMessage = "Hej " . $matches[1] . "\n\n" . $message;
     
            mail($matches[2], $subject, $eMessage,
            "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
            "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
            "X-Mailer: PHP/" . phpversion());
Avatar billede jakobdo Ekspert
16. december 2004 - 15:58 #34
eller tilføj:

$message = "";
ovenover:
$message = "Hej " . $matches[1] . "\n\n" . $message;
Avatar billede jahamnej Nybegynder
16. december 2004 - 15:59 #35
perfekt. Så kan jeg vist sagtens klare resten selv, altså med at tilpasse. Mange tak for hjælpen, det var stort! =]

Smid et svar...
Avatar billede jakobdo Ekspert
16. december 2004 - 16:00 #36
Svar...
Avatar billede jakobdo Ekspert
16. december 2004 - 16:01 #37
Glemte lige, du skrive bare hvis du skal have noget mere kode...
Så kan jeg ihf gøre forsøget!
Avatar billede jahamnej Nybegynder
16. december 2004 - 16:04 #38
kewl, igen mange tak =]
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester