Problem ze skryptem PHP - nie chce mi działac

Napisałem sobie taki skrypcik:

<? php


$do= array('mail' . 'mail' . 'mail' );

$temat="temat";

$tresc="jakaœ tam treœc";

$ilosc=3;


for( $liczba=0; $liczba<$ilosc; $liczba++)

mail($do[$liczba], $temat, $tresc);

echo "$do[$liczba]";

echo 
;


?>

I teraz mam 2 pytania:

  1. Co jest w skrypcie nie tak że nie działa?

  2. Czy gdy wyślę maile do adresatów z $do to będzie do nich dochodziła wiadomosc HTML jesli oczywiście $tersc będzie zawierała kod html??

Złączono Posta : 30.07.2007 (Pon) 21:51

byc może mój serwer nie obsługuje pentli mail. CZy może ktoś sprawdzic ten skrypt?

to co się widać na pierwszy rzut oka: elementy tablicy rozdziela się przecinkami, a nie kropkami. czy coś więcej? nie widzę, ale głowy nie dam, przejrzałem pobieżnie :wink:

radmistrz2

Poczytaj - Konkretne tematy… ze zwróceniem szczególnej uwagi na pierwszy post.

Proszę poprawić tytuł tematu na konkretny, mówiący o problemie.

W tym celu proszę użyć przycisku icon_edit.gif

Zignorowanie prośby będzie skutkowało usunięciem tematu do Kosza.

<? php


$do= array('mail' , 'mail' , 'mail' );

$temat="temat";

$tresc="jakaœ tam treœc";

$ilosc=3;


for( $liczba=0; $liczba<$ilosc; $liczba++) {

mail($do[$liczba], $temat, $tresc);

echo $do[$liczba];

echo 
;}


?>
  1. Elementy tablicy (zresztą argumenty każdej funkcji) oddziela się przecinkiem. Kropka łączy stringi, więc to co masz w arrayu to nie trzy elementy, a jeden.

  2. Nawiasy klamrowe w pętli for.

nie wiem dla czego, ale dalej nie działa mi ten skrypt. Może ktoś go sprawdzic bo ja już nie mam pojęcia co jest nie tak.

<? php

może niepotrzebna spacja

<?php

daj na początku

<?php error_reporting(E_ALL);

i powiedz czy wywala jakiś błąd.

Być może Twój serwer wymaga dodatkowych nagłówków, np. nadawcy:

http://pl2.php.net/manual/pl/function.mail.php

Być może w ogóle funkcja mail() jest wyłaczona, na jakim serwerze odpalasz skrypt?

odpalam go na isx.pl. Zrobiłem to co mówiłeś i nie wywala żadnego błędu, a mailing jak nie działała tak nie działa. Może faktycznie wina serwera. Zna ktoś jakis szybki darmowy serwer gdzie można wypróbowac ten skrypt?

Złączono Posta : 31.07.2007 (Wto) 15:15

a mógł by ktośna swom serwerze odpalic skrypt?

Był mały błąd, teraz działa. Wyświetla i wysyła.

<?php


$do= array('mail' , 'mail');

$temat="temat";

$tresc="jakas tam tresc";

$ilosc=2;


