Forum graficzne Burning-Brushes.pl

Tutoriale graficzne i materialy => Pozostałe tutoriale => Tutoriale PHP/MySQL => Wątek zaczęty przez: Sympatyk w Marzec 02, 2011, 14:40:06

Tytuł: Newsletter/substrykcja
Wiadomość wysłana przez: Sympatyk w Marzec 02, 2011, 14:40:06
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.
Tytuł: Odp: Newsletter/substrykcja
Wiadomość wysłana przez: Abik w Marzec 02, 2011, 14:43:54
oblukam go sobie dokładniej wieczorem, ale tak na pierwszy rzut oka jest całkiem spoko :D przydatny gadżet ^^
Tytuł: Odp: Newsletter/substrykcja
Wiadomość wysłana przez: Kenty^ w Marzec 02, 2011, 17:25:47
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
Tytuł: Odp: Newsletter/substrykcja
Wiadomość wysłana przez: styko w Czerwiec 09, 2011, 10:18:21
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??

(https://burning-brushes.pl/proxy.php?request=http%3A%2F%2Fimages40.fotosik.pl%2F896%2F1cc4e61ebcd110c7.jpg&hash=ee12c408f169b131453f30d50e290ee84c611ff7) (http://www.fotosik.pl)

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.
Tytuł: Odp: Newsletter/substrykcja
Wiadomość wysłana przez: Sympatyk w Czerwiec 09, 2011, 18:32:08
Tabela tak ma wyglądac.
(https://burning-brushes.pl/proxy.php?request=http%3A%2F%2Fimg.burning-brushes.pl%2Fthumbs%2Fsubs.jpg&hash=fb663602a1e32be7a18ab45721cf76753d053379) (http://img.burning-brushes.pl/?v=subs.jpg)
<?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.
Tytuł: Odp: Newsletter/substrykcja
Wiadomość wysłana przez: styko w Czerwiec 10, 2011, 10:47:44
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ę.
Tytuł: Odp: Newsletter/substrykcja
Wiadomość wysłana przez: Sympatyk w Czerwiec 10, 2011, 11:32:14
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.

Tytuł: Odp: Newsletter/substrykcja
Wiadomość wysłana przez: styko w Czerwiec 10, 2011, 12:43:35
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ć.

(https://burning-brushes.pl/proxy.php?request=http%3A%2F%2Fimages43.fotosik.pl%2F918%2Fe28c8c90538177d4.jpg&hash=851b586ceca239d4c49d5d854ba762baf56eadf4)

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
Tytuł: Odp: Newsletter/substrykcja
Wiadomość wysłana przez: Lysander w Czerwiec 10, 2011, 13:32:33
A_I to AUTO_INCREMENT, po prostu postaw przy tym ptaszka
Tytuł: Odp: Newsletter/substrykcja
Wiadomość wysłana przez: styko w Czerwiec 10, 2011, 13:33:37
no i wszystko jasne...logika czasami nie idzie w parze z codziennością :)
Dziękuję za podpowiedź, życzę miłego weekendu ;)
Tytuł: Odp: Newsletter/substrykcja
Wiadomość wysłana przez: Sympatyk w Czerwiec 10, 2011, 14:02:08
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);