Tani hosting

Formularz wysyłania wiadomości - monit o powodzeniu
kokobambo Offline
Użytkownik

Liczba postów: 8
Reputacja: 0
Post: #1
Formularz wysyłania wiadomości - monit o powodzeniu 09-12-2016 22:55
Panowie mam formularz HTML

<form id="contact-form" method="post" action="contact.php" role="form">


który wywołuje poniższy skrypt php do wysyłki maila (wszystko działa mam na testy PAPERCUT, który sprawdza czy maile są wysyłane więc OK)

Tylko jak zmodyfikować ten kod php aby ponownie otwierał stronkę HTML z formularzem i tam wyrzucał informację, że mail został wysłany? Teraz ładuje mi skrypt contact.php i na białym tle wyrzuca info o powodzeniu. Wiem, że należałoby ponownie wczytać poprzez może require_once lub include, ale jak to robię to coś mi nie wychodzi.

<?php

 
// configure
$from = 'Demo contact form <demo@domain.com>';
$sendTo = 'Demo contact form <demo@domain.com>';
$subject = 'New message from contact form';
$fields = array('name' => 'Name', 'surname' => 'Surname', 'phone' => 'Phone', 'email' => 'Email', 'message' => 'Message'); // array variable name => Text to appear in email
$okMessage = 'Contact form successfully submitted. Thank you, I will get back to you soon!';
$errorMessage = 'There was an error while submitting the form. Please try again later';
 
// let's do the sending
 
try
{
$emailText = "You have new message from contact form\n=============================\n";
 
foreach ($_POST as $key => $value) {
 
if (isset($fields[$key])) {
$emailText .= "$fields[$key]: $value\n";
}
}
 
mail($sendTo, $subject, $emailText, "From: " . $from);
 
$responseArray = array('type' => 'success', 'message' => $okMessage);
}
catch (\Exception $e)
{
$responseArray = array('type' => 'danger', 'message' => $errorMessage);
}
 
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$encoded = json_encode($responseArray);
 
header('Content-Type: application/json');
 
echo $encoded;
}
else {
echo $responseArray['message'];
}



Tak więc skrypt php ma otworzyć ponownie plik HTML np. contact.html, i w odpowiednim miejscu wyświetlić komunikat powodzenia ze skryptu contact.php tylko ktoś podpowie jak też w HTMLu to zakodować aby przejął ten komunikat ze skryptu php?
 
Cytuj
Diabeł Online
Użyszkodnik


Liczba postów: 777
Reputacja: 666
Quik Offline
Administrator

Liczba postów: 741
Reputacja: 85
Post: #2
RE: Formularz wysyłania wiadomości - monit o powodzeniu 12-12-2016 11:53
Prościej byłoby załadować plik wysyłania maila do tego samego pliku gdzie jest formularz. SAMĄ logikę wysyłania maila zapisz do mail.php i załaduj przez require_once do contact.php, gdzie będzie znajdował się html tej podstrony.


Przykład:

mail.php:

Kod:
<?php
// Wysyłanie maila
(..)
if(mail(...))
    $message = "OK";
else
    $message = "FAIL";

contact.php
Kod:
<?php require_once('mail.php'); ?>
<!DOCTYPE html>
<html>
    <head>...</head>
    <body>
        <?php if(isset($message)): ?>
        <div><?= $message ?></div>
        <?php endif; ?>
        <form id="formularz" method="post" action="contact.php">...</form>
    </body>
</html>

Pomogliśmy? Uszanuj to i nie usuwaj stopki!
WWW Cytuj
kokobambo Offline
Użytkownik

Liczba postów: 8
Reputacja: 0
Post: #3
RE: Formularz wysyłania wiadomości - monit o powodzeniu 12-12-2016 23:18
Jeśli zrobię tak jak pokazałeś to ładuje się skrypt do wysyłania maili i nawet jak otwieram pusty formularz to próbuje wysyłać maila.

Ciekawie jest zrobione to tutaj:
http://demo.websta.pl/formularz/

jak się najeżdża na przycisk to nie widać o jaki plik chodzi, a jak skrypt się wykona to przenosi do tej samej lokalizacji i nie da się wysłać ponownie maila, (nie analiozwałem tego dokładnie jak to jest zrobione) a  w moich kombinacjach jak wyślę to przenosi mnie z np. contakt.html, do contact.php gdzie jest skrypt wysyłania, ale on wczytuje plik index.html z tym, że w pasku mam już contact.php i jak w pasku przeglądarki odświeżę adres to contact.php wysyła ponownie maila.
Cytuj
Quik Offline
Administrator

