• Welcome to Forum graficzne Burning-Brushes.pl. Please log in or sign up.
 

Newsletter/substrykcja

Zaczęty przez Sympatyk, Marzec 02, 2011, 14:40:06

Poprzedni wątek - Następny wątek
Nie wiem do końca jak się to nazywa. Generalnie chodzi o to, że podajemy swój adres E-mail i dostajemy co jakiś czas troche spamiku.

Najpierw zaczynamy od tabelki w (mojej szkole)
ID(int) | mail(varchar(255) ) | random(int)
Nazwy kolumn a w nawiasach ich typ, dodatkowo ID jest kluczem i ma auto inkrementacje.
Nazwa całej tabelki nazwałem substrykcja

Robimy tam jakiś formularzyk
<form method="post" action="php/subskrypcja.php" >
<fieldset>
Subskrypcja:
<input name="mail" type="text"  size="35" value="Twój adres e-mail" />
<input type="submit" value="Wyślij" class="input1"/>
<input type="reset" value="Wyczyść" class="input1"/>
</fieldset>
</form>

No i jeszcze plik lacz.php, dzięki któremu będziemy sie łączyc z sql.
<?php
$mysql_server "[SERWER BAZY DANYCH]";
$mysql_admin "[UZYTKOWNIK]";
$mysql_pass "[HASLO]";
$mysql_db "[NAZWA BAZY DANYCH]";

$connection = @mysql_connect($mysql_server$mysql_admin$mysql_pass) or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
$db = @mysql_select_db($mysql_db$connection) or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
?>

No i teraz pora na plik substrykcja.php
<?php
$email $_POST['mail'] ;
if($email != null)
{
if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$"$email))

echo '<p>Wprowadzony adres jest nieprawidłowy.</p>';
echo '<a href="http:/index.php">Powrót do strony głównej.</a>';
}
else
{
include('lacz.php');

$wynik mysql_query("SELECT * FROM subskrypcja")  or die('Błąd zapytania'); 
if(mysql_num_rows($wynik) > 0

/* jeżeli wynik jest pozytywny, to wyświetlamy dane */ 
while($t mysql_fetch_assoc($wynik)) 
{
$maill $t['mail'];
if($email == $maill)
{
$mozna=1;
}
}
}
if($mozna == 1)
{
echo '<p>Adres Email jest już w bazie.</p>';
echo '<a href="http:/index.php">Powrót do strony głównej.</a>';
}
else
{
$random rand(0100);
$ins mysql_query("INSERT INTO subskrypcja SET mail='$email', random = '$random' ");
if($ins)
{
echo '<p>Adres Email został zapisany. Teraz będziesz powiadamiany o wszystkich nowościach.</p>';
echo '<a href="http:/index.php">Powrót do strony głównej.</a>';
}
}
}
}
?>

Po krótce go opowiem.
Pierwszy if sprawcza czy pole w formularzu zostało wypełnione.
Potem sprawdzamy czy został wpisany z prawidławami adresu email
Jeśli został dobrze wpisany to łączymy się z bazą przez plik zaincludowany.
W pętli while sprawdzamy czy podany adres email już nie jest wpisany.
Jeśli jest to wyskoczy komunikat jeśli nie to losuje liczbę z przedziały 0-100 i potem dodajemy wiersz do naszej tabelki w sql.
I to na tyle samego zapisywania adresów.
Teraz jeszcze trzeba miec możliwośc wykasowania danego adresu.
<?php
$email $_GET['mail'];
$number $_GET['number'];

include('lacz.php');
$wynik mysql_query("SELECT * FROM subskrypcja")  or die('Błąd zapytania'); 
if(mysql_num_rows($wynik) > 0

/* jeżeli wynik jest pozytywny, to wyświetlamy dane */ 
while($t mysql_fetch_assoc($wynik)) 
{
$mail $t['mail'];
$random $t['random'];
if($email == $mail AND $number == $random)
{
$mozna=1;
}
}
}
if($mozna == 1)
{
$kasowanie mysql_query("DELETE FROM subskrypcja WHERE random = '$number' ") or die(mysql_error());
echo '<p>Adres Email został wykasowany.</p>';
echo '<a href="http:/index.php">Powrót do strony głównej.</a>';
}
else
{
echo '<p>Błędne dane.</p>';
echo '<a href="http:/index.php">Powrót do strony głównej.</a>';
}
?>

