Gå til innhold

trenger newsletter script...


Anbefalte innlegg

Jeg trenger altså et newsletter script, men klarer ikke å finne noe. Alle koster penger osv.

Det jeg trenger er kun en plass hvor folk kan skrive mail'en sin og en submit knapp. Deretter sendes det til en mail med fast subject som f.eks "Ny mail registrert for newsletter"

hadde vært kjempefint om noen hadde visst av et som funker

PS! har ikke SQL, så kan ikke bruke script som trenger dette...

Lenke til kommentar
Videoannonse
Annonse

Lagde en liten kode her som lagrer personene i en tekstfil, og en funksjon som du bruker til å sende ut nyhetsbrevene dine:

 

<?php

function newsletter($email)
{
 if (!eregi("[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*.[a-z]{2,3}", $email)) {
   Print ("The e-email is not valid!");
 } elseif (empty($email)) {
   Print ("You need to fill out your e-mail adress!");
 } else {
   // Writing to a file named newsletter.txt
$file = fopen("newsletter.txt", "a+");
   $line = $email . "***---***";
   $line = str_replace("\r\n", "<br>", $line);
   fwrite($fp, $line);
   fwrite($fp, "\n");
   fclose();
   
   // Sending a mail to your mail
   mail("[email protected]", "New mail in your newsletter archive!", "This mail is registered: " . $email);
 }
}

function send_newsletter($subject, $message)
{
 $array = file("newsletter.txt");
 
 foreach ($array as $line) {
   $next = explode("***---***", $line);
   mail($next[0], $subject, $message);
 }
 Print ("The newsletter has been sent.");
}
?>

Endret av kjey
Lenke til kommentar

Okay, den øverste funksjonen som heter "newsletter" sjekker først om emailen brukeren har skrevet inn er gyldig og om det er skrevet noe i tekstboksen i det hele tatt. Hvis alt går som det skal lagres email-adressen i en tekstfil som heter "newsletter.txt" slik at du kan sende dem mail senere.

 

Den andre funksjonen som heter "send_newsletter" er en funksjon som brukes til å sende alle som har registrert seg et nyhetsbrev. Altså kan du skrive nyheten på nettet og trykke send, så sender den til alle mailadressene som er lagret i registeret ditt.

 

Jeg har nå laget det litt lettere slik at du bare kan kopiere og lime inn. Legg inn denne koden i en fil som heter: newsletter_functions.php

 

Skjult tekst: (Marker innholdet i feltet for å se teksten):

<?php

function newsletter($email)
{
if (empty($email)) {
  Print ("You need to fill out your e-mail adress!");
} elseif (!eregi("[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*.[a-z]{2,3}", $email)) {
  Print ("The e-email is not valid!");
} else {
  // Writing to a file named newsletter.txt
$file = fopen("newsletter.txt", "a+");
  $line = $email . "***---***";
  $line = str_replace("\r\n", "<br>", $line);
  fwrite($file, $line);
  fwrite($file, "\n");
  fclose($file);
  
  // Sending a mail to your mail
  mail("[email protected]", "New mail in your newsletter archive!", "This mail is registered: " . $email);
Print ("You are know registered in the newsletter archive!");
}
}

function send_newsletter($subject, $message)
{
$array = file("newsletter.txt");

foreach ($array as $line) {
  $next = explode("***---***", $line);
  mail($next[0], $subject, $message);
}
Print ("The newsletter has been sent.");
}
?>

 

Her er koden for å formen som folk kan registrere seg på:

 

Skjult tekst: (Marker innholdet i feltet for å se teksten):

<?php require_once("newsletter_functions.php"); if (!isset($_POST['register'])) { ?>
<form action="" method="post">
<input type="text" name="email" />
<input type="submit" name="register" />
</form>
<?php } else {
 newsletter($_POST['email']);
} ?>

 

Og her er koden for formen som du kan sende nyhetsbrevene til brukerne:

 

Skjult tekst: (Marker innholdet i feltet for å se teksten):

<?php require_once("newsletter_functions.php"); if (!isset($_POST['send'])) { ?>
<form action="" method="post">
<input type="text" name="subject" />
<textarea name="message"></textarea>
<input type="submit" name="send" />
</form>
<?php } else {
 send_newsletter($_POST['subject'], $_POST['message']);
} ?>

 

