Modyfikacja skryptu do kontaktu

0

Witam,
tworzę własną stronę internetową. PHP nie znam kompletnie, a zależy mi na formularzu kontaktowym bez klienta poczty. Znalazłem w internecie działający skrypt.

<?php
if (count($_POST))
{
	////////// USTAWIENIA //////////
	$email = '[email protected]';	// Adres e-mail adresata
	$subject = 'Kontakt';	// Temat listu
	$message = 'Dziękujemy za wysłanie formularza';	// Komunikat
	$error = 'Wystąpił błąd podczas wysyłania formularza';	// Komunikat błędu
	$charset = 'utf-8';	// Strona kodowa
	//////////////////////////////
	
	$head =
		"MIME-Version: 1.0\r\n" .
		"Content-Type: text/plain; charset=$charset\r\n" .
		"Content-Transfer-Encoding: 8bit";
	$body = '';
	foreach ($_POST as $name => $value)
	{
		if (is_array($value))
		{
			for ($i = 0; $i < count($value); $i++)
			{
				$body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value[$i]) : $value[$i]) . "\r\n";
			}
		}
		else $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value) : $value) . "\r\n";
	}
	echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message : $error;
}
else
{
?>
<form action="?" method="post">
<input type="text" name="name placeholder="Nick" />
<input type="email"  name="mail" placeholder="E-mail" />
<input type="text" name="telefon" placeholder="Telefon" />
<textarea type="text" class="tresc" name="tresc" placeholder="Treść"></textarea>
<input type="file"  />
<input class="send" type="submit" value="WYŚLIJ">
</form>
<?php
}
?>

Prosiłbym Was jedynie o pomoc przy jego modyfikacji. Obecna wersja nie wysyła załączników oraz po wysłaniu pola formularza zostają ukryte, a w ich miejscu wyświetla się wiadomość o wysłaniu. Chciałbym aby działał ten załącznik, a po wysłaniu pojawiało się okienko (jak "alert" z js) z informacją o wysłaniu, a formularz czyścił się. Pewnie dużo roboty z tym nie ma, ale dla mnie, jako kompletnego laika to czarna magia :/ Stąd prośba o wszelaką pomoc.

0

@Webowiec
To jak możesz to podeślij swoją wersję :) Podstawa to, żeby formularz nie znikał. Będę wdzięczny za pomoc :)

0

localhosta :/ Jestem w trakcie załatwiania normalnego hostingu

0

Proszę:

oto kod, jeszcze bez wysyłania załączników

<?php

////////// USTAWIENIA //////////
$email = '[email protected] ;)';    // Adres e-mail adresata
$subject = 'Kontakt';    // Temat listu
$message = 'Dziekujemy za wyslanie formularza';    // Komunikat
$error = 'Wystapil blad podczas wysylania formularza';    // Komunikat bledu
$charset = 'utf-8';    // Strona kodowa
//////////////////////////////

if (isset($_POST['tresc']))
{ 
    $head =
        "MIME-Version: 1.0\r\n" .
        "Content-Type: text/plain; charset=$charset\r\n" .
        "Content-Transfer-Encoding: 8bit";
    $body = '';
    foreach ($_POST as $name => $value)
    {
        if (is_array($value))
        {
            for ($i = 0; $i < count($value); $i++)
            {
                $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value[$i]) : $value[$i]) . "\r\n";
            }
        }
        else $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value) : $value) . "\r\n";
    }
    if(mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head)) {
		header('Location: form.php?msg=1');
	}
	else {
		header('Location: form.php?err=1');
	}
}
else
{
	if(isset($_GET['err']))
		if($_GET['err']==1) echo $error;
	if(isset($_GET['msg']))
		if($_GET['msg']==1) echo $message;
?>
<form action="form.php" method="post">
	<input type="text" name="nick" placeholder="Nick" />
	<input type="email" name="email" placeholder="E-mail" />
	<input type="text" name="telefon" placeholder="Telefon" />
	<textarea type="text" class="tresc" name="tresc" placeholder="Tresc"></textarea>
	<input type="file" name="plik" />
	<input class="send" type="submit" value="WYSLIJ">
</form>
<?php
}
?>

jak to rozgryzę, dam znać ;]

