Newsletter

Μια περιοχή όπου τα μέλη μας μπορούν να βάζουν τα PHP scripts που έχουν φτιάξει και θέλουν να τα μοιραστούν με τα υπόλοιπα μέλη.

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
iffor
Δημοσιεύσεις: 778
Εγγραφή: 14 Μάιος 2005 01:19
Τοποθεσία: Παράδεισος
Επικοινωνία:

Newsletter

Δημοσίευση από iffor » 22 Αύγ 2005 20:13

Hello στην κοινότητα…
Με αφορμή ένα πρόσφατο topic που αναφερόταν στην αποστολή μορφοποιημένου link για την αποδοχή μίας αίτησης εγγραφής σε ένα forum ή σε κάποιο newsletter, θα ήθελα να δώσω παρακάτω μερικά παραδείγματα κώδικα στο πως θα μπορούσαμε να φτιάξουμε ένα σύστημα Newsletter για το site μας, χωρίς να έχουμε πρόβλημα ορφανών εγγραφών στην βάση μας.

Κατ’ αρχάς θα χρειαστούμε μία φόρμα αποστολής emai διεύθυνσης του επιμέρους επισκέπτη, που θέλει να λαμβάνει newsletter από το site μας. Η παρακάτω φόρμα είναι στο χέρι σας να την προσαρμόσετε όπου και όπως θέλετε!

Κώδικας: Επιλογή όλων

<form action="submitemail.php" method='post'>
<table>
<tr>
<td> E-mail&#58; </td>
<td><input type="text" name="email" size="30"></td>
</tr>
<tr>
<td><input type="radio" name="choice" value="sub"></td>
<td> Εγγραφή </td>
</tr>
<tr>
<td><input type="radio" name="choice" value="unsub"></td>
<td> Διαγραφή </td>
</tr>
<tr>
<td colspan=2>
<input type="submit" name="submit" value="Αποστολή">
</td>
</tr>
</form>
Η παραπάνω φόρμα στέλνει στην submitmail.php το email του επισκέπτη, μαζί με την επιθυμία του ως προς την υπηρεσία newsletter.

Ας δούμε τώρα πως θα μπορούσε να είναι η σελίδα submitmail.php η οποία θα χειριστεί την αίτηση. Ένα παράδειγμα θα ήταν το επόμενο, το οποίο χρησιμοποιεί ένα πίνακα βάσης της μορφής [ID] [EMAIL] στον οποίον είναι αποθηκευμένα τα ήδη εγκεκριμένα email της υπηρεσίας. Φυσικά τον πίνακα τον διαμορφώνετε στα δικά σας γούστα!

Κώδικας: Επιλογή όλων

<table><tr><td><center>Υπηρεσία Newsletter</center></td></tr>
<tr><td>
<?php

//Μην ξεχάσετε το script-άκι σύνδεσης της βάσης με την παρούσα σελίδα! Π.χ.

function db_conn&#40;&#41;
&#123;
    $result = mysql_connect&#40;"localhost","username","password"&#41;;
    if &#40; !$result &#41;
	     return false;
    if &#40; !mysql_select_db&#40;"myBase"&#41; &#41;
	     return false;

    return $result;

&#125;

$conn=db_conn&#40;&#41;;
if &#40;!$conn&#41; &#123; echo "Could not connect to database server - please try later. "; exit; &#125;

//τέλος παραδείγματος σύνδεσης


