Skocz do zawartości
Zaloguj się, aby obserwować  
Gość Pokuć

[PHP]Formularz - problem z wysyłką

Polecane posty

Gość Pokuć

Mam problem z formularzem napisanym w HTML + PHP. Zwykły formularz w którym wpisuje się dane, klika Wyślij i dane idą na mojego maila. W wersji podstawowej ściągniętej z neta wszystko działało dobrze, przerobiłem nieco wygląd oraz dodałem nowe pola. Tu zaczynają się schody bo przy 9 polach wywala błędy i każe zrobić 5. Przy 5 polach działa ale nie wszystkie dane idą na maila...

 

<html>
<head>
<title>Formularz</title>
</head>
<body>
<form action="send.php" method="post">
<table>
<tr>
<td>
Imie i Nazwisko
</td>
<td>
<input type="text" name="imie" value="" /><br />
</td>
</tr>
<tr>
<td>
Ulica
</td>
<td>
<input type="text" name="ulica" value="" /><br />
</td>
</tr>
<tr>
<td>
Numer domu
</td>
<td>
<input type="text" name="numer" value="" /><br />
</td>
</tr>
<tr>
<td>
Kod
</td>
<td>
<input type="text" name="kod" value="" /><br />
</td>
</tr>
<tr>
<td>
Miejscowosc
</td>
<td>
<input type="text" name="miasto" value="" /><br />
</td>
</tr>
<tr>
<td>
Telefon
</td>
<td>
<input type="text" name="telefon" value="" /><br />
</td>
</tr>
<tr>
<td>
Adres e-mail
</td>
<td>
<input type="text" name="mail" value="" /><br />
</td>
</tr>
<tr>
<td>
Kraj
</td>
<td>
<select name="kraj">
	<option>Polska</option>
</select>

</td>
</tr>

</table>
<br />
<br />
<input type="submit" name="Wyslij" value="Wyslij" />
<input type="reset" name="Kasuj" value="Kasuj" />
</form>
</body>
</html>

 

<?php
mail("mój_maill", $_POST['imie'], $_POST['ulica'], $_POST['numer'], $_POST['kod']);
?>

 

Jak zrobić żeby wysyłało poprawnie dane ze wszystkich pól i żeby w temacie maila nie było zawartości danych z pierwszego pola tylko inny napis...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zajefajny skrypt do wysyłania spamu ]:->

 

Do rzeczy - taki bardzo podstawowy formmailer można zrobić mniej więcej w ten sposób

 

<?php
if(!isset($_POST['Wyslij']))
{
echo file_get_contents('formularz.html');
}
else
{
mail('twoj_adres@email.pl', 'Wiadomosc z formularza', strip_tags(var_export($_POST, true)));
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Polecam ten kod.

<?php 
// sprawdzamy, czy zmienna $submit jest pusta 
if (empty($_POST['submit'])) { 
// wyświetlamy formularz 
echo "<table border=\"0\"><form method=\"post\"> 
<tr> 
<td>Treść wiadomości</td> 
<td><textarea name=\"tresc\" style=\"width: 250px; height: 100px\"></textarea></td> 
</tr> 
<tr> 
<td>Imię, nazwisko lub nick</td> 
<td><input type=\"text\" name=\"imie\" style=\"width: 250px\"></td> 
</tr> 
<tr> 
<td>Adres e-mail</td> 
<td><input type=\"text\" name=\"email\" style=\"width: 250px\"></td> 
</tr> 
<tr> 
<td> </td> 
<td><input type=\"submit\" name=\"submit\" value=\"Wyślij\">  
<input type=\"reset\" value=\"Od nowa\"></td></form> 
</tr> 
</table>"; 
} 
// sprawdzamy, czy zmienne przesłane z formularza nie są puste 
elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) { 
// jeżeli powyższy warunek jest spełniony tworzona jest wiadomość 
// zmienna $message zawiera treść wiadomości 
$message = "Treść wiadomości:\n$_POST[tresc]\nWysłał: $_POST[imie]\ne-mail: $_POST[email]"; 
// zmienna $header zawiera przede wszystkim adres zwrotny 
$header = "From: $_POST[imie] <$_POST[email]>"; 
// funkcja mail() za pomocą której wiadomość zostanie wysłana 
@mail("adres@domena.pl","Wiadomosc ze strony WWW","$message","$header") 
or die('Nie udało się wysłać wiadomości'); 
// wyświetlenie komunikatu w przypadku powodzenia 
echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></div>"; 
} 
// lub w przypadku nie wypełnienia formularza do końca 
else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza!</span>"; 