0

Dzięki wielkie!
Czekam w napięciu co wyjdzie z załącznikami :)

1

Witaj.

Musiałem trochę pozmieniać kod. Dodałem biblioteke phpmailer, bo jest zwyczajnie polecana na necie do wysyłania maili. W przypadku korzystania z tej bibl. masz pewność, że nadawcą e-maila będzie wskazany przez Ciebie adres, a nie np. domyślny adres serwera.

W sumie 4 pliki:

form.php

 
<?php

////////// USTAWIENIA //////////
$message = 'Dziekujemy za wyslanie formularza';    // Komunikat
$error = 'Wystapil blad podczas wysylania formularza';    // Komunikat bledu
//////////////////////////////

if(isset($_GET['err']))
		if($_GET['err']==1) echo $error;
	if(isset($_GET['msg']))
		if($_GET['msg']==1) echo $message;
?>
<form action="send.php" method="post" enctype="multipart/form-data">
	<input type="text" name="nick" placeholder="Nick" />
	<input type="email" name="email" placeholder="E-mail" />
	<input type="text" name="telefon" placeholder="Telefon" />
	<textarea class="tresc" name="tresc" placeholder="Tresc"></textarea>
	<input type="file" name="plik" />
	<input type="submit" name="send" value="WYSLIJ">
</form>

send.php

Tutaj musisz uzupełnić brakujące zmienne, czyli From, Host, Username i Password - nie wiem czy bez usera i hasla zadziała, nie testowałem.

 
<?php

/* send.php */

if (isset($_POST['send'])) {
	$plik = $_FILES['plik']['name']; // pobranie nazwy pliku
	$plik_tmp = $_FILES['plik']['tmp_name']; // tymczasowy folder zapisu (na serwerze)

	require("class.phpmailer.php"); // wskazanie klasy PhpMailer
	$mail = new PHPMailer(); // utworzenie nowego egzemplarza klasy

	$mail->PluginDir = ""; // folder biblioteki
	$mail->From = '[email protected]'; // email nadawcy
	$mail->FromName = 'Imię i nazwisko'; // podpis nadawcy (np: imię i nazwisko)
	$mail->Host = "poczta.o2.pl"; // np.: smtp.wp.pl, poczta.o2.pl
	$mail->Mailer = "smtp"; // protokół SMTP
	$mail->Username = "USER"; // user konta pocztowego
	$mail->Password = "PASS"; // haslo konta pocztowego
	$mail->SMTPAuth = true; // autoryzacja do serwera poczty (true = wymagana)
	//$mail->SetLanguage("pl", "language/"); // język w jakim będą wyświetlane ewentualne komunikaty błędów
	$mail->Subject = 'Kontakt'; // temat wiadomości
	$mail->CharSet = 'utf-8'; // kodowanie wiadomości
	$mail->IsHTML(true); // formatowanie HTML
	$mail->Body = 'imie='.$_POST['nick'].'<br />email='.$_POST['email'].'<br />telefon='.$_POST['telefon'].'<br />TRESC=<br />'.$_POST['tresc'].'<br />'; // treść wiadomości
	$mail->AddAddress($_POST['email'],""); // adres odbiorcy  	
	$mail->AddAttachment($plik_tmp, $plik); // dołączamy plik
      
	if (!$mail->Send())
	{
		header('Location: form.php?err=1'); // przekierowanie
	} else {
		$mail->ClearAddresses();
		$mail->ClearAttachments();
		header('Location: form.php?msg=1'); // przekierowanie
	}

}

?>

Ciało wiadomości możesz dowolnie edytować (zmienna Body).

Pliki biblioteki:
class.phpmailer.php
class.smtp.php

dodałem do załącznika, aby nie śmiecić wątku, bo "trochę" tego jest :) Umieszczasz je w katalogu razem z plikiem formularza. To chyba tyle. Oczywiście zadziała Ci jedynie na prawdziwym serwerze.

Pozdrawiam

0

Wszystko pięknie działa, dziękuję za pomoc :)
Ewentualnie ma ktoś może jakieś pomysły na zmodyfikowanie tego, tak żeby stronka się nie przeładowywała?

0

Użyć ajaxa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1