Oldal töltésének jelzése, a $_POST[] adatok betöltődés ideje alatt
2021-12-22T07:47:05+01:00
2021-12-22T12:02:16+01:00
2022-08-12T06:20:31+02:00
Helper
Sziasztok!

A problémám a következő:
Csináltam egy e-mail küldő oldalt, a PHPMailer segítségével, ami jól is működik, miután elküldi az üzenetet kiírja az eredményt, hogy sikerült-e elküldenie vagy sem, de van, hogy ez elég sokáig tart (még gyors nettel is), és ebből csak annyi látszik, hogy az oldal fülnél forog a karika. Én viszont szeretném megjeleníteni a felhasználónak a küldési folyamat idejére, hogy "Kérem várjon".
Vagyis a lényeg az lenne, hogy miután megnyomta az elküld gombot, és az űrlap helyesen van kitöltve, addig "Kérem várjon", majd az eredmény, hogy sikerült vagy nem sikerült elküldeni az e-mailt üzenet jelenjen meg.
Igazából mivel a 2. része működik, csak az elindítással volna a baj. Először a
if(isset($_POST['submit']))
vizsgálattal próbáltam, hogy az elküldés után jelenjen meg a "Kérem várjon" felirat, de sajnos ez nem fut le csak miután elküldte (vagy nem küldte el) az emailt.
Eszembe jutott az onclick is, ami működne is, de mivel nem javascript-tel hanem HTML-el van megoldva a validálás, így az onclickel megjelenik egyből a "Kérem várjon" felirat, nem csak akkor, miután a form ténylegesen el lett küldve.
Esetleg van valakinek erre valami ötlete? Lehet csak nem látom a fától az erdőt :)
Előre is köszönök minden segítséget.
A kód jelen pillanatban, ha esetleg segít ötletelni:

<?php use PHPMailer\PHPMailer\PHPMailer; require_once 'PHPMailer/src/Exception.php'; require_once 'PHPMailer/src/PHPMailer.php'; require_once 'PHPMailer/src/SMTP.php'; $mail = new PHPMailer(true); $alert = ''; if(isset($_POST['submit'])){ $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; try{ $mail->CharSet = 'UTF-8'; $mail->setLanguage('hu', 'PHPMailer/language/'); $mail->isSMTP(); $mail->Host = 'smtp-xyz'; $mail->SMTPAuth = true; $mail->Username = 'xyz@xyz.xyz'; // mail address which you want to use as SMTP server $mail->Password = 'xyz'; // mail address Password $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = '123'; $mail->setFrom('xyz@xyz.xyz'); // mail address which you used as SMTP server $mail->addAddress('xyz@xyz.xyz'); // Email address where you want to receive emails (you can use any of your gmail address including the gmail address which you used as SMTP server) $mail->isHTML(true); $mail->Subject = 'Subject'; $mail->Body = "<h3>Name : $name <br>Email: $email <br>Message : $message</h3>"; $mail->send(); $alert = '<div class="alert-success"> <span>Üzenetét feldolgoztuk, hamarosan jelentkezünk</span> </div>'; } catch (Exception $e){ $alert = '<div class="alert-error"> <span>'.$e->getMessage().' Kérem próbálja újra később, vagy próbáljon meg másik lehetőséget</span> </div>'; } } ?> <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Kapcsolat</title> </head> <body> <!--alert messages start--> <?php echo $alert; ?> <!--alert messages end--> <!--contact section start--> <div class="contact-section"> <div class="contact-form"> <form class="contact" action="" method="post"> <input type="text" name="name" class="text-box" placeholder="Neve" required> <input type="email" name="email" class="text-box" placeholder="E-mail címe" required> <textarea name="message" rows="5" placeholder="Kérem írja le üzenetét" required></textarea> <input type="submit" name="submit" class="send-btn" value="Elküld"> </form> </div> </div> <!--contact section end--> <script type="text/javascript"> if(window.history.replaceState){ window.history.replaceState(null, null, window.location.href); } </script> </body> </html>
Mutasd a teljes hozzászólást!
Ez ugye nem "baj", ez az üzemszerű működés. Miért van az, hogy a HTTP kommunikációt a legalapabb szinten (request / response, client / server) nem akarjátok megérteni? Erre alapul az egész kódod, tisztában kell lenni vele. Mivel a POST alatt az oldalról már elnavigálsz, megy az adat a szerver felé, utána pedig varakozik, csak még ezek megtörténte előtt, kliens oldalon tudsz bármit is jelezni a felhasználó felé. Tegyél egy Javascript eseményfigyelőt az űrlap submit eseményére, jelenítsd még a kliens oldalon amit kell (DOM manipuláció), aztán mehet az űrlap elküldése.
Mutasd a teljes hozzászólást!

  • ...de mivel nem javascript-tel hanem HTML-el van megoldva a validálás, így az onclickel megjelenik egyből a "Kérem várjon" felirat, nem csak akkor, miután a form ténylegesen el lett küldve.

    A sima HTML validálás nem éppen a legjobb megoldás, már csak biztonsági okokból sem, a legegyszerűbb ezt valóban Javascript-ből megoldani. Ha már így lett megoldva, akkor hívd meg a "Kérem várjon" megjeleítését akkor, amikor a vezérlés már átkerült a validáció után a PHP kódra. PHP-ból is lehet js-t futtatni.
    Mutasd a teljes hozzászólást!
  • Természetesen nem ez lesz a fő validálás, hanem php-val lesz megoldva. A html csak felületes megoldás, úgy, mint ahogy a js-es is az lenne. Az a baj, hogy teljesen mindegy, hogy php kódot vagy js kódot szeretnék kiíratni az
    if(isset($_POST['submit']))
    ellenőrzés után, nem fut le semmi csak miután betöltődött az oldal és elküldte az adatokat.
    Mutasd a teljes hozzászólást!
  • Ez ugye nem "baj", ez az üzemszerű működés. Miért van az, hogy a HTTP kommunikációt a legalapabb szinten (request / response, client / server) nem akarjátok megérteni? Erre alapul az egész kódod, tisztában kell lenni vele. Mivel a POST alatt az oldalról már elnavigálsz, megy az adat a szerver felé, utána pedig varakozik, csak még ezek megtörténte előtt, kliens oldalon tudsz bármit is jelezni a felhasználó felé. Tegyél egy Javascript eseményfigyelőt az űrlap submit eseményére, jelenítsd még a kliens oldalon amit kell (DOM manipuláció), aztán mehet az űrlap elküldése.
    Mutasd a teljes hozzászólást!
  • Dehogyis baj, így működik, miután kipróbáltam rájöttem én is, ezért keresek alternatív megoldást. Ha írtam, hogy "baj" az csak egy szófordulat volt, elnézést érte. Sajnos a js-ben nem vagyok otthon, mindig kerültem, de néha előjön, hogy szükség van rá (ez sem baj).
    Köszönöm a segítséget, a megoldás az onsubmit volt:

    <form class="contact" onsubmit='demo()' action="" method="post"> <script> function demo(){ document.getElementById("demo").innerHTML = 'dgdfdfhdfhdfhdf'; } </script> <p id="demo"></p>
    Köszönöm a segítséget.
    Mutasd a teljes hozzászólást!
abcd