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

Zaloguj się, aby skomentować

Będziesz mógł dodać komentarz po zalogowaniu się



Zaloguj się
Zaloguj się, aby obserwować  

×