Håper det fungerer ;)

Endret av kjey
Lenke til kommentar

Warning: fopen(newsletter.txt): failed to open stream: Permission denied in /home/customers/kibneb/public_html/pages/newsletter_functions.php on line 11

Warning: fwrite(): supplied argument is not a valid stream resource in /home/customers/kibneb/public_html/pages/newsletter_functions.php on line 14

Warning: fwrite(): supplied argument is not a valid stream resource in /home/customers/kibneb/public_html/pages/newsletter_functions.php on line 15

Warning: fclose(): supplied argument is not a valid stream resource in /home/customers/kibneb/public_html/pages/newsletter_functions.php on line 16
You are know registered in the newsletter archive!

 

hmm...

 

Det første skjønte jeg, Må sette newsletter.txt til 777 ikke sant? BTW, er det mulig å gjøre dette gjennom dreamweaver?

 

Det andre skjønte jeg ikke... :(

 

 

EDIT: Ok, da jeg skiftet tilgangen til newsletter.txt til 777 så forsvant de andre error'ene også. jeg prøvde å melde på en mail til nyhetsbrevet, men ingenting skjedde... :(

Er det noen feil i scriptet eller noe?

Endret av Zathardor
Lenke til kommentar

Hmmm... jeg prøvde ut scriptet, alt går jo bra utenom at det ikke sendes ut noen nyhetsbrev til noen av dem som er i registeret. Mail-adressen skal man få lagret! Husk at du må endre denne kodelinjen da slik at det står din mail og ikke [email protected]! Får du noen andre feilmeldinger, eller er alt borte?

 

mail("[email protected]", "New mail in your newsletter archive!", "This mail is registered: " . $email);

 

Noen andre som kanskje har litt bedre syn enn meg? Er noe galt i send_newsletter() funksjonen?

Endret av kjey
Lenke til kommentar

Skiftet det til min adresse ja, har forandre t litt beskjeder og liknende litt, slik at de ble på norsk, men det skal da ikke ha noe å si...

ingen feilmeldingen kommer fram, problemet er egentlig bare at den ikke skriver mail adressene inn i newsletter.txt.

 

Vet ikke om det hjelper men her er siden:

Kibneb

Trykk på bildet for å komme inn på siden, trykk linken "test" nederst for å komme til form'en.

 

EDIT: Og så får jeg ikke noe mail om at en mail-adresse er registrert...

Endret av Zathardor
Lenke til kommentar

Alt det du sier fungerer hos meg, men som jeg sa over vil ikke nyhetsbrevene bli sendt ut til de som er lagret :no:

 

Slik satt jeg det opp:

Skjult tekst: (Marker innholdet i feltet for å se teksten):

mal.php

<html>

<head>
</head>

<body>
<?php require_once("newsletter_functions.php"); if (!isset($_POST['register'])) { ?>
<form action="" method="post">
<input type="text" name="email" />
<input type="submit" name="register" />
</form>
<?php } else {
newsletter($_POST['email']);
} ?>
<?php if (!isset($_POST['send'])) { ?>
<form action="" method="post">
<input type="text" name="subject" />
<textarea name="message"></textarea>
<input type="submit" name="send" />
</form>
<?php } else {
send_newsletter($_POST['subject'], $_POST['message']);
} ?>
</body>

</html>

 

newsletter_functions.php:

<?php

function newsletter($email)
{
if (empty($email)) {
 Print ("You need to fill out your e-mail adress!");
} elseif (!eregi("[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*.[a-z]{2,3}", $email)) {
 Print ("The e-email is not valid!");
} else {
 // Writing to a file named newsletter.txt
$file = fopen("newsletter.txt", "a+");
 $line = $email . "***---***";
 $line = str_replace("\r\n", "<br>", $line);
 fwrite($file, $line);
 fwrite($file, "\n");
 fclose($file);

 // Sending a mail to your mail
 mail("[email protected]", "New mail in your newsletter archive!", "This mail is registered: " . $email);
 Print ("You are know registered in the newsletter archive!");
}
}

function send_newsletter($subject, $message)
{
$array = file("newsletter.txt");

foreach ($array as $line) {
 $next = explode("***---***", $line);
 mail($next[0], $subject, $message);
}
Print ("The newsletter has been sent.");
}
?>

 

Skal funke fett dette... :hmm:

Endret av kjey
Lenke til kommentar

:(

Kom ingenting jo! :(

Altså, tekstfila heter newsletter.txt og er 777.

hvis det har vært noe galt med den altså navnet, filtype etc, så hadde det kommer opp error ikke sant? i såfall så er det ikke noe galt med den... Så hva i alle dager er galt?

hele siden ligger i en mappe som heter public_html, kan dette være problemet? At siden liksom ikke ligger i / men i /public_html/ ??

Lenke til kommentar

Det skal komme opp error hvis php ikke får kontakt med filen, men jeg kjønner ikke hva du har gjort feil. Prøv kopier kodene jeg la ut i posten kl: 17:37 og legg den ut. Trenger ikke å sette til 777 så vidt jeg vet, vet ikke hva det er til engang, for jeg har aldri hatt bruk for å vite det ;)

 

Send meg msn-adressen din hvis du har på PM...

Endret av kjey
Lenke til kommentar
  • 4 uker senere...

Satt og lagde et enkelt SQL-basert nyhetsskript i dag for de som er interesserte. Det sjekker om brukeren har skrevet inn noe i feltet, om emailen er gyldig, og om den eksisterer i databasen.

 

Subscribe.php

Skjult tekst: (Marker innholdet i feltet for å se teksten):

<h3>Subscribe To Newsletter</h3>
<?php require_once("db.php"); ?>
<?php
if ($_POST['submit'] == TRUE) {
$email = stripslashes(strip_tags($_POST['email']));

if(empty($email)) {
 echo "The E-Mail was not added to the newsarchive!<br><br>Please fill in all the required fields.";
}
elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
 echo "The E-Mail was not added to the newsarchive!<br><br>The E-Mail address is invalid.";
}
elseif($email) {
 $sql = mysql_query("SELECT * FROM newsletter WHERE Email='$email'");
 $result = mysql_num_rows($sql);
 if($result!="0"){
 	echo "The E-Mail was not added to the newsarchive!<br><br>The E-Mail address is already registered in the newsletter archive!";
 	}
 	else
 	{
   $email2 = mysql_real_escape_string($_POST['Email']);
         $result = mysql_query("INSERT INTO newsletter (`Email`)
                    VALUES ('$email')");
   echo "Your E-Mail address has now been registered in the newsletter archive!"; 
   //mail("[email protected]", "New Subscriber!", "A visitor with this E-Mail has subscribed to your newsletter: " . $email);
 	}
}
}
else { ?>
<form method="post" action="">
<p>
<label for="email">E-mail</label>
<input id="email" name="email" type="text" size="50" maxlength="100" /><br />

<label for="submit"> </label>
<input id="submit" class="button" type="submit" name="submit" value="Send" />
</p>
</form>
<?php } ?>

 

Unscribe.php

Skjult tekst: (Marker innholdet i feltet for å se teksten):

<h3>Unsubscribe From Newsletter</h3>
<?php require_once("db.php"); ?>
<?php
if ($_POST['submit'] == TRUE) {
$email = stripslashes(strip_tags($_POST['email']));

if(empty($email)) {
 echo "The E-Mail was not removed from the newsarchive!<br><br>Please fill in all the required fields.";
}
elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
 echo "The E-Mail was not removed from the newsarchive!<br><br>The E-Mail address is invalid.";
}
elseif($email) {
 $sql = mysql_query("SELECT * FROM newsletter WHERE Email='$email'");
 $result = mysql_num_rows($sql);
 if($result!="1"){
 	echo "The E-Mail was not removed from the newsarchive!<br><br>The E-Mail address does not exist in the newsletter archive!";
 	}
 	else
 	{
   $email2 = mysql_real_escape_string($_POST['Email']);
         $result = mysql_query("DELETE FROM newsletter WHERE email = '$email'");
   echo "Your E-Mail address has now been removed from the newsletter archive!"; 
   //mail("[email protected]", "User unsubscribed!", "A user with this E-Mail has unsubscribed from your newsletter: " . $email);
 	}
}
}
else { ?>
<form method="post" action="">
<p>
<label for="email">E-mail</label>
<input id="email" name="email" type="text" size="50" maxlength="100" /><br />

<label for="submit"> </label>
<input id="submit" class="button" type="submit" name="submit" value="Send" />
</p>
</form>
<?php } ?>

 

Send_newsletter.php

Skjult tekst: (Marker innholdet i feltet for å se teksten):

<?php require_once("db.php"); ?>
<?php
if ($_POST['submit'] == TRUE) {
   $subject = $_POST['Subject'];
   $message = $_POST['Message'];

$message2 = '
<html>
<head>
 <title>Newsletter from you!</title>
</head>
<body>
 <p>'.nl2br($message).'</p> 
</body>
</html>
';

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: [email protected]';
 $query = mysql_query('SELECT * FROM newsletter');
 $mails = '';
 while ($r = mysql_fetch_array($query))
 {
    $mails .= $r['Email'] . ',';
 }
 mail($mails, $subject, $message2, $headers);
 echo "Mail was sent to:<br>";
 echo "$mails";
}
else
{
   ?>
<h3>Send Newsletter</h3>
   <form method="post" action="<?php echo $PHP_SELF ?>">
   Subject:   <input name="Subject" size="44" maxlength="255">
   <br>
   Message: <textarea name="Message" rows="20" cols="40"></textarea>
   <br>
   <input type="submit" name="submit" value="Send Newsletter">
   </form>
   <?
}
?>

Endret av parallax313
Lenke til kommentar

Hvorfor ha 2 filer for subscribe/unsubscribe?

 

<h3>Subscribe/Unsubscribe To Newsletter</h3>
<?php require_once("db.php"); ?>
<?php
if ($_POST['submit'] == TRUE) {
   $email = mysql_real_escape_string(strip_tags($_POST['email']));
   $what = mysql_real_escape_string(strip_tags($_POST['what']));

   if(empty($email)) {
       echo "Please fill in all the required fields.";
   }
   elseif (!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
       echo "The E-Mail address is invalid.";
   }
   elseif (($email) && ($what=="subscribe") {
       $sql = mysql_query("SELECT Email FROM newsletter WHERE Email='$email'");
       $result = mysql_num_rows($sql);
       if ($result!=0){
           echo "The E-Mail address is already registered in the newsletter archive!";
       }
       else  {
           $result = mysql_query("INSERT INTO newsletter (`Email`) VALUES ('$email')");
           echo "Your E-Mail address has now been registered in the newsletter archive!"; 
       }
   }
   elseif (($email) && ($what=="unsubscribe") {
       $sql = mysql_query("SELECT Email FROM newsletter WHERE Email='$email'");
       $result = mysql_num_rows($sql);
       if($result!=1){
           echo "The E-Mail address does not exist in the newsletter archive!";
       }
       else  {
           $result = mysql_query("DELETE FROM newsletter WHERE email = '$email'");
           echo "Your E-Mail address has now been removed from the newsletter archive!"; 
       }
   }
}
else { ?>
<form method="post" action="">
<p>
<label for="email">E-mail</label>
<input id="email" name="email" type="text" size="50" maxlength="100" /><br />
Subscribe <input name="what" type="radio" value="subscribe"/><br />
Unsubscribe <input name="what" type="radio" value="unsubscribe"/><br />

<label for="submit"> </label>
<input id="submit" class="button" type="submit" name="submit" value="Send" />
</p>
</form>
<?php } ?>

 

 

Ikke testet!

 

Tror også det er greit med en strip_tags og stripslashes på $message og $subject før du sender. ;)

Regner med det bare er admin som kan sende, så trenger vel ikke sjekke innholdet for "ulumskheter" :p

Endret av ZoRaC
Lenke til kommentar

Nei, det er meningen at det er bare admin som skal sende (putt den i en passord-beskyttet mappe).

 

Takk for tips, tenkte ikke på å lage de to i samma fila gitt ;)

 

EDIT: Jeg fikk testa fila nå, og det var to småfeil ja.

 

elseif (($email) && ($what=="subscribe") {

elseif (($email) && ($what=="unsubscribe") {

 

Husk å lukke føre på en ekstra ) bak elseif-utrykkene ;)

Endret av parallax313
Lenke til kommentar
  • 1 måned senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...