Liczba postów: 741
Reputacja: 85
Post: #4
RE: Formularz wysyłania wiadomości - monit o powodzeniu 13-12-2016 10:38
Musisz jeszcze cały skrypt wysyłania maila otoczyć warunkiem na przesłanie formularza:
Kod PHP:
<?php
if(isset($_POST['submit_form'])) {
//


Przykład ze stackoverflow (http://stackoverflow.com/questions/18379...e-script):
Kod PHP:
<?php 
if(isset($_POST['submit'])){
    
$to "email@example.com"// this is your Email address
    
$from $_POST['email']; // this is the sender's Email address
    
$first_name $_POST['first_name'];
    
$last_name $_POST['last_name'];
    
$subject "Form submission";
    
$subject2 "Copy of your form submission";
    
$message $first_name " " $last_name " wrote the following:" "\n\n" $_POST['message'];
    
$message2 "Here is a copy of your message " $first_name "\n\n" $_POST['message'];

    
$headers "From:" $from;
    
$headers2 "From:" $to;
    
mail($to,$subject,$message,$headers);
    
mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender
    
echo "Mail Sent. Thank you " $first_name ", we will contact you shortly.";
    
// You can also use header('Location: thank_you.php'); to redirect to another page.
    
}
?>

<!DOCTYPE html>
<head>
<title>Form submission</title>
</head>
<body>

<form action="" method="post">
First Name: <input type="text" name="first_name"><br>
Last Name: <input type="text" name="last_name"><br>
Email: <input type="text" name="email"><br>
Message:<br><textarea rows="5" name="message" cols="30"></textarea><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html> 

Pomogliśmy? Uszanuj to i nie usuwaj stopki!
WWW Cytuj
kokobambo Offline
Użytkownik

Liczba postów: 8
Reputacja: 0
Post: #5
RE: Formularz wysyłania wiadomości - monit o powodzeniu 05-01-2017 20:10
Wracam do tematu i mam skrypt, który mi odpowiada pod moje zastoswania. Mam jednak pytanie jak komunikat o powodzeniu echo $responseArray['message'] przenieść do kodu HTML. Teraz zawsze komunikat będzie się pokazywał nad formularzem, a chcę go umieścić we właściwym miejscu strony tam gdzie chciałbym aby się wyświetlał więc muszę umieć poprawnie przenieść to do właściwego miejsca w kodzie w HTMLu. Skrypt wykonywał będzie się w jednym pliku jak dam teraz wstawkę w części HTML <?php echo $responseArray['message']; ?> to po załadowaniu formularza do wysłania wiadomości będzi walić komunikatami o niezdefiniowanej zmiennej więc chcę to wyeliminować. Ale jak to rozwiązać.

Kod:
<?php
if(isset($_POST['submit'])) {
$from = htmlspecialchars(trim($_POST['email']));
$sendTo = 'moj@mail.com';
$subject = htmlspecialchars(trim($_POST['temat']));
$fields = array('name' => 'Name', 'surname' => 'Surname', 'phone' => 'Phone', 'email' => 'Email', 'country' => 'Country', 'message' => 'Message'); // array variable name => Text to appear in email
$okMessage = 'Gracjasz poszło!';
$errorMessage = 'nie udało się wysłać';
try
{
    $emailText = "Wiadomość ze strony \n=============================\n";
    foreach ($_POST as $key => $value) {
        if (isset($fields[$key])) {
            $emailText .= "$fields[$key]: $value\n";
        }
    }
    mail($sendTo, $subject, $emailText, "From: " . $from);
    $responseArray = array('type' => 'success', 'message' => $okMessage);
}
catch (\Exception $e)
{
    $responseArray = array('type' => 'danger', 'message' => $errorMessage);
}
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $encoded = json_encode($responseArray);
    header('Content-Type: application/json');
    echo $encoded;
}
else {
    echo $responseArray['message'];
}
}
?>
 
<form action="" method="post">
First Name: <input type="text" name="first_name"><br>
Last Name: <input type="text" name="last_name"><br>
Email: <input type="text" name="email"><br>
Temat: <input type="text" name="temat"><br>
Message:<br><textarea rows="5" name="message" cols="30"></textarea><br>
<input type="submit" name="submit" value="Submit">
</form>
(Ten post był ostatnio modyfikowany: 05-01-2017 20:13 przez kokobambo.)
Cytuj


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości