Pereq
22.08.2013, 21:50:30
Witam.
Zacząłem się uczyć PHP i podjąłem się wymyślonego przeze mnie projektu - małego spambocika. Z samym napisaniem programu, żeby działał nie było problemów, ale przy upiększaniu się jeden pojawił. Chodzi o to, że chcę program zapętlić tak, aby po wpisaniu danych skrypt pracował do momentu zamknięcia karty przeglądarki (na razie, później będę się z tym dalej bawił). Aktualnie program wykonuje raz pętlę, a później wraca do pustego formularza. Szukałem naprawdę długo rozwiązania swojego problemu, bo w taki sposób się więcej nauczę, ale w tym momencie czuję się bezsilny. Próbowałem już wszystkich sposobów, na które wpadłem, ale bezskutecznie. Dużo osób szukało pomocy z zablokowaniem ponownego przesyłania danych z formularzy, a ja szukam czegoś zupełnie odwrotnego. Pamiętam, że przy jakimś tam bardziej amatorskim formularzu dane były przechowywane w linku i może tędy droga, ale nie mam pojęcia jak się za to zabrać. Oto kod:
<?
header('refresh: '.$_POST['refresh']); ?>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<?
if (!isset($_SESSION['tak'])) $_SESSION['tak']=0;
if (!isset($_SESSION['nie'])) $_SESSION['nie']=0;
if (isset($_POST['execute'])) {
for ($i=0;$i<$_POST['ile'];$i++)
{
if (@mail($mail, $temat, $tresc)) $_SESSION['tak']+=1;
else
$_SESSION['nie']+=1;
}
echo '<font color=green> Liczba pomyślnie wysłanych maili: '.$_SESSION['tak'].'</font> <br>'; echo '<font color=red> Liczba niepomyślnie wysłanych maili: '.$_SESSION['nie'].'</font>'; }
else
echo '<form action="" method="post"> E-mail do zaspamowania <br> <input type="text" name="mail"> <br><br>
Temat e-maila: <br> <input type="text" name="temat"> <br><br>
Treść e-maila: <br> <textarea name="tresc" rows="5" cols="17"></textarea> <br><br><br>
Czas odświeżania strony <br> <input type="text" name="refresh"> <br><br>
Ilość e-maili podczas jednej pętli <br> <input type="text" name="ile"> <br><br>
<input type="hidden" name="execute" value="true">
<input type="submit" value="Spamuj!">
</form>';
?>
Wiem, że amatorszczyzna, ale dopiero zaczynam.

Z góry dziękuję, pozdrawiam.
toaspzoo
22.08.2013, 22:03:11
zamiast for użyj while(1) lub for( ; ; )
Pereq
22.08.2013, 22:14:05
Myślałem o tym, ale wtedy nie aktualizowałyby mi się na bieżąco statystyki wysłanych wiadomości.
toaspzoo
23.08.2013, 00:27:05
Co za problem to wrzucić do iteracji?
Pereq
23.08.2013, 21:32:34
Nie rozumiem Twojej koncepcji. Odświeżania do iteracji nie wrzucę, bo header musi być na początku. Wypisywania statystyk też tam nie dam, bo tak czy inaczej będzie trzeba przeładować stronę, aby zaktualizować tekst. Mógłbyś sprecyzować o co Ci chodziło?
toaspzoo
23.08.2013, 23:29:40
Aktualizacja w Ajax, a statystki zapisywane do bazy np. co 5 iterację (żeby nie przeciążać).
Pereq
24.08.2013, 21:27:51
Z użyciem AJAX-a dałbym sobie radę, bo kilkukrotnie się na niego natknąłem, ale chcę to napisać czystym PHP.
Da radę ktoś pomóc? Bardzo mi na tym zależy, bo utknąłem w miejscu i nie mogę się ruszyć dalej.
markonix
25.08.2013, 00:54:13
Bezsensu ten skrypt - tu się prosi po prostu o progres bar.
Twój sposób nie ma racji bytu - wykonujesz przekierowanie na samym początku skryptu więc jak ma przejść dalej i wysłać e-mail?
Jeżeli chcesz iść tym tropem to musiałbyś wysłać e-mail przed przekierowaniem ale wtedy nic nie wyświetlisz do przeglądarki.
Przekierowanie z wyświetleniem czegokolwiek w przeglądarce wymaga JavaScriptu, nie ma opcji użyć PHP.
Ogólnie kod jest uproszczony rozumiem bo nie widzę żeby chociaż $mail było definiowane?
Pereq
25.08.2013, 10:58:45
Okay, ta odpowiedź mnie satysfakcjonuje - dzięki.
Dopiero zaczynam zabawę z PHP, nigdzie nie przeczytałem, że $mail trzeba definiować, a skoro działało, to nie dociekałem dalej. Czyli będzie trzeba się zagłębić w JS.

