Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Ponowne wykonanie skryptu na podstawie formularza
Pereq
post 22.08.2013, 21:50:30
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 22.08.2013

Ostrzeżenie: (0%)
-----


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:

  1. <?
  2. header('refresh: '.$_POST['refresh']);
  3. ?>
  4.  
  5. <head>
  6. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  7. </head>
  8.  
  9.  
  10. <?
  11. if (!isset($_SESSION['tak']))
  12. $_SESSION['tak']=0;
  13.  
  14. if (!isset($_SESSION['nie']))
  15. $_SESSION['nie']=0;
  16.  
  17. if (isset($_POST['execute']))
  18. {
  19. for ($i=0;$i<$_POST['ile'];$i++)
  20. {
  21. if (@mail($mail, $temat, $tresc))
  22. $_SESSION['tak']+=1;
  23. else
  24. $_SESSION['nie']+=1;
  25. }
  26.  
  27. echo '<font color=green> Liczba pomyślnie wysłanych maili: '.$_SESSION['tak'].'</font> <br>';
  28. echo '<font color=red> Liczba niepomyślnie wysłanych maili: '.$_SESSION['nie'].'</font>';
  29. }
  30. else
  31. echo '<form action="" method="post">
  32. E-mail do zaspamowania <br> <input type="text" name="mail"> <br><br>
  33. Temat e-maila: <br> <input type="text" name="temat"> <br><br>
  34. Treść e-maila: <br> <textarea name="tresc" rows="5" cols="17"></textarea> <br><br><br>
  35. Czas odświeżania strony <br> <input type="text" name="refresh"> <br><br>
  36. Ilość e-maili podczas jednej pętli <br> <input type="text" name="ile"> <br><br>
  37. <input type="hidden" name="execute" value="true">
  38. <input type="submit" value="Spamuj!">
  39. </form>';
  40. ?>


Wiem, że amatorszczyzna, ale dopiero zaczynam. wink.gif

Z góry dziękuję, pozdrawiam.
Go to the top of the page
+Quote Post
toaspzoo
post 22.08.2013, 22:03:11
Post #2





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


zamiast for użyj while(1) lub for( ; ; )

Ten post edytował toaspzoo 22.08.2013, 22:03:26


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
Pereq
post 22.08.2013, 22:14:05
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 22.08.2013

Ostrzeżenie: (0%)
-----


Myślałem o tym, ale wtedy nie aktualizowałyby mi się na bieżąco statystyki wysłanych wiadomości.
Go to the top of the page
+Quote Post
toaspzoo
post 23.08.2013, 00:27:05
Post #4





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


Co za problem to wrzucić do iteracji?


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
Pereq
post 23.08.2013, 21:32:34
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 22.08.2013

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
toaspzoo
post 23.08.2013, 23:29:40
Post #6





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


Aktualizacja w Ajax, a statystki zapisywane do bazy np. co 5 iterację (żeby nie przeciążać).


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
Pereq
post 24.08.2013, 21:27:51
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 22.08.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
markonix
post 25.08.2013, 00:54:13
Post #8





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
Pereq
post 25.08.2013, 10:58:45
Post #9





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 22.08.2013

Ostrzeżenie: (0%)
-----


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. wink.gif

Temat do zamknięcia.
Go to the top of the page
+Quote Post
markonix
post 25.08.2013, 13:39:23
Post #10





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Pereq
post 25.08.2013, 21:45:10
Post #11





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 22.08.2013

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
markonix
post 26.08.2013, 10:23:56
Post #12





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


No najnormalniej:

$mail = $_POST['mail'];


--------------------
Go to the top of the page
+Quote Post
Pereq
post 26.08.2013, 13:26:40
Post #13





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 22.08.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
markonix
post 26.08.2013, 21:43:23
Post #14





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


$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.


--------------------
Go to the top of the page
+Quote Post
Pereq
post 27.08.2013, 09:32:05
Post #15





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 22.08.2013

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
markonix
post 27.08.2013, 11:16:18
Post #16





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
Pereq
post 27.08.2013, 14:11:41
Post #17





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 22.08.2013

Ostrzeżenie: (0%)
-----


W takim razie czego używać? WebServ będzie odpowiedni czy jest coś bardziej interesującego?
Go to the top of the page
+Quote Post
markonix
post 27.08.2013, 14:13:40
Post #18





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Pereq
post 28.08.2013, 20:19:43
Post #19





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 22.08.2013

Ostrzeżenie: (0%)
-----


Dziękuję, temat do zamknięcia.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.06.2025 - 17:55