Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]newsletter php+mysql
Forum PHP.pl > Forum > Przedszkole
styko
Witam. Wybaczcie, że na wstępie pisze posta z prośbą o pomoc aczkolwiek dostałem od szefostwa w firmie, w której pracuję polecenie stworzenia rzeczonego newslettera opartego na php i bazie danych zbierającej adresy e-mail. Problem w tym, że ostatni raz php miałem 5 lat temu na studiach, a moja dziedzina jest diametralnie odmienna od możliwości działania w PHP. Od pewnego czasu poszukuję tutoriali tudzież nawet gotowca do stworzenia jakiegoś prostego newslettera, i na jednym z forów trafiłem na coś zgrabnego. Z tym, że moje zrozumienie tematu niestety jest dalekie od dostatecznego. Treść tutoriala jest poniżej...[php][/php]

Najpierw zaczynamy od tabelki w (mojej szkole)
Kod
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
Kod
<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.
Kod
<?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
Kod
<?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(0, 100);
                $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.
Kod
<?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
Kod
<?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.




W tym miejscu mam sporo problemów z utworzeniem bazy danych, według tego tutoriala tworzyłem ją w phpmyadmin



czy dobrze te pola wypełniłem?questionmark.gif


kolejnym problemem z jakim się borykam jest 4 kod, kwestia gdzie ten kod mam umieścić, dodać go do któregoś z tych plików czy też stworzyć oddzielny plik.
ostatnia opcja to wysyłanie newslettera. Ostatni kod to plik send.php ... niestety dostaje w nim komunikat
Kod
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /var/www/public_html/newsletter/send.php on line 18




Czy ktoś życzliwy nie zje mnie za tak rozwiązły post i pomoże mi ogarnąć to? :/ Moja zieleń w tym temacie jest permanentna, a odgórnie nie zważając na moje braki zlecili mi zadanie.

Pozdrawiam i przepraszam za ewentualny śmietnik.
d3ut3r
Może to zabrzmi dziwnie ale nie warto tego naprawiać smile.gif
  1. $wynik = mysql_query("SELECT * FROM subskrypcja") or die('Błąd zapytania');
  2. if(mysql_num_rows($wynik) > 0)
  3. {
  4. /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
  5. while($t = mysql_fetch_assoc($wynik))
  6. {
  7. $maill = $t['mail'];
  8. if($email == $maill)
  9. {
  10. $mozna=1;
  11. }
  12. }
  13. }


już sam ten kod mnie przeraża, w zapytaniu przecież można użyć warunku który sprawdzi czy e-mail jest a nie pobierać całą tabelę po to żeby ją potocznie mówiąc przelecieć w PHP:)

kolejna sprawa
  1. DELETE FROM subskrypcja WHERE random = '$number'

a co jeżeli kilku użytkowników o różnych mailach wylosuje ten sam random ? to tylko przedział od 1-100 więc powtarzalność będzie raczej duża wtedy takie zapytanie kasuje kilka rekordów.

Chyba że to ja czegoś nie rozumiem smile.gif
styko
smile.gif Dziękuję za odpowiedź...przeanalizuje to sobie z tegoż względu, że jak mówiłem zieleń mojego pojęcia razi, aż w oczy...poszukiwanie gotowych rozwiązań nie jest dobrze widziane na forach ale w geście rozpaczy po prostu skopiowałem to tutaj z paroma pytaniami, żeby to chodziło w jakikolwiek sposób;)

doszedłem przynajmniej do tego, że do bazy danych adresy mail są zapisywane z formularza więc w moim wypadku to już sukces wink.gif


Dzięki za odpowiedź
singollo
Bardzo, bardzo, ale to bardzo sugeruję skorzystanie z gotowych rozwiązań. Może być np freshmail, może być coś innego - na pewno znajdziesz w sieci.

Piszę jako człowiek, który przez rok walczył z różnymi newsletterami w dużej agencji i jest świadomy problemów z nimi związanymi: każdy klient poczty wyświetla wiadomość w inny sposób, niektóre serwery odrzucają niektóre wiadomości, łatwo trafić na spam-listę itp. Jeżeli nie masz doświadczenia w temacie - nie rób tego.

Zgadnij, kto oberwie, jak się pomylisz i domenę firmową dodadzą do jakieś spamlisty?
styko
Cytat(singollo @ 9.06.2011, 14:33:04 ) *
Bardzo, bardzo, ale to bardzo sugeruję skorzystanie z gotowych rozwiązań. Może być np freshmail, może być coś innego - na pewno znajdziesz w sieci.

Piszę jako człowiek, który przez rok walczył z różnymi newsletterami w dużej agencji i jest świadomy problemów z nimi związanymi: każdy klient poczty wyświetla wiadomość w inny sposób, niektóre serwery odrzucają niektóre wiadomości, łatwo trafić na spam-listę itp. Jeżeli nie masz doświadczenia w temacie - nie rób tego.

Zgadnij, kto oberwie, jak się pomylisz i domenę firmową dodadzą do jakieś spamlisty?


No właśnie kwestia taka, że opcje serwerowe są mi znane i to moja domena, więc poczta działa dobrze ;] Gorzej żeby w php coś podziobać...

Abstrahując od powyższego, po laicku udało mi się zdziałać dopisywanie do bazy danych z formularza. To już 3/4 sukcesu bo zawsze można zebrać adresy mail i puścić z outlooka wink.gif
Ale chodzi mi o to rozwiązanie które jest w 4 i 5 kodzie (5 kod zapisany jest w pliku send natomiast 4 odpowiada za kasowanie z bazy danych maila).

4 słuzy do kasowania maila z bazy danych, czy powinienem to wrzucić do któregoś z podanych kodów czy zupełnie nowy plik php stworzyćquestionmark.gif Nie wiem jak to obsłużyć :/ jest tam niby link do kasowania się z listy ale jak to wysłać ? :/

5 send.php ... tutaj odpalając ten plik jako www.*****/newsletter/send.php wyskakuje mi
Kod
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /var/www/public_html/newsletter/send.php on line 18


Ktoś jeszcze cierpliwy do mnie może mi podsunąć rozwiązanie?questionmark.gifsmile.gif

Pozdrawiam i dzięki za powyższe

singollo
  1. $out ='\n\nAby wyłączyc subskrypcji klijnij w poniższy link\nhttp://outsub.php?mail='.$mail.'&number='.$liczba';


Usuń apostrof sprzed średnika. Sugeruję używać edytora z kolorowaniem składni - takie błędy wtedy "świecą" w kodzie smile.gif
styko
dzieki wielkie, wszystko smiga wink.gif
tylko jeszcze jakiś formularz pod send.php podpiac czy pod subskrypcja.php, żeby generować treść maila i będzie miło smile.gif

Dziękuję wielce za pomoc i pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.