Temat do zamknięcia.
markonix
25.08.2013, 13:39:23
Cytat(Pereq @ 25.08.2013, 11:58:45 )

nigdzie nie przeczytałem, że $mail trzeba definiować, a skoro działało, to nie dociekałem dalej.
To skąd skrypt ma wiedzieć gdzie wysłać maila.
Dane w formularza znajdują się w tablicy, nie zmiennych no chyba, że register_globals masz włączone - jeżeli tak zmień kurs / książkę jak najszybciej.
Pereq
25.08.2013, 21:45:10
Wiem, że nie robiłem tego jak powinienem, ale z żadnego kursu nie korzystałem. Jakieś tam podstawy C++ oraz HTML znałem i zacząłem pisać, a jak czegoś nie wiedziałem, to googlowałem. Teraz na pewno przeczytam jeden czy dwa kursy PHP, a później JS, żeby nie uczyć się złych nawyków.
Możesz mi jeszcze napisać jak to powinno prawidłowo wyglądać? Chodzi mi o tą deklarację.
markonix
26.08.2013, 10:23:56
No najnormalniej:
$mail = $_POST['mail'];
Pereq
26.08.2013, 13:26:40
Już wiem o co chodzi. Myślałem, że mam zadeklarować funkcję, a Tobie chodziło o parametr, który zresztą idiotycznie nazwałem tak samo jak funkcja. Wcześniej rzeczywiście miałem w tamtym miejscu "$_POST['mail'", ale jakoś w trakcie to zmieniłem, nie wiem czemu. Wszystko działało, więc myślałem, że taki zapis też jest prawidłowy, a do tego znacznie krótszy.
markonix
26.08.2013, 21:43:23
$mail to nie to samo co $_POST['mail'] - to zupełnie dwie różne zmienne, jedynym wyjątkiem gdy mogą być takie same to włączenie dyrektywy w ustawieniach PHP o której wspomniałem wcześniej.
Pereq
27.08.2013, 09:32:05
Rzeczywiście w krasnalu jest standardowo włączone. Jak już wcześniej pisałem, wcześniej używałem odwołania do tablicy, ale pod wpływem czegoś zmieniłem to na krótszą wersję i działało, więc zostawiłem. Więcej z mojego "sposobu" korzystać nie będę, a co do dyrektywy - chyba lepiej będzie ją wyłączyć?
markonix
27.08.2013, 11:16:18
Krasnal stanął na wersji PHP 4 (czy tam 5 ale jakaś stara wersja) i nie jest rozwijany - dawno nie powinno się go używać.
O samym register piszą sami twórcy PHP:
http://php.net/manual/en/security.globals.php
Pereq
27.08.2013, 14:11:41
W takim razie czego używać? WebServ będzie odpowiedni czy jest coś bardziej interesującego?
markonix
27.08.2013, 14:13:40
Na pewno znajdziesz w sieci jakieś artykuły z porównaniem.
Praktycznie każdy będzie lepszy niż krasnal, a do takich małych projektów nie ma znaczenia jaki wybierzesz, byle prosty.
Ja korzystałem kiedyś z XAMPP.
Pereq
28.08.2013, 20:19:43
Dziękuję, temat do zamknięcia.
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.