if&#40; isset&#40;$_POST&#91;'submit'&#93;&#41; &#41;
&#123;

   $email=$_POST&#91;'email'&#93;;

   //το email που θα εμφανίζεται ως του αποστολέα
   $from="me@me.gr"; 

   //το θέμα του email
   $subject="subject"; 

   //μία απλή μέθοδος για την δημιουργία ενός κλειδιού από το email.
   //με αυτόν τον τρόπο θα ξέρουμε αν το κλειδί που συνοδεύει το
   //email προέρχεται από εμάς
   $thekey=$email;  
   $thekey=bin2hex&#40;$thekey&#41;;  
   $thekey=md5&#40;$thekey&#41;;  
   

   //Παρακάτω ψάχνουμε το πίνακα της βάσης μας στο οποίο έχουμε
   //αποθηκευμένα τα ήδη εγκεκριμένα email της υπηρεσίας Newsletter
   $query="SELECT * FROM newsletter WHERE email='".$email."'";
   $result=mysql_query&#40;$query, $conn&#41; or die&#40;mysql_error&#40;&#41;&#41;; 
   
   if&#40;$_POST&#91;'choice'&#93;=="sub"&#41;
   &#123;
      if&#40;mysql_num_rows&#40;$result&#41;==1&#41; &#123;
	  
         echo "Υπάρχει ήδη το συγκεκριμένο email στη λίστα μας!";
		 
      &#125; elseif&#40;mysql_num_rows&#40;$result&#41;==0&#41; &#123;
	  
         $ch=mail&#40;"$email",$subject,"To complete your subscription please click on the following link&#58; www.yoursite.gr/confirm.php?email=$email&thekey=$thekey","From&#58; $from"&#41;;
         if&#40;$ch==true&#41; &#123; echo "Μία ειδοποίηση αποδοχής newsletter στάλθηκε επιτυχώς στην καθορισμένη διεύθυνση."; &#125;
         else &#123; echo "Για άγνωστο λόγο η ειδοποίηση αποδοχής newsletter δεν απεστάλη στην καθορισμένη διεύθυνση, ξαναπροσπαθήστε αργότερα"; &#125;
		
      &#125;
   &#125;
   else if&#40;$_POST&#91;'choice'&#93;=="unsub"&#41;
   &#123;
         $ch=mail&#40;"$email",$subject,"To confirm your unsubscribe, please click on the following link&#58; www.yoursite.gr/unconfirm.php?email=$email&thekey=$key","From&#58; $from"&#41;;
         if&#40;$ch==true&#41; &#123; echo "Μία ειδοποίηση διαγραφής newsletter στάλθηκε επιτυχώς στην καθορισμένη διεύθυνση."; &#125;
         else &#123; echo "Για άγνωστο λόγο η ειδοποίηση διαγραφής newsletter δεν απεστάλη στην καθορισμένη διεύθυνση, ξαναπροσπαθήστε αργότερα"; &#125;
   &#125;
&#125;

?>

</td></tr></table>
Ωραία μέχρι εδώ. Στάλθηκε οπότε στο email του επισκέπτη το διαμορφωμένο μας link για την αποδοχή της αίτησης στην υπηρεσία NewsLetter.

Ας δούμε τώρα την σελίδα confirm.php στην οποία κατευθύνεται ο επισκέπτης αν αποδεχτεί την πρόσκληση και κάνει κλικ στο link που του αποστείλαμε στο email του.

Κώδικας: Επιλογή όλων

<table>
<tr><td>
<center>Εγγραφή στην Υπηρεσία Newsletter</center>
</td></tr>
<tr><td>

<?php

//εδώ το script για την διασύνδεση της βάσης&#8230;!!!!

$email=$_GET&#91;'email'&#93;;
$thekey=$_GET&#91;'thekey'&#93;;


//έλεγχος για αν το κλειδί thekey προέρχεται από τον δικό μας τρόπο δημιουργίας του, από το αντίστοιχο email
$str=$email;  
$str=bin2hex&#40;$str&#41;;  
$str=md5&#40;$str&#41;;  

if&#40;$thekey==$str&#41; &#123; $valid=1; &#125; else &#123; $valid=0; &#125;

if&#40;$valid==1&#41; &#123;


   //έλεγχος του πίνακα της βάσης μας
   $query="SELECT * FROM newsletter WHERE email='".$email."'";
   $result=mysql_query&#40;$query, $conn&#41; or die&#40;mysql_error&#40;&#41;&#41;; 
   if&#40;mysql_num_rows&#40;$result&#41;>0&#41; &#123;
      echo "Έχει γίνει ήδη η αποδοχή του email";
   &#125; else &#123;
      $query="INSERT into newsletter &#40;id, email&#41; values&#40;'','$email'&#41;";
      $result=mysql_query&#40;$query, $conn&#41; or die&#40;mysql_error&#40;&#41;&#41;; 
      echo "Email επιβεβαιώθηκε, ευχαριστούμε για την προτίμησή σας";

      //ή πιο απλά τον ανακατευθύνουμε σε μία φόρμα όπου του ζητάμε να συμπληρώσει τα στοιχεία που χρειαζόμαστε και έπειτα τα περνάμε στην βάση μας
   &#125;
   
&#125; elseif&#40;$valid==0&#41; &#123;
   
   echo "Ο Κωδικός του email σας δεν ανταποκρίνεται στον αναμενόμενο \n Επιχειρήστε την εγγραφή σας από την αρχή";
   
&#125;   

?>

