Formularz kontaktowy program z wysyłaniem


(wojtek1150) #1

Witam. Mam następujący skrypt od formularza kontaktowego:

<?php


$ok = $_POST['ok'];


if($ok)

{ 


// Odbieramy dane z formularza


$imie = $_POST['imie'];

$email = $_POST['email'];

$temat = $_POST['subject'];

$telefon = $_POST['phone'];

$zgoda1 = $_POST['checkbox'];

$zgoda2 = $_POST['checkbox2'];

$pytania = $_POST['message'];



srand((double)microtime()*10000000);

$znacznik = md5(uniqid(rand()));


////////// USTAWIENIA //////////

$filename="praca-send.html";

$odbiorca = 'wojtek1150@gmail.com'; // Adres e-mail adresata

$tytul = "Event.pl :: Podanie na stanowisko $temat"; // Temat listu

$message = 'Dziękujemy za przesłanie formularza. Informacje zostały prawidłowo dodane do naszej bazy danych.'; // Komunikat

$error = 'Wystąpił błąd podczas wysyłania formularza'; // Komunikat błędu

$zformularza = "

Imię;: $imie

E-mail: $email

Telefon: $telefon

Zgoda na: $zgoda1

Zgoda na: $zgoda2

CV: w Załączniku



Pytania: $pytania";

//////////////////////////////


// Nagłówki

$naglowki = "From: $email\n";

$naglowki .= "MIME-Version: 1.0\n";

$naglowki .= "Content-Type: multipart/mixed;\n";

$naglowki .= "\tboundary=\"___$znacznik==\"";



// Treść listu

$tresclistu="--___$znacznik==\n";

$tresclistu .="Content-Type: text/plain; charset=\"iso-8859-2\"\n";

$tresclistu .="Content-Transfer-Encoding: 8bit\n";

$tresclistu .="\n$zformularza\n";


// Załącznik

$nazwa_tymczasowa = $_FILES["plik1"]["tmp_name"];

$nazwa_pliku = $_FILES["plik1"]["name"];


if (is_uploaded_file($nazwa_tymczasowa))

{

$tresclistu .="--___$znacznik==\n";

$tresclistu .="Content-Type: image/jpg\n";

$tresclistu .="Content-Disposition: attachment;\n";

$tresclistu .=" filename=\"$nazwa_pliku\"\n";

$tresclistu .="Content-Transfer-Encoding: base64\n\n";

$f = fopen($nazwa_tymczasowa, "rb");

$dane = fread($f,filesize($nazwa_tymczasowa));

fclose($f);

$tresclistu .= chunk_split(base64_encode($dane));

$tresclistu .="--___$znacznik==--\n";

}


// wysłanie listu

if (mail($odbiorca,$tytul,$tresclistu,$naglowki))

{

echo '';

                echo '';

                echo '';

                echo '';

print "".$message."";

}

else

{

print "".$error."";

}

}

?>

Jednak nie wysyła mi maila z firefoxa. Przechodzi do tego pliku php i nie przerzuca na żądaną stronę.

Jakieś sugestie?

Pozdrawiam


(Pablo_Wawa) #2

1 A w innej przeglądarce (np. Internet Explorerze) działa poprawnie?

  1. Co to znaczy “Przechodzi do tego pliku php” ?

  2. Czy JavaScript masz włączony (może w Fx wyłączyłeś go lub masz NoScript)?

  3. Dziwny masz ten fragment po wysłaniu e-maila - brak w nim definicji nagłówka HTML - ale zakładasz, jakbyś już był wyświetlony (i to nie txt, ale html).

  4. Zamiast

    echo ‘window.location.href="’.$filename.’";’;

spróbuj użyć

echo 'window.location.replace('.$filename.');';

a w linii

echo '';

spróbuj zrobić spację między średnikiem a “url=” lub ewentualnie zamknij normalnie znacznik (poprzez “>” a nie “/>”) i sprawdź czy zadziała.

  1. Jaka wersja Firefox?

(wojtek1150) #3

Dzięki za odpowiedź, Więc kolejno:

  1. Działa na chrome, IE, nie chodzi na firefoxie i teraz sprawdziłem na operze też nie.

  2. Nie przechodzi, w sensie nie wysyła maila, niby otwiera mi się plik w php, ale nie robi z nim nic (nie wysyła maila, nie wyświetla błędu, nie wyświetla powiadomienia - nie przechodzi do podstrony).

http://wojtek1150.pl/projects/event/krynica/praca.html - tu jest ten skrypt

  1. Nie ruszałem ustawień firefoxa, na innych komputerach też nie działa, więc raczej tu nie jest problem.

  2. Jak dodałem znacznik to nie przechodzi mi do docelowej podstrony.

  3. Zmieniłem, nic nie dało :frowning:

  4. Każdą przeglądarkę mam w najnowszej wersji. Firefoxa i Opera pobierałem wczoraj.

  5. Mam jeszcze mały problem, chodzi o wysyłanie i odbiór.

Wysyłam:

ąęóćśźńż

Na maila przychodzi:

Ä Ä ĂłÄ Ĺ ĹşĹ Ĺź

Plik mam zapisany w UTF-8, kożystam z notepad++


(Pablo_Wawa) #4

Co do polskich “ogonków” - w treści e-maila ustawiasz

a wysyłasz znaki zakodowane w UTF-8 (w takim kodowaniu wpisujesz je w formularzu). Musisz użyć funkcji iconv() do ich przekonwertowania.

I o co chodzi z załącznikiem

Normalnie nic nie załączasz, ale tego nie sprawdzasz - może to jest przyczyna, może PHP się wysypuje bo odwołuje się do nie ustawionej zmiennej? Włącz komunikaty o błędach i ostrzeżenia w PHP (tylko do testów).


(wojtek1150) #5

Spróbowałem, dać w ten sposób:

// Załącznik

//$nazwa_tymczasowa = $_FILES["plik1"]["tmp_name"];

$nazwa_pliku = $_FILES["plik1"]["name"];


if (is_uploaded_file($nazwa_pliku))

{

$tresclistu .="--___$znacznik==\n";

$tresclistu .="Content-Type: image/jpg\n";

$tresclistu .="Content-Disposition: attachment;\n";

$tresclistu .=" filename=\"$nazwa_pliku\"\n";

$tresclistu .="Content-Transfer-Encoding: base64\n\n";

$f = fopen($nazwa_pliku, "rb");

$dane = fread($f,filesize($nazwa_pliku));

fclose($f);

$tresclistu .= chunk_split(base64_encode($dane));

$tresclistu .="--___$znacznik==--\n";

}

Jednak ten sam skutek – Dodane 17.03.2013 (N) 23:44 – Witam, znalazłem problem z plikiem, otóż nie działał na firefoxie, bo wartość OK była false:

$ok = $_POST['ok'];


if($ok)

Wszystko działa gdy w pliku html mam:

Jednak to samo, tylko że obrazkowy, czyli:

Nie chce działać na firefoxie i operze. Wtedy w php jest false, cały kod php wygląda teraz tak:

<?php


$ok = $_POST['ok'];


if($ok)

{ 


// Odbieramy dane z formularza


$imie = $_POST['imie'];

$email = $_POST['email'];

$temat = $_POST['subject'];

$telefon = $_POST['phone'];

$zgoda1 = $_POST['checkbox'];

$zgoda2 = $_POST['checkbox2'];

$pytania = $_POST['message'];



srand((double)microtime()*10000000);

$znacznik = md5(uniqid(rand()));


////////// USTAWIENIA //////////

$filename="praca-send.html";

$odbiorca = 'wojtek1150@gmail.com'; // Adres e-mail adresata

$tytul = "Event.pl :: Podanie na stanowisko $temat"; // Temat listu

$message = 'Dziękujemy za przesłanie formularza. Informacje zostały prawidłowo dodane do naszej bazy danych.'; // Komunikat

$error = 'Wystąpił błąd podczas wysyłania formularza'; // Komunikat błędu

$zformularza = "

Imię;: $imie

E-mail: $email

Telefon: $telefon

Zgoda na: $zgoda1

Zgoda na: $zgoda2

CV: w Załączniku

Pytania: $pytania";

//////////////////////////////


// Nagłówki

$naglowki = "From: \n";

$naglowki .= "MIME-Version: 1.0\n";

$naglowki .= "Content-Type: multipart/mixed;\n";

$naglowki .= "\tboundary=\"___$znacznik==\"";



// Treść listu

$tresclistu="--___$znacznik==\n";

$tresclistu .="Content-Type: text/plain; charset=\"iso-8859-2\"\n";

$tresclistu .="Content-Transfer-Encoding: 8bit\n";

$tresclistu .="\n$zformularza\n";


// Załącznik

$nazwa_tymczasowa = $_FILES["plik1"]["tmp_name"];

$nazwa_pliku = $_FILES["plik1"]["name"];


if (is_uploaded_file($nazwa_tymczasowa))

{

$tresclistu .="--___$znacznik==\n";

$tresclistu .="Content-Type: image/jpg\n";

$tresclistu .="Content-Disposition: attachment;\n";

$tresclistu .=" filename=\"$nazwa_pliku\"\n";

$tresclistu .="Content-Transfer-Encoding: base64\n\n";

$f = fopen($nazwa_tymczasowa, "rb");

$dane = fread($f,filesize($nazwa_tymczasowa));

fclose($f);

$tresclistu .= chunk_split(base64_encode($dane));

$tresclistu .="--___$znacznik==--\n";

}


// wysłanie listu

if (mail($odbiorca,$tytul,$tresclistu,$naglowki))

{

print "".$message."";

}

else

{

print "".$error."";

}

}

else

print "ERROR";

?>

Na chromie i IE jak klikne w ten przycisk obrazkowy, to leci. W normalny też. Jednak na firefoxie i operze działa tylko ten typu SUBMIT

Jakieś sugestie?


(Pablo_Wawa) #6

Dodaj jakieś ukryte pole (