?> 

Przy większej ilości dodajesz pole do elseif (empty (...))

Potem w zmiennej message dodajesz zmienną-pole.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

$header = "From: $_POST[imie] <$_POST[email]>";

Great job ;)

Po pierwsze - wywali przy raportowaniu dużo notice że stałe takie jak imie albo email nie istnieją.

Bo jeśli coś ma być stringiem, to wypadało by to w apostrofy ująć...

Drugie - wpisz sobie do pola POST/imie takie coś:

jan kowalski\nCC: nowak@spamujemy.pl\n

i zobacz sobie rezultat.

( \n to w tym zapisie kod znaku końca nowej linii - CRLF, a nie plaintekstowa wartość ukośnika i literki n )

 

I później tacy specjaliści wybitnie się dziwią, czemu ich konto zostało zablokowane za rozsyłanie spamu...

 

===

 

A odnośnie tego

W pliku formularza muszę coś zmieniać ?

Formularz via HTML kieruj do siebie samego (action=""), umieść go w pliku formularz.html, a ten mój kod umieść jako index.php

Za funkcją mail możesz dodać albo jakieś przekierowanie, albo też echo z podziękowaniami za wysłanie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Pokuć

Znalazłem w necie nieco inny formularz który bez żadnych problemów działa. Boję się tylko że jak coś w nim zmienię to całość szlag trafi

 

	<?php
if (count($_POST))
{
	////////// USTAWIENIA //////////
	$email = 'mój_mail'; // Adres e-mail adresata
	$subject = '...'; // Temat listu
	$message = 'Dziekujemy za wyslanie formularza'; // Komunikat
	$error = 'Wystapil blad podczas wysylania formularza'; // Komunikat b^3^edu
	$charset = 'iso-8859-2'; // 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">

<div>
<input name="Imie" /> &nbsp Imie<br />
<input name="Nick" /> &nbsp Nick<br>
<p>...</p>
<input type="radio" name="..." value="aaaaa" />PRZYKŁAD<br />
<p>...</p>
<input type="radio" name="..." value="asasas" />PRZYKŁAD<br />
<p>...</p>
<select name="...">
	<option selected="selected">PRZYKŁAD 1</option>
</select>
<p>Komentarz:</p>
<textarea name="Komentarz" cols="45" rows="10"></textarea>
<br /><br /><br />
<input type="submit" value="Wyslij" />
<input type="reset" value="Resetuj" />
</div>

</form>
<?php
}
?>

 

Wszystko by było dobrze gdyby nie to że nie bardzo mogę rozgryźć za co jest odpowiedzialny ten fragment skryptu:

 

 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
{
?>

 

Czy muszę coś w tym fragmencie zmienić jeżeli dokonam zmiany w części html i jeżeli tak to co ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Pokuć

Temat można zamknąć i skasować, znalazłem rozwiązanie mojego problemu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Pokuć

Znalazłem w sieci formularz, ładnie opisane co jest za co odpowiedzialne, przerobiłem co nieco i działa. Chciałem sobie zrobić zwykły formularz zamówień w którym klient podaje imię, nazwisko, adres, miejscowość, maila i po kliknięciu wyślij dane idą na maila po ówczesnym sprawdzeniu czy odpowiednie pola są wypełnione a klient dostaje informacje zwrotną o przyjętym zamówieniu i informację w jaki sposób może dokonać płatności. Nie było łatwo no ale jakoś mi się udało ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×