for( $liczba=0; $liczba<$ilosc; $liczba++) {

mail($do[$liczba], $temat, $tresc);

echo $do[$liczba];

echo '
'; }


?>

a w czym był błąd? bo tak patrzę i widzę tylko zmienioną liczbę maili?? ale dzięki

Liczbę mail zmieniłem bo miałem dwa adresy pod ręką :slight_smile:

troszkę rozbudowałem skrypt. Teraz napotkałem na następny problem. Nie wiem jak wkomponowac pobieranie maili z pliku w skrypt (jakoś nie mam dzisiaj passy do myślenia) Chcę wkomponowac wiersz: $do = explode( “\n”, $lista[$liczba]);

w skrypt:

<?php

//zmienne

$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

$temat="Siema Siema :D";

$tresc="Siema Siema :D";

$parametr="From: Radek ";

$ilosc=10;



//wczytywanie maili

$lista = file("$DOCUMENT_ROOT/../lista.txt");

  $ilosc_maili = count($lista);

  if ($ilosc_maili == 0)

 {

    echo '
Brak maili w bazie

        Proszę spróbować później.';

  }



//wysyłanie maili

for( $liczba=0; $liczba<$ilosc; $liczba++) {

mail($do[$liczba], $temat, $tresc, $parametr);

echo $do[$liczba];

echo '
'; }


?>[/code]

W pętli masz warunek $liczba < $ilość, z czego $ilość zawsze jest równa 10! A jeśli nie ma tylu maili w pliku to funkcja mail dostaje puste adresy email.

Wystarczy zmienić:

for( $liczba=0; $liczba<$ilosc; $liczba++)

na:

for( $liczba=0; $liczba<$ilosc_maili; $liczba++)

i powinno działać. Aha, można też usunąć

$ilosc=10;

bo i tak nie jest nigdzie używana.

$ ilosc jest używana do wyznaczenia ilości maili, które mają zostac wysłane, a ja chcęwkomponowac w to ten kod:

$do = explode( "\n", $lista[$liczba]);

Ale chciałbym zauważyć, że już to jest w funkcji file(). Przeczytaj o niej.

tak jest w funkcji file ale w skrypcie chcę sam (w przyszłości za pomocą formularza) decydowac do ilu osób ma zostac wysłany mail.

Złączono Posta : 04.08.2007 (Sob) 10:42

no passa myślenia z nowym dniem wróciła. Wkomponowałem to ch chciałem, tylko teraz skrypt mi znowu nie działa :frowning: :

<?php

//zmienne

$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

$temat= "temat";

$tresc= "tresc";

$parametr="From: Radek ";

$ilosc=10;



//wczytywanie listy maili

$lista = file("$DOCUMENT_ROOT/../lista.txt");

  $ilosc_maili = count($lista);

  if ($ilosc_maili == 0)

 {

    echo '
Brak maili w bazie

        Proszę spróbować później.';

  }


$do = explode( "\n", $lista); //rozbijanie listy do tablicy



//wysyłanie maili

for( $liczba=0; $liczba<$ilosc; $liczba++) {


mail($do[$liczba], $temat, $tresc, $parametr);

echo $do[$liczba];

echo '
'; }


?>[/code]

Dodając funkcję explode rozbijasz zmienną która jest tablicą. To nie ma prawa działać. Jeśli chcesz wybierać do ilu osób mają być wysyłane maile, to najlepiej dodać do starszej wersji w miejsce explode jeden warunek:

if($ilosc > $ilosc_maili)

{

   $ilosc = $ilosc_maili;

}

Jeśli w pliku będzie więcej maili niż $ilosc to pętla wykona się $ilosc razy. W przeciwnym wypadku pętla wykona się $ilosc_maili(gdzie $ilosc_maili < $ilosc) razy.

hmm nie bardzo czaję. Możesz mi wysłac cały przerobiony kod?

A proszę :wink:

<?php

//zmienne

$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

$temat="Siema Siema :D";

$tresc="Siema Siema :D";

$parametr="From: Radek ";

$ilosc=10;



//wczytywanie maili

$lista = file("$DOCUMENT_ROOT/../lista.txt");

  $ilosc_maili = count($lista);

  if ($ilosc_maili == 0)

 {

    echo '
Brak maili w bazie

        Proszę spróbować później.';

  }


if($ilosc > $ilosc_maili) //Sprawdza czy jest więcej maili niż można wysłać

{

   $ilosc = $ilosc_maili;

} 


//wysyłanie maili

for( $liczba=0; $liczba<$ilosc; $liczba++) {

mail($do[$liczba], $temat, $tresc, $parametr);

echo $do[$liczba];

echo '
'; }


?>

[/code]

no tak teraz czaje ale główny problem dalej nie jest rozwiązany. Nie wczytuje mi listy z pliku. W pliku maile są ułożone w następujący sposób:

mail1

mail2

mail3

mail4

...

I właśnie explode rozbijało to na tablocę

Ale funkcja file powinna to rozbić.

Gdzie to testujesz? U siebie na komputerze? Bo jeśli tak to $_SERVER[‘DOCUMENT_ROOT’] może wskazywać na inny adres niżeli ten w którym znajdują się pliki.

Spróbuj zmienić ścieżkę do pliku w funkcji file, usuwając $DOCUMENT_ROOT ze ścieżki.