</td></tr></table>
Ας δούμε τώρα και την σελίδα unconfirm.php στην οποία κατευθύνεται ο επισκέπτης αν αποδεχτεί την διαγραφή του και κάνει κλικ στο link που του αποστείλαμε στο email του.

Κώδικας: Επιλογή όλων

<table>
<tr><td>
<center>Διαγραφή από την Υπηρεσία Newsletter</center>
</td></tr>
<tr><td>

<?php

//εδώ το script για την διασύνδεση της βάσης&#8230;!!!!

$email=$_GET&#91;'email'&#93;;
$thekey=$_GET&#91;'thekey'&#93;;


//έλεγχος για αν το κλειδί thekey προέρχεται από τον δικό μας τρόπο δημιουργίας του, από το αντίστοιχο email
$str=$email;  
$str=bin2hex&#40;$str&#41;;  
$str=md5&#40;$str&#41;;  

if&#40;$thekey==$str&#41; &#123; $valid=1; &#125; else &#123; $valid=0; &#125;

if&#40;$valid==1&#41; &#123;

   $query="SELECT * FROM newsletter WHERE email='".$email."'";
   $result=mysql_query&#40;$query, $conn&#41; or die&#40;mysql_error&#40;&#41;&#41;; 
   if&#40;mysql_num_rows&#40;$result&#41;==1&#41; &#123;
      //διαμορφώστε το query του delete ανάλογα με το πώς
      //έχετε διαμορφώσει τον πίνακά σας
      $query="DELETE FROM newsletter WHERE email='".$email."'";
      $result=mysql_query&#40;$query, $conn&#41; or die&#40;mysql_error&#40;&#41;&#41;; 
      echo "Email διαγράφηκε, ελπίζουμε να σας ξαναδούμε σύντομα κοντά μας";
   &#125; elseif&#40;mysql_num_rows&#40;$result&#41;==0&#41; &#123;
      echo "Δεν υπάρχει το συγκεκριμένο email στη λίστα μας\n για να πραγματοποιήσουμε την διαγραφή του";
   &#125;
   
&#125; elseif&#40;$valid==0&#41; &#123;
   
   echo "Ο Κωδικός του email σας δεν ανταποκρίνεται στον αναμενόμενο \n Επικοινωνήστε μαζί μας για την διευθέτηση του θέματος";
   
&#125;   
   
?>

</td></tr></table>
Ο παραπάνω κώδικας είναι αρκετά απλοϊκός και συγχωρέστε οποιαδήποτε λάθη βρεθούν κατά την ανάγνωσή του!
Ελπίζω σε παρατηρήσεις και σχόλια σας για την όσο περαιτέρω ανάπτυξη του!

Ευχαριστώ!
μια νέα αρχή ξεκίνησε...
ένας καινούριος δρόμος άνοιξε...
redpanda.gr

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

Newsletter

Δημοσίευση από mrpc » 22 Αύγ 2005 20:26

Πολύ καλό! Το κάνω βοήθημα :)

Άβαταρ μέλους
iffor
Δημοσιεύσεις: 778
Εγγραφή: 14 Μάιος 2005 01:19
Τοποθεσία: Παράδεισος
Επικοινωνία:

Newsletter

Δημοσίευση από iffor » 23 Αύγ 2005 14:49

Μου αρκεί να βοήθησα έστω και στο ελάχιστο έναν :wink:
μια νέα αρχή ξεκίνησε...
ένας καινούριος δρόμος άνοιξε...
redpanda.gr

Άβαταρ μέλους
manolism
Super Moderator
Δημοσιεύσεις: 6652
Εγγραφή: 25 Ιαν 2004 16:01
Τοποθεσία: Wild West
Επικοινωνία:

Newsletter

Δημοσίευση από manolism » 23 Αύγ 2005 14:54

Να είσαι σίγουρος γι' αυτό.

:wink:

Άβαταρ μέλους
xmavidis
Honorary Member
Δημοσιεύσεις: 1217
Εγγραφή: 02 Δεκ 2003 19:59
Τοποθεσία: Ηράκλειο

Newsletter

Δημοσίευση από xmavidis » 23 Αύγ 2005 16:39

Πολύ καλό! :P
I want to know God’s thoughts; the rest are details.
Albert Einstein

emphasy
Honorary Member
Δημοσιεύσεις: 4303
Εγγραφή: 16 Ιαν 2005 10:31

Newsletter

Δημοσίευση από emphasy » 23 Αύγ 2005 16:58

