Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: formularz - problem (php)
Forum PHP.pl > Forum > Przedszkole
anderson20
Mam problem z formularzem. Co wejdę na stronę lub ją odświeżę to mi zawsze wysyła pustą wiadomość na maila. Jest dobrze tylko w jednym wypadku a mianowicie gdy napiszę wiadomość i nacisnę wyślij to mi wysyła wiadomość tą która napisałem.
Kontakt.php - strona którą widzi odwiedzający stronę
Cytat
<?php require_once("mailer.php") ?>

<form action="<?php echo $_SERVER[’PHP_SELF’]; ?>" method="post">
<b>Twój e-mail: </b><input type="text" name="meil" size="40"><br /><br />
<b>TREŚĆ:</b><br />
<textarea name="message" cols="50" rows="15"></textarea><br /><br />
<input type="submit" value="Wyślij">
<input type="reset" value="Wymaż">
</form>

<?php
$mailer = new MicroMailer();
$mailer->email = isset($_POST["meil"]) ? $_POST["meil"] : "";
$mailer->message = isset($_POST["message"]) ? $_POST["message"] : "";
if ($mailer->send()) {
echo "Wiadomość wysłana!";
} else {
echo "Błąd podczas wysyłania wiadomości!";
}
?>
mailer.php - strona ukryta
Cytat
<?php
class MicroMailer{
var $to = "moj_mail(małpa)o2.pl";
var $subject = "Wiadomo&para;ć ze strony www";
var $message = "";
var $email = "";
var $header = "";
var $type = "text/plain";
var $characterSet = "iso-8859-2";


function createHeader(){
$from = "From: <$this->email>\r\n";
$params = "MIME-Version: 1.0\r\n";
$params .= "Content-type: $this->type; charset=$this->characterSet\r\n";

$this->header = $from.$params;
return $this->header;
}

function send(){
$this->createHeader();
if (@mail($this->to,$this->subject,$this->message,$this->header)){
return true;
} else {
return false;
}
}

}
?>


Pisałem na elektrodzie oraz na forum pewnego serwisu odnosnie php, ale nikt nie wie co dodać do powyższego kodu, aby było dobrze a nie znam na tyle angielskiego by pytać na forach zagranicznych. Może tutaj ktoś by wiedział co dodać, aby nie wysyłało pustych wiadomości....Jak można prosić o zmodyfikowany powyższy kod z uwzględnieniem poprawki na to odświeżanie by pustych wiadomości nie wysyłało... byłbym wdzięczny
wookieb
Kod
if(isset($_POST['message']))
{
                                       $mailer = new MicroMailer();
                                       $mailer->email  = isset($_POST["meil"]) ? $_POST["meil"] : "";
                                       $mailer->message    = isset($_POST["message"]) ? $_POST["message"] : "";
                                       if ($mailer->send()) {
                                          echo "Wiadomość wysłana!";
                                       } else {
                                          echo "Błąd podczas wysyłania wiadomości!";
                                          }
}
anderson20
nic nie dało. Jak kto może to niech pomoże bo to niesłychane że nikt w polsce nie wie jak zrobić formularz.smile.gif
wookieb
Niemożliwe, żeby ci wysłało. Napewno dochodzą starsze. Przecież jak wchodzisz na strone to posta masz pustego i jest w nim coś dopiero jak wyślesz formularz. Zapodaj cały kod jaki masz z moimi poprawkami i czy wczesniej w poscie coś nie definiujesz.
Przed mailerem daj var_dump($_POST); i wklej nam tu tutaj w 2 sytuacjach. Gdy wchodzisz na strone i gdy wysyłasz formularz.
anderson20
Już jest ok. A wysyłało pustego posta bo na stronie którą widzi internauta i na której jest formularz był kod php a tak nie wolno robić formularzu bo takto wysyła puste maile co odświeży się stronę. Sposób jest taki, że na stronie którą widzi internauta daje się kod formularza i jako action pisze się action="costam.php". Następnie w pliku costam.php definiuje się funkcję mail, co ma robić po wysłaniu formularza, co ma robić w przypadku gdyby wystapił błąd no i określa się że jak wyśle się formularz to żeby przekierował na stronę jakąś np. o nazwie potwierdzenie.htm w ten sposób:
header("Location: http://www.costamcostamcostam.pdg.pl/potwierdzenie.htm");
die();
a gdyby wystapił błąd to location dajemy na stronę którą widzi internauta (aby ponownie mógł wysłac wiadomość, tutaj jeszcze nie doszedłem do tego czy też musi być funkcja die() bo aby treść maila nie znikła gościowi, aby jej jeszcze raz nie musiał wpisywać)

Następnie na stronie potwierdzenie.htm dajemy przycisk POWRÓT i pod nim adres strony która widzi internauta. I jak gość kliknie na POWRÓT to mu się wyświetli ta strona niewypełniona. Istnieje też sposób jakiś (jeszcze nie wiem jaki) co na parę sekund się strona potwierdzenie.htm wyświetla i po tych paru sekundach strona która widzi internauta.

W moim przypadku doszedł jeszcze jeden plik mailer.php, w którym była zdefiniowana klasa i do którego odwoływał się plik costam.php (ten który jest w action="costam.php"). Ale to nie musi być tej klasy, można tak zrobić kod, że nie definiuje się klasy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.