Na tą stronę wchodzimy
nazwastrony.php?mail=[*ADRES EMAIL]&number=[**LICZBA WYLOSOWANA 0-100]
Oczywiście ten link będzie się automatycznie generował
Pobieramy dwie wartości adres i liczbe. I ponownie łączymy się z sql, w pętli while jest warunek if sprawdzamy czy jest taki wiersz gdzie w kolumnie mail jest taki adres mejla(patrz *) i kolumnie random (patrz **) Jeśli tak to kasuje cały wiersz jeśli to wyjdzie komuniakt.

Teraz pliczek wysyłający spam, send.php
<?php
include(
'lacz.php');
$temat "Temat wiadomosc";
$tresc 'tresc wiadomosc';
$wynik mysql_query("SELECT * FROM subskrypcja")  or die('Błąd zapytania'); 
if(mysql_num_rows($wynik) > 0

/* jeżeli wynik jest pozytywny, to wyświetlamy dane */  
while($t mysql_fetch_assoc($wynik)) 
{
$liczba $t['random'];
$mail $t['mail'] ;
$out ='\n\nAby wyłączyc subskrypcji klijnij w poniższy link\nhttp://outsub.php?mail='.$mail.'&number='.$liczba;
$wiadomosc $tresc.$out;

mail ($mail$temat$wiadomosc );
}
echo '<p>Poszło.</p>';
echo '<a href="http:/index.php">Powrót do strony głównej.</a>';
}
?>

Edytujemy 3 i 4 linijeczke.

oblukam go sobie dokładniej wieczorem, ale tak na pierwszy rzut oka jest całkiem spoko :D przydatny gadżet ^^

Chodzi Ci o subskrypcję chyba, a nie substrykcję;p
Dzięki za tuta, faktycznie fajny gadżet, być może kiedyś mi się przyda:P

Witam. Wybaczcie, że na wstępie pisze posta z prośbą o pomoc aczkolwiek to chyba pierwszy tutek na jakiego trafiłem, co jest naprawdę rzeczowy. A poszukiwania jakiegoś tutoriala do robienia newslettera php+baza danych szukam od pewnego czasu, gdyż mój szef nie bacząc na to, iż jestem zielony w tym temacie polecił mi stworzyć rzeczony newsletter, przez co szarpię się z tematem już sporo czasu.

W tym wypadku, ten formularz umieściłem na stronie, łącznie z plikami lacz.php i substrykcja.php (subskrypcja u mnie), z formularza info wypada, że nie można połączyć z bazą danych. Oczywiście jej nie mam i tutaj moje pierwsze pytanie

[code]
Najpierw zaczynamy od tabelki w (mojej szkole)

ID(int) | mail(varchar(255) ) | random(int)\[/code]

Czy w phpmyadmin to powinno wyglądać w ten sposób??



Moje drugie pytanie o 2 ostatnie kody.


<?php
   $email 
$_GET['mail'];
   
$number $_GET['number'];

   include(
'lacz.php');
   
$wynik mysql_query("SELECT * FROM subskrypcja")  or die('Błąd zapytania');    
   if(
mysql_num_rows($wynik) > 0
   { 
      
/* jeżeli wynik jest pozytywny, to wyświetlamy dane */ 
      
while($t mysql_fetch_assoc($wynik)) 
      {
         
$mail $t['mail'];
         
$random $t['random'];
         if(
$email == $mail AND $number == $random)
         {
               
$mozna=1;
         }
      }
   }         
   if(
$mozna == 1)
   {
      
$kasowanie mysql_query("DELETE FROM subskrypcja WHERE random = '$number' ") or die(mysql_error());
      echo 
'<p>Adres Email został wykasowany.</p>';
      echo 
'<a href="http:/index.php">Powrót do strony głównej.</a>';
   }   
   else
   {
      echo 
'<p>Błędne dane.</p>';
      echo 
'<a href="http:/index.php">Powrót do strony głównej.</a>';
   }
?>


Gdzie powinienem dokładnie umieścić ten kod ;/ dołączyć do któregoś z tych plików w/w, czy też stworzyć kolejny plik.

oraz ostatnie pytanko, w jaki sposób mogę wysyłać maile do subskrybentów. Chodzi o konkretną treść słaną do całej listy mailowej co mi się w przyszłości ma zapełnić. Rozumiem, że chodzi o plik send.php, ale w jaki sposób za jego pomocą słać maile z newsletterem.

Przepraszam za tak rzeczowe pytania aczkolwiek jak mówiłem jestem w kropce bo nie znam się na tej dziedzinie, a odgórnie mnie przycisnęli, żebym coś takiego stworzył.

Dziękuję z góry.

Tabela tak ma wyglądac.

<?php
$result="CREATE TABLE subskrypcja (
ID int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
mail varchar(255) default NULL,
ramdom INT default NULL
)"
;
$tworzenie mysql_query($result) or die(mysql_error());