Μπράβο, πολύ καλό!

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Newsletter

Δημοσίευση από skeftomilos » 26 Αύγ 2005 09:20

Ακόμα κι εγώ ο άσχετος το κατάλαβα (μέσες άκρες)! :D
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Newsletter

Δημοσίευση από Basilakis » 17 Δεκ 2005 16:42

Etsi opws xazeva ta tutorials, epese to mati mou se afto. Kai eida pws kati
leipei. Oxi tpt symantiko, alla gia kapion pou den kserei einai isws symantiko

H bash dedomenwn thn opia xreiazetai to tutorial gia na treksei!

Κώδικας: Επιλογή όλων

CREATE TABLE newsletter &#40;
  id int&#40;11&#41; NOT NULL auto_increment,
  email varchar&#40;255&#41; default NULL,
  PRIMARY KEY  &#40;id&#41;&#41; TYPE=MyISAM DEFAULT CHARSET=greek COLLATE=greek_general_ci;

Άβαταρ μέλους
mpalarinas
Δημοσιεύσεις: 125
Εγγραφή: 28 Οκτ 2005 20:08
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Newsletter

Δημοσίευση από mpalarinas » 15 Απρ 2006 19:04

Καλησπέρα σας,
ακολούθησα ακριβώς τα βήματα όπως αναφέρονται παραπάνω. Ακολουθώ το πρώτο βήμα όπου εγγράφω το e-mail μου στην αντίστοιχη φόρμα. Μου έρχεται κανονικά e-mail. Οταν πατάω πάνω στο link που περιλαμβάνεται στο e-mail μου εμφανίζεται το παρακάτω μήνυμα.
Εγγραφή στην Υπηρεσία Newsletter

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/mysite/public_html/confirm.php on line 35

Γραμμή 35:
$result=mysql_query($query, $conn) or die(mysql_error());
Μπορείτε να μου πείτε που υπάρχει το λάθος και τι μπορώ να κάνω;
Σημείωση: Στο mysite έβαλα το url μου
Εικόνα

Άβαταρ μέλους
iffor
Δημοσιεύσεις: 778
Εγγραφή: 14 Μάιος 2005 01:19
Τοποθεσία: Παράδεισος
Επικοινωνία:

Newsletter

Δημοσίευση από iffor » 16 Απρ 2006 21:44

Μπορείς να δώσεις λιγάκι το link που σου έρχεται στο mail?
Στείλε το αν θέλεις PM.
μια νέα αρχή ξεκίνησε...
ένας καινούριος δρόμος άνοιξε...
redpanda.gr

Άβαταρ μέλους
ALKIVIADES
Honorary Member
Δημοσιεύσεις: 1322
Εγγραφή: 07 Απρ 2005 03:39

Newsletter

Δημοσίευση από ALKIVIADES » 01 Μάιος 2007 04:38

..''ανασύρω'' λίγο το θέμα του newsletter..απλά έχω μια απορία καθώς το έκαμα reading :oops: :oops: , στο : $ch=mail("$email",$subject,"To complete your subscription please click on the following link: www.yoursite.gr/confirm.php?email=$emai ... key","From: $from");

το email=$email , είναι ένα πεδίο του πίνακα της database μας myBase σωστά ;
όμως με το να βλέπει ο κάθε πρός εγγραφή χρήστης το όνομα αυτού του πεδίου του πίνακα μας email , δεν συνιστά κάποιο ρίσκο αυτό, από την στιγμή που με π.χ κάποιο άλλο τρόπο έχει επιπλέον (λέμε τώρα..) αποκτήσει και μερικές άλλες πληροφορίες σχετικά με τη βδ μας .

Ε
ίναι σωστό ο κάθε χρήστης να βλέπει, να ξέρει και το όνομα του πεδίου εννοώ email ;

Αν συνιστά κάποιο ρίσκό, ποιοι είναι μερικοί τρόποι με τους οποίους μπορούμε να 'κρύψουμε' το όνομα email , έτσι ώστε να μην μπορεί ο κάθε χρήστης να το βλέπει και π.χ στη θέση αυτού να υπάρχει ένα όνομα που δεν σχετίζεται με την αληθινή ονομασία του πεδίου του πίνακα της βδ μας.

EDIT

ydobemoson = no some body
καλά τόσο off thy topic ήμουνα ? :oops: :P
Εικόνα

Απάντηση

Επιστροφή στο “PHP τα δικά μας scripts”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες