Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dziwny problem z prostym formularzem mejlowym
Forum PHP.pl > Forum > PHP
mojito
Witam,
napisałem sobie skrypt prostego formularza do wysyłania mejli ze strony.
W końcu wszystko działa.
Ale tylko na stronie głównej (index.html)
na pozostałych stronach nie - dane nie są w ogóle pobierane z pól formularza. Mejl przychodzi pusty.

questionmark.gif

Nie mam nawet zielonego pojęcia jak szukać rozwiązania do czegoś takiego

Dziękuję
youngCoder
Proszę.

Kod, kod, kod.
mojito
no tak... =]

Kod
<head>
    <!-- żeby były polskie znaki -->
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
    
    <!-- ostylowanie wyświetlania wiadomości -->
    <style type="text/css">
        
        html {
        background-color: #f0f0f0;
        }
        
        div {
            text-align: center;
            font-family: Calibri, Arial, sans-serif;
            font-size: 14pt;
            font-weight: bold;
            margin: auto;
            margin-top: 6em;
            padding: 3em;
            border: solid 1px #7d7d7d;
            background: url(../images/primary_bg.png) repeat-x;
            width: 40%;
            overflow: hide;
            -moz-border-radius: 20px;
            -webkit-border-radius: 20px;
        }
        
        div a {
        text-decoration: none;
        color: #898989;
        }
        
        div a:hover {
        text-decoration: none;
        color: #f15a22;
        }
        
    </style>
    
</head>


    <!-- skrypt formularza -->
<?php

if (empty($_GET['name'])) {
    exit ("
        <div>
            <p>Podaj swoje imie i nazwisko</p>
            <a href='../index.html'>Powrót</a>
        </div>
        ");
    }

if(empty($_GET['mail']) && (empty($_GET['phone']))) {
    exit ("
        <div>
            <p>Podaj numer telefonu kontaktowego lub adres e-mail</p>
            <a href='../index.html'>Powrót</a>
        </div>
    ");
    }
    
$wiadomosc = "
Imię: ".$_GET['name']."
Firma: ".$_GET['firma']."
Telefon kontaktowy: ".$_GET['phone']."
Adres e-mail: ".$_GET['mail']."
";

$tematyka = "ze strony Activnetu";

mail ("mojito@agencja-mojito.pl", $tematyka, $wiadomosc);

    echo "
        <div>
            <p>Dziekujemy za wysłanie wiadomości. <br /> Skontaktujemy się w ciągu 48h.</p>
            <a href='../index.html'>Powrót</a>
        </div>
    ";
    
?>


a sam formularz w htmlu wygląda tak:

Kod
                            <form action="php/sendmail.php" method="get" enctype="text/plain">
                                
                                <div>
                                    <label for="name">Imię i Nazwisko</label>
                                    <input id="name" type="text" name="name" value="" size="15" maxlength="40" />
                                </div>
                                
                                <div>
                                    <label for="firma">Firma</label>
                                    <input id="firma" type="text" name="firma" value="" size="15" maxlength="40" />
                                </div>                                
                                
                                <div>
                                    <label for="phone">Tel. Kontaktowy</label>
                                    <input id="phone" type="text" name="phone" value="" size="15" maxlength="40" />
                                    </div>
                                
                                <div>
                                    <label for="mail">E-mail</label>
                                    <input id="mail" type="text" name="mail" value="" size="15" maxlength="40" />
                                </div>
                            
                                <div>
                                    <input id="submit" name="submit" class="submit" type="submit" value="wyślij" />
                                </div>
                            
                            </form>


i jeszcze jedno przy okazji pytanie: dlaczego nie działa tu $_POST, tylko $_GET ?
l0ud
Bo przecież zadeklarowałeś w formularzu, że ma używać własnie get'a zamiast post'a:
Kod
  <form action="php/sendmail.php" method="get"
mojito
no to wiem...
ale zastanawia mnie dlaczego nie zadziała metoda POST, kiedy ją właśnie zadeklarowałem w formularzu i nią pobierałem z tego formularza dane w php. Jak było POST, to w mejlu przychodziły puste pola.
Istalacar
zamieniasz w index.html z:
  1. <form action="php/sendmail.php" method="get" enctype="text/plain">

na
  1. <form action="php/sendmail.php" method="POST" enctype="text/plain">

i w kodzie zamieniasz każde $_GET na $_POST czyli z:
  1. <?php
  2. if (empty($_GET['name'])) {
  3. ?>

na
  1. <?php
  2. if (empty($_POST['name'])) {
  3. ?>


Do testów zasugerowałbym wpisanie w kodzie tuż obok mail() wpisać print_r($_POST); - to Ci pozwoli sprawdzić czy dane dochodzą czy nie.
mojito
Dzięki za wskazówkę, ale tak właśnie miałem kiedy mi nie działało. Próbowałem różnych rzeczy i w końcu nieco zrezygnowany zamieniłem wszystkie POST na GET i zaczęło działać. Dane dochodziły. Ale tylko ze strony głównej. (Dodam od razu, że kod html dla formularza jest na każdej podstronie taki sam smile.gif )

A to, czy dane dochodzą czy nie widzę już na stronie, bo nie da się po prostu wysłać formularza - jeżeli zmienne są puste skrypt przerywa działanie. I tak się właśnie dzieje na podstronach. Wypełniam pola i wyświetla się komunikat, że są puste.

Można samemu się przekonać: i klikając tutaj przejść na stronę testową i wejść na 'oferta', realizacje' albo 'o firmie'.
Istalacar
kod na tamtej stronie odrobinę różni od tego który nam podałeś:
  1. <input id="name" name="Imię i nazwisko" value="" size="15" maxlength="40" type="text">
  2. </div>
  3. <div>
  4. <label for="firma">Firma</label>
  5. <input id="firma" name="Firma" value="" size="15" maxlength="40" type="text">
  6.  
  7. </div>
  8. <div>
  9. <label for="phone">Tel. Kontaktowy</label>
  10. <input id="phone" name="Tel. kontaktowy" value="" size="15" maxlength="40" type="text">
  11. </div>
  12. <div>
  13. <label for="mail">E-mail</label>
  14. <input id="mail" name="E-mail" value="" size="15" m
(tylko część kodu, nie chciało mi się poprawiać ani brać całości). Błąd który mi się mocno rzucił w oczy to: name="Imię i nazwisko", 1) w name staraj się unikać polskich liter, 2) ja osobiście mam w nawyku zamiast spacji używanie "_" - na wszelki wypadek, 3) jeśli w kodzie php odbierasz tak jak podałeś wyżej "name" to nie dziw się że nie może znaleźć "Imię i nazwisko"
mojito
No to się popisałem... axesmiley.png

chyba za długo po prostu nad tym siedzę i zapomniałem przekopiować kod jak już poprawiłem błędy w pliku index.html.

Ale to mnie nauczy korzystać z include winksmiley.jpg

Wielkie dzięki za otwarcie oczu.

Pozdrawiam.

P.S. Ale dalej nie wiem dlaczego metoda POST nie działała... pytanie tak dla czystej satysfakcji zdobywania wiedzy
teleimpact
A ni prosciej bedzie wstawic ponizszy kod?
Albo zaincludowac twoj do wszystkich poddstron?
Kod PHP mozna tez wstawic do pliku html...
uzywajac opcji SCRIPT

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>&nbsp;</td>
<td><input type=\"submit\" name=\"submit\" value=\"Wyślij\">&nbsp;
<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("mail@znajdzmpe.info","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>";

?>
mojito
nie byłoby prościej,
bo już wszystko działa winksmiley.jpg

dzięki
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.