if (!$tworzenie$fail "1";
if (isset($fail) && $fail == "1") {
echo "ERROR";
exit;
} else {
echo "Tabela subskrypcja poprawnie utworzona.";
}
?>

Pisane z palca na tworzenie tej tabelki

Jeśli chodzi o kodzik, to fakt zapomniałem napisac, ale w pliku send.php była jakby podpowiedz
http://outsub.php?mail='.$mail.'&number='.$liczba'
czyli stworzyc kolejny pliczek outsub.php

Jak wysyłac wiadomości.
W pliku send.php, jak pisałem należy edytowac 3 i 4 linijeczke.
I teraz wystarczy odpalic ten pliczek.
Powinienen się pojawic napis, Poszło i link do strony głównej.
Wysyłanie zrobione tak, ponieważ teraz łatwo można go pod jakiś formularz podłączyc.

wielkie dzięki za odpowiedź, bardzo fajnie napisany tutorial. Nawet ja jako kompletny laik, który zielonością aż świeci doszedł do momentu, że w bazie danych zapisują się maile ;) Szef pogłaszcze po głowie w nagrodę ;)

tabelkę stworzyć udało mi się już wczoraj za pomocą phpmyadmin aczkolwiek jeden problem, gdyż nie mogę nigdzie znaleźć opcji, żeby w rekordzie DODATKOWO było AUTO_INCREMENT...rozumiem, że to ważne jest.

kwestia pliku send.php


Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /var/www/public_html/newsletter/send.php on line 18


coś takiego mi wyskakuje po odpaleniu tego pliku.

Jakoś może podepnę to pod formularz do wysyłania ;) Ważne, że maile można do bazy danych zapisywać (Zawsze można je skopiować do outlooka;P)


Dziękuję za pomoc, uratowałeś mi głowę.

AUTO_INCREMENTACJA.
w phpmyadmin. Wchodzisz do tabeli. Potem zakładka struktura potem tam gdzie jest wiesz ID na jego wysokoście po prawej stronie w kolumnie działania będzie taki ołówek który należy kliknąc, potem już dasz sobie rade.

Ten błąd.
Linia 13, ostatni apostrof zaraz za zmienna liczba wywalic i będzie grało.
Już to w kodzie w pierwszym poście zmieniłem.


ok, send.php już gra....

natomiast kwestia tej tabeli z AUTO_INCREMENT ... przy zakładaniu tabeli w phpmyadmin już miałem te opcje i nie widziałem nigdzie tej opcji z list rozwijanych, a nie wiem czy to wpisać z palca gdzieś czy z pola wyboru wybrać.



Przepraszam za taką namolność ale czy mógłbyś mi wskazać jeszcze w tej tabelce gdzie umieścić opcję AUTO_INCREMENT ??

P.S

po odpaleniu pliku send.php dostałem maila od www-data@ ... czy można to zmienić w jakiś sposób, żeby wysyłało z innego adresu mailowego?? powiedzmy newsletter@ ...


Dzięki wielki i o wybaczenie proszę, że piątek tak pytaniami zaśmiecam :)

Pozdrawiam

A_I to AUTO_INCREMENT, po prostu postaw przy tym ptaszka
Give sanity a longer leash  |  H+ 

no i wszystko jasne...logika czasami nie idzie w parze z codziennością :)
Dziękuję za podpowiedź, życzę miłego weekendu ;)

Cytatczy można to zmienić w jakiś sposób, żeby wysyłało z innego adresu mailowego
chyba tak się to robi.
$header = 'From: newsletter(malpa)costam.pl';
...
mail ($mail, $temat, $wiadomosc , $header);