Wyświetlanie wyniku skryptu PHP w DIV

0

Witam, mam na swojej stronie formularz, ktory wysyła maile. Aby lepiej to zobrazować w skrócie pokażę jak to wygląda:

index.html

 

<html>
//style dla strony
//skrypt js
<body>

 <div x>  // DIV ten ogolnie jest schowany i wysuwa sie z boku ekranu po nacisnieciu przycisku dzieki js
 <form method="post" action="mail.php"> TRESC FORMULARZA </form> 
</div>
</body>
</html>

mail.php

 

<html>
//style css dla strony FORMULARZ wysłany
skrypt js
<body>
<?php> 
skrypt wysyłający mail
if mail=true
echo: kod strony potwierdzający wysłanie
?>
</body>
</html>

Zmierzam do tego, że po wysłaniu formularza kod potwierdzający jego wysłanie otwiera sie w nowym oknie, a zależałoby mi żeby zrobił to w tym samym Divie w ktorym była ankieta, przejął jej pozycje, tło itd.

0

Specem od PHP ani back-endu zdecydowanie nie jestem, ale to akurat wiem jak zrobić. Potrzebujesz niestety dodatkowej wiedzy z Javascriptu, żeby coś takiego wykonać.

  1. Musisz w JSie napisać kod, który będzie reagował na zdarzenie jakim jest wysłanie formularza (submit). Pamiętaj żeby na końcu zwrócić false, żeby submit się NIE WYKONAŁ.
  2. Tam musisz wstawić zapytanie AJAX (np. post()), które będzie do mail.php wysyłać parametry formularza.
  3. W mail.php robisz co masz zrobić z parametrami uzyskanymi z POSTa, skladasz jakoś tą wiadomość, wysyłasz ją (dobrze by było się zabezpieczyć przed mail injection, zrobić walidację,itp. ale to potem).
  4. Robisz echo z potwierdzeniem, bądź błędem wysłania maila.

I teraz to co chcesz uzyskać:
5. AJAX 'przechwytuje' to co jest wyechowane :D I za pomocą JSa/AJAXu mozesz tą wiadomość wpisać do dowolnego diva, p, nagłówka, jakkolwiek sobie tam wymyślisz jak zaaranżować dowolny element po otrzymaniu potwierdzenia.

Wygoogluj sobie w necie AJAX i metody post(), get(), ajax() z jQuery. Najłatwiej zrozumieć na nich sens tych operacji.

No i jeśli nie wiesz jak działa protokół HTTP to też by się przydało poczytać trochę.

0

Yyy a nie prosciej uzyc klas css do opakowania tego i wyswietlenia w ten sam sposob? Ew formularz i posta od biedy obsluzyc tym samym plikiem. Ale to tez trzeba bedzie ostylowac tak samo. Wiec dla mnie to formularz opakowac w style a potem w drugim pliku wyswietkic dane tak samo opakowane . Bez ajaxow itp

1

No tak ale wtedy następuje przekierowanie do nowej strony, a przy użyciu AJAXa masz dynamicznie zmianę zawartości bez przekierowania. No ale wiadomo, każdy zrobi sobie jak chce.

Jakbyś chciał tak jak ja mówiłem to w JS wtedy robisz w podobny do tego sposób:

            $("#mailForm").submit(function()
            {
                //AJAX request
                $.post(
                    'mail.php',
                    $(this).serialize(),
                    function(data){
                        $("#form").html("<p>" + data + "</p>");
                    }
                );

                return false; 
            });

Działa na pewno. Ale jeśli robie coś niezgodnie ze standardami to niech jakiś pro backendowiec mnie poprawi :)

0

Poradziłem sobie, mail sie wysyła, strona ładnie sie odświeża.

$(function() {
  $(".arbuttonwin").click(function() {
    // validate and process form here
    var email = $("input#email").val();
    var opis = $("input#opis").val();
    var dataString = 'email=' + email + '&opis=' + opis;
        $.ajax({
      type: "POST",
      url: "mail.php",
      data: dataString,
      success: function() {
        //display message back to user here
        $('#ar').load("ankieta-sukces-right.html");
 }
    });
    return false;
  });
});

Teraz pytanie odnośnie funkcji mail()

<?php
$email=$_POST['email'];
$opis=$_POST['opis'];
$win="chce wygrac";
mail("[email protected]",$win,$opis, $email );

?>

Temat maila wysyła się poprawnie. Mam dwa inne problemy: Nadawcą jest adres serwera, a nie adres email wpisany w ankietę. Drugi problem to opis, który miał być wklejony w treść maila. Zamiast niego pojawia sie tekst 'undefined'. W formularzu opis jest jako textarea.

1

Nie umieszczasz nagłówka, w którym powinien się pojawić e-mail.

Spójrz na example 2: http://www.w3schools.com/php/func_mail_mail.asp

0

OK, juz zauważyłem. Jednak problem z textarea wciąż występuje. (opisany wyżej po edycji)

0

Sprawdź alertami albo console.logiem co masz w JSie w zmiennej opis. Jeśli okej to można odrzucić błąd w tej warstwie.

Jaki błąd powoduje, że masz undefined - nie wiem. Wygląda na to, że pierwszy parametr się przekazuje a drugi jakoś nie za bardzo. Co ja bym zrobił? Spróbowałbym pewnie przesłać parametry nie w postaci zserializowanej ręcznie tylko jako obiekt, np. data: {pierwsze: a, drugie: b } . No i ja korzystam raczej z metod get(), post(), bo wydają mi się dużo łatwiejsze w pisaniu. Zawsze możesz spróbować dostosować swój formularz do tego co Ci napisałem parę postów wyżej. Wtedy korzystasz z $(this).serialize() i ta funkcja sama Ci generuje ten ciąg parametrów. No ale musisz wtedy użyć submit na formularzu a nie click.

1

@SzeWa:

var opis = $("input#opis").val();

Sam mówiłeś, że to textarea, dlaczego więc w selektorze jest input? ;)

Edit:
Do wysyłki maili NIE korzystaj z funkcji mail. Zapoznaj się z biblioteką phpMailer

1

@SzeWa: Jak piszesz na temat, to pisz w poście, nie w komentarzu:

Funkcja mail:

  • czasem nie działa
  • jest kiepsko konfigurowalna
  • niełatwo jest dodać tym załączniki/embedowane obrazki, odpowiednie nagłówki (Reply-To itd)
  • przeszukaj to forum - jest dziesiątki tematów "nie działają polskie znaki w mailach", które kończą się moim "użyj phpmailer" ;] z pl znakami też bywają spore problemy ze względu na to jak działa protokół e-mail (można wspisać część treści w jednym kodowaniu, część w drugim itd.)
  • nie użyjesz obcego SMTP poprzez mail() (np. nie wyślesz tym wiadomości ze swojego konta na gmail czy innego dostawcy)
  • mail() potrafi zwrócić true, chociaż nie wysyła maila

Fajna biblioteka phpMailer uporządkowuje wszystkie te problemy

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