Autor |
Wiadomość
|
Ismena |
Wysłany: 10 Sty 2006, 20:36 Temat postu: formularz z 4 załącznikami |
|
|
Nowicjusz
Dołączył: 10 Sty 2006 Posty: 7
|
Witam
Poprosze o pomoc, znam PHP bardzo slabo , potrzebuje napisac formularz który będzie wysyłany na maila z zalacznikami. Wiem ze tego typu problem byl juz wiele razy pisany ale nigdzie nie moge znalezc skryptu dla wiecej niz jednego zalacznika.
Mam taki formularz:
Kod: | <FORM ENCTYPE ="multipart/form-data" METHOD="POST" ACTION="a.php">
<INPUT TYPE="hidden" name=MAX_FILE_SIZE" value="10000000">
DANE OSOBOWE
Imię <INPUT type="text" name="imie">
Nazwisko <INPUT type="text" name="nazwisko">
Adres e-mail <INPUT type="text" name="mail">
Telefon <INPUT type="text" name="tel"> <br>
Data urodzenia:<br> Dzień<INPUT type="text" name="dd">Miesiąc<select name="mm">
<option>Styczeń</option>
<option>Luty</option>
<option>Marzec</option>
<option>Kwiecień</option>
<option>Maj</option>
<option>Czerwiec</option>
<option>Lipiec</option>
<option>Sierpień</option>
<option>Wrzesień</option>
<option>Październik</option>
<option>Listopad</option>
<option>Grudzień</option>
</select>
Rok<INPUT type="text" name="yy"><p>
Znajomość języków
<textarea rows="5" name="jezyk" cols="80"></textarea> <br>
Doświadczenie:
<textarea rows="5" name="dos" cols="80"></textarea> <p>
<p>Uwagi:
<textarea rows="5" name="uw" cols="80"></textarea></p>
ZAŁĄCZNIKI <p>
<input type="file" name="filename0"><br>
<input type="file" name="filename1"><br>
<input type="file" name="filename2"><br>
<input type="file" name="filename3"> <br> <p>
<input type="reset" value = "Wyczyść" name="submit"><input type="submit" value = "Wyslij" name="submit">
</FORM> | _________________ Ismena |
|
Powrót do góry |
|
|
KCS |
Wysłany: Temat postu: Reklama w KCS |
|
|
|
|
Powrót do góry |
|
|
Ismena |
Wysłany: 14 Sty 2006, 12:57 Temat postu: |
|
|
Nowicjusz
Dołączył: 10 Sty 2006 Posty: 7
|
widze ze tutaj nie mam co liczyc na pomoc _________________ Ismena |
|
Powrót do góry |
|
|
Martin |
Wysłany: 14 Sty 2006, 17:53 Temat postu: |
|
|
KCS_Admin
Dołączył: 17 Cze 2005 Posty: 5566
Skąd: Piaseczno
|
Poniżej rozwiązanie jakie ja stosuję do wysłania załącznika.
formularz.php
Kod: | <FORM NAME="zalacznik" METHOD="post" ACTION="wyslij.php" ENCTYPE="multipart/form-data">
<input type="hidden" name="wyslij" value="1" />
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
<INPUT type="file" name="plik1">
<INPUT TYPE="SUBMIT" VALUE="Wyślij zalacznik">
</FORM> |
To jest przykład. Jak widzisz w formularzu podaje tylko pole do pobrania załącznika, jeżeli chodzi o dodatkowe pola to musisz sobie wstawić. Oprócz pola do pobrania załącznika - są 2 pola ukryte: jedno do sprawdzania czy do kolejnej strony wyslij.php są dane przekazywane z tej strony [zabezpieczenie przed bezpośrednim wejściem na stronę wyslij.php] i drugie pole do nadzorowania, czy załączony plik nie przekracza określonej przez Ciebie wielkości - w moim przypadku 2 MB.
wyslij.php
Kod: | <?php
//sprawdzenie czy załącznik pochodzi z formularza
if ($_POST["wyslij"]==1)
{
srand((double)microtime()*1000000);
$znacznik = md5(uniqid(rand()));
// dane o odbiorcy, nadawcy
$odbiorca="nazwa-twojego-maila@domena.pl";
$tytul="Mail z zalaczniekiem";
$nadawca = "Mail ze strony";
$nadawca_mail="mail-ze-strony@domena.pl";
// treść listu
$tresclistu = "tutaj piszesz całą treść maila";
// definicja nagłówków
$naglowki = "From: $nadawca <$nadawca_mail>\n";
$naglowki .= "MIME-Version: 1.0\n";
$naglowki .= "Content-Type: multipart/mixed;\n";
$naglowki .= "\tboundary=\"___$znacznik==\"";
// nagłówki listu
$tresc="--___$znacznik==\n";
$tresc .="Content-Type: text/plain; charset=\"iso-8859-2\"\n";
$tresc .="Content-Transfer-Encoding: 8bit\n";
$tresc .="\n$tresclistu\n";
// nagłówki i obsługa załącznika
$plik_nazwa_tmp = $_FILES["plik1"]["tmp_name"];
$plik_nazwa_oryginalna = $_FILES["plik1"]["name"];
$plik_wielkosc = $_FILES["plik1"]["size"];
if (is_uploaded_file($plik_nazwa_tmp))
{
$tresc .="--___$znacznik==\n";
$tresc .="Content-Type: image/gif\n";
$tresc .="Content-Disposition: attachment;\n";
$tresc .=" filename=\"$plik_nazwa_oryginalna\"\n";
$tresc .="Content-Transfer-Encoding: base64\n\n";
$f = fopen($plik_nazwa_tmp,"rb");
$dane = fread($f,filesize($plik_nazwa_tmp));
fclose($f);
$tresc .= chunk_split(base64_encode($dane));
$tresc .="--___$znacznik==--\n";
}
// wysłanie listu
if (mail($odbiorca,$tytul,$tresc,$naglowki))
{
print "E-mail z załącznikiem został wysłany poprawnie.";
}
else
{
print "E-mail NIE został wysłany poprawnie.
<br>Prosimy o <a href=\"javascript:history.back();\">powrót</a> i wysłanie e-maila ponownie.";
}
}
?> |
Poczytaj też o gotowych klasach do wysyłania maili:
http://phpmailer.sourceforge.net/
_________________ Martin
- Prywatny Katalog Stron
- pizzeria La Nostra zaprasza
- e-Piaseczno i okolice, to najlepsze miejsce dla e-mieszkanca powiatu piaseczynskiego
- najlepsze prywatne przedszkole w Piasecznie
- moj prywatny fotoblog ze zdj?ciami |
|
Powrót do góry |
|
|
Ismena |
Wysłany: 14 Sty 2006, 18:56 Temat postu: |
|
|
Nowicjusz
Dołączył: 10 Sty 2006 Posty: 7
|
Bardzo dziekuje za odpowiedz
Z tego co rozumiem to tą część
Kod: |
// nagłówki i obsługa załącznika
$plik_nazwa_tmp = $_FILES["plik1"]["tmp_name"];
$plik_nazwa_oryginalna = $_FILES["plik1"]["name"];
$plik_wielkosc = $_FILES["plik1"]["size"];
if (is_uploaded_file($plik_nazwa_tmp))
{
$tresc .="--___$znacznik==\n";
$tresc .="Content-Type: image/gif\n";
$tresc .="Content-Disposition: attachment;\n";
$tresc .=" filename=\"$plik_nazwa_oryginalna\"\n";
$tresc .="Content-Transfer-Encoding: base64\n\n";
$f = fopen($plik_nazwa_tmp,"rb");
$dane = fread($f,filesize($plik_nazwa_tmp));
fclose($f);
$tresc .= chunk_split(base64_encode($dane));
$tresc .="--___$znacznik==--\n";
} |
Powtarzam tyle razy ile mam załączników?? Zmieniając tylko nazwe pliku.Zaraz to wyprobuje _________________ Ismena |
|
Powrót do góry |
|
|
Ismena |
Wysłany: 14 Sty 2006, 19:17 Temat postu: |
|
|
Nowicjusz
Dołączył: 10 Sty 2006 Posty: 7
|
super wszystko dziala _________________ Ismena |
|
Powrót do góry |
|
|
Martin |
Wysłany: 14 Sty 2006, 19:20 Temat postu: |
|
|
KCS_Admin
Dołączył: 17 Cze 2005 Posty: 5566
Skąd: Piaseczno
|
Cieszę się że działa i że dostosowałeś skrypt do swoich wymagań _________________ Martin
- Prywatny Katalog Stron
- pizzeria La Nostra zaprasza
- e-Piaseczno i okolice, to najlepsze miejsce dla e-mieszkanca powiatu piaseczynskiego
- najlepsze prywatne przedszkole w Piasecznie
- moj prywatny fotoblog ze zdj?ciami |
|
Powrót do góry |
|
|
Ismena |
Wysłany: 14 Sty 2006, 20:09 Temat postu: |
|
|
Nowicjusz
Dołączył: 10 Sty 2006 Posty: 7
|
jeszcze mam jedno pytanie, prosbe jak zrobic by zawartosc przychodzaca na meila byla wyswietlana np w tabelii??? Probowalam
Kod: | $tresclistu = "$imie,$nazwisko,$tel";//itp | wstawic w tabelke ale wtedy wogole mi nie wysyła meila _________________ Ismena |
|
Powrót do góry |
|
|
Martin |
Wysłany: 14 Sty 2006, 20:26 Temat postu: |
|
|
KCS_Admin
Dołączył: 17 Cze 2005 Posty: 5566
Skąd: Piaseczno
|
Musisz zmienić w kodzie:
Kod: | $tresc .="Content-Type: text/plain; charset=\"iso-8859-2\"\n"; |
na
Kod: | $tresc .="Content-Type: text/html; charset=\"iso-8859-2\"\n"; |
Musisz poinformować, że typ nie jest TXT text/plain tylko HTML text/html
Następnie w kodzie zamiast:
Kod: | // treść listu
$tresclistu = "tutaj piszesz całą treść maila"; |
piszesz np:
Kod: | // treść listu
$tresclistu = "<table width=500 border=0 cellpadding=1 cellspacing=2 align=center style=\"font-family: Verdana; font-size: 10px;\">
<tr>
<td width=100>Imię:</td>
<td width=400><b>".$imie."</b></td>
</tr>
<tr>
<td>Nazwisko:</td>
<td><b>".$nazwisko."</b></td>
</tr>
<tr>
<td>Telefon:</td>
<td><b>".$telefon."</b></td>
</tr>
</table>"; |
Podałem Ci przykładowy kod HTML tabeli w treści wysyłanego maila. Ty zmodyfkuj już HTML wewnątrz na swoje potrzeby. _________________ Martin
- Prywatny Katalog Stron
- pizzeria La Nostra zaprasza
- e-Piaseczno i okolice, to najlepsze miejsce dla e-mieszkanca powiatu piaseczynskiego
- najlepsze prywatne przedszkole w Piasecznie
- moj prywatny fotoblog ze zdj?ciami |
|
Powrót do góry |
|
|
Ismena |
Wysłany: 14 Sty 2006, 20:33 Temat postu: |
|
|
Nowicjusz
Dołączył: 10 Sty 2006 Posty: 7
|
Kod: | $tresclistu = "<table border="0">
<tr>
<td width="18%">Imie:".$imie."</td>
<td colspan="2">Nazwisko:". $nazwisko."</td>
</tr>
<tr>
<td width="18%">mail: ".$mail."</td>
<td colspan="2">tel: ".$tel."</td>
</tr>
<tr>
<td colspan="3">data urodzenia</td>
</tr>
<tr>
<td width="18%">".$dd."</td>
<td width="56%">".$mm."</td>
<td width="26%">".$yy."</td>
</tr></table>"; | mam cos takiego i juz nie wysyla nawet nie ma informacji ze nie zostal wyslany:( _________________ Ismena |
|
Powrót do góry |
|
|
Martin |
Wysłany: 14 Sty 2006, 20:38 Temat postu: |
|
|
KCS_Admin
Dołączył: 17 Cze 2005 Posty: 5566
Skąd: Piaseczno
|
Jak już masz coś takiego to pamiętaj, że w kodzie PHP pokaże ci cudzysłowy jako błąd, przerób to na taką wersję:
Kod: | $tresclistu = "<table border=\"0\">
<tr>
<td width=\"18%\">Imie:".$imie."</td>
<td colspan=\"2\">Nazwisko:".$nazwisko."</td>
</tr>
<tr>
<td width=\"18%\">mail: ".$mail."</td>
<td colspan=\"2\">tel: ".$tel."</td>
</tr>
<tr>
<td colspan=\"3\">data urodzenia</td>
</tr>
<tr>
<td width=\"18%\">".$dd."</td>
<td width=\"56%\">".$mm."</td>
<td width=\"26%\">".$yy."</td>
</tr></table>"; |
Widzisz różnicę? Postać: width="18%" jest niedozwolona w PHP i dlatego ci nie wysyła, musi być tak - width=\"18%\"
To samo dotyczy innych parametrów HTML z cudzysłowami.
Pamiętaj też o zmianie kodu na:
Kod: | $tresc .="Content-Type: text/html; charset=\"iso-8859-2\"\n"; | _________________ Martin
- Prywatny Katalog Stron
- pizzeria La Nostra zaprasza
- e-Piaseczno i okolice, to najlepsze miejsce dla e-mieszkanca powiatu piaseczynskiego
- najlepsze prywatne przedszkole w Piasecznie
- moj prywatny fotoblog ze zdj?ciami |
|
Powrót do góry |
|
|
Ismena |
Wysłany: 14 Sty 2006, 20:46 Temat postu: |
|
|
Nowicjusz
Dołączył: 10 Sty 2006 Posty: 7
|
Nio to teraz jest juz wszystko dobrze.
Jeszcze raz bardzo dziekuje za pomoc:) _________________ Ismena |
|
Powrót do góry |
|
|
lothkan |
Wysłany: 22 Lip 2007, 10:12 Temat postu: |
|
|
Nowicjusz
Dołączył: 22 Lip 2007 Posty: 2
|
Ismena napisał: | Bardzo dziekuje za odpowiedz
Z tego co rozumiem to tą część
Kod: |
// nagłówki i obsługa załącznika
$plik_nazwa_tmp = $_FILES["plik1"]["tmp_name"];
$plik_nazwa_oryginalna = $_FILES["plik1"]["name"];
$plik_wielkosc = $_FILES["plik1"]["size"];
if (is_uploaded_file($plik_nazwa_tmp))
{
$tresc .="--___$znacznik==\n";
$tresc .="Content-Type: image/gif\n";
$tresc .="Content-Disposition: attachment;\n";
$tresc .=" filename=\"$plik_nazwa_oryginalna\"\n";
$tresc .="Content-Transfer-Encoding: base64\n\n";
$f = fopen($plik_nazwa_tmp,"rb");
$dane = fread($f,filesize($plik_nazwa_tmp));
fclose($f);
$tresc .= chunk_split(base64_encode($dane));
$tresc .="--___$znacznik==--\n";
} |
Powtarzam tyle razy ile mam załączników?? Zmieniając tylko nazwe pliku.Zaraz to wyprobuje |
hmm a u mnie to jakoś nie działa, zmieniam z "plik1 na plik2" tak samo w formularzu jak mniemam i wysyła się tylko 1 załącznik ... co robię źle ?
Sprawdzałem wysyłając 1 załącznik i np email zajmuje wówczas 72KB a jak wyśle 2 załączniki rzekomo to dochodzi jeden załącznik (pierwszy) a drugiego nie ma i email zajmuje 140KB czyli gdzieś popełniam błąd ale nie mam pojęcia gdzie ??
Będę wdzięczny za pomoc
Pozdrawiam |
|
Powrót do góry |
|
|
mkom6 |
Wysłany: 06 Wrz 2007, 01:45 Temat postu: |
|
|
Nowicjusz
Dołączył: 06 Wrz 2007 Posty: 1
|
Świetny skrypt. Właśnie tego szukałem, bo wysyłanie maila z załącznikiem to dla mnie nowość.
Niestety chciałęm wysyłać w mailu do 3 załączników i mam problem z modyfikacją skryptu wyslij.php
Męczyłem się, zmieniałem skrypcik, ale jak już to przychdzoi jeden załącznik
Pomoże ktoś
michał |
|
Powrót do góry |
|
|
toni |
Wysłany: 26 Paź 2007, 21:39 Temat postu: |
|
|
Nowicjusz
Dołączył: 26 Paź 2007 Posty: 1
|
Witam - jestem poczatkujacy wiec wybaczcie moje pytanie... Ten skrypt bardzo mi sie przydal i jest w deche, co jednak zrobic z plikiem ktory on sciagnie i wysyla na maila (czy ten plik zostaje w bazie danych? czy automatycznie sie kasuje?) Dziekuwa za odp. |
|
Powrót do góry |
|
|
Martin |
Wysłany: 27 Paź 2007, 15:28 Temat postu: |
|
|
KCS_Admin
Dołączył: 17 Cze 2005 Posty: 5566
Skąd: Piaseczno
|
toni napisał: | Ten skrypt bardzo mi sie przydal i jest w deche |
Skoro skrypt ci się przydał, to nie testowałeś jak on działa?
toni napisał: | co jednak zrobic z plikiem ktory on sciagnie i wysyla na maila (czy ten plik zostaje w bazie danych? czy automatycznie sie kasuje? |
1. W tym skrypcie wskazujesz plik jaki znajduje się u ciebie na dysku.
2. Plik wysyłany jest na wskazany mail.
3. Plik nie jest zapisywany w bazie danych.
4. Skrypt nie kasuje pliku. _________________ Martin
- Prywatny Katalog Stron
- pizzeria La Nostra zaprasza
- e-Piaseczno i okolice, to najlepsze miejsce dla e-mieszkanca powiatu piaseczynskiego
- najlepsze prywatne przedszkole w Piasecznie
- moj prywatny fotoblog ze zdj?ciami |
|
Powrót do góry |
|
|
|