Отправить -> Выполнить скрипт PHP -> Предупреждение пользователя - оставаясь на той же странице

У меня есть страница с двумя кнопками отправки, используя if ($_POST['action'] == 'Test SMS') на выполненный код для моей кнопки "Тест SMS". Мне нужно выполнить код из сценария PHP, а затем дать окно с предупреждением, не покидая страницу.

index.html

<form action="updateUserConfig.php" method="post">
<input type='submit' name='action' value='Test SMS' class='btn-test'>
<input type="submit" name="action" value="Save" class="btn btn-primary">
</form>

updateUserConfig.php

if ($_POST['action'] == 'Test SMS') { //action for Test SMS Button

   //grab ntid and phone from header
   if(isset($_POST['ntid'])) $ntid = $_POST['ntid'];
   if(isset($_POST['phone'])) $phone = $_POST['phone'];

   //using the notify_sms_users funtion from send_notification.php
   require 'send_notification.php';
   notify_sms_users(array($ntid), "", 4);

   //alert user that there message has been sent
   $alert = "Your message has been sent to " . $phone;
   echo '<script type="text/javascript">alert("'.$alert.'");';
   echo '</script>';

   header('Location: index.php');

} else {-----action for other submit button------}

Я задал похожий вопрос, который был помечен как дубликат в Alert после выполнения сценария php, но при этом он не покинул текущую страницу, но смог найти решение, поэтому я хотел поделиться им.

2 ответа

Решение

Я смог сделать это, добавив строку запроса URL в моем header('location: index.php?text=success) Функция затем с использованием JS Я смог использовать оператор if для поиска строки запроса и предупреждения, если так.

index.html

<form action="updateUserConfig.php" method="post">
    <input type='submit' name='action' value='Test SMS' class='btn-test'>
    <input type="submit" name="action" value="Save" class="btn btn-primary">
</form>

<script type="text/javascript">
$(document).ready(function () {
    if(window.location.href.indexOf("settings=success") > -1) {
       alert("Your settings have been saved");
    }
    else if(window.location.href.indexOf("text=success") > -1) {
       alert("A SMS has been sent!");
    }
});
</script>

updateUserConfig.php

if ($_POST['action'] == 'Test SMS') { //action for Test SMS Button

   //grab ntid and phone from header
   if(isset($_POST['ntid'])) $ntid = $_POST['ntid'];
   if(isset($_POST['phone'])) $phone = $_POST['phone'];

   //using the notify_sms_users funtion from send_notification.php
   require 'send_notification.php';
   notify_sms_users(array($ntid), "", 4);

   header('Location: index.php?text=success');

} else {-----action for other submit button------}
    header('Location: index.php?settings=success');

Единственным недостатком этого решения является то, что у меня нет легкого доступа к моему PHP $phone переменная, чтобы сообщить пользователю, на какой номер было отправлено сообщение.

AJAX - метод, наиболее подходящий для этой работы, потому что то, что вы пытаетесь достичь, - это взаимодействие с внешним интерфейсом. Php - это язык на стороне сервера.

AJAX будет передавать данные формы в бэкэнд-скрипт php. Как только скрипт php обработает данные на сервере, он может вернуть необходимые вам данные в скрипт AJAX. Иногда это делается с использованием JSON, особенно если у вас несколько переменных.

$formdata = array(
    'ntid' => $_POST['ntid'],
    'phone' => $_POST['phone']
);

return json_encode($formdata);

Возвращенный код JSON будет выглядеть примерно так:

{"ntid":"NT ID","phone":"Phone number"}

Учебники, подобные этому, очень полезны: [ http://www.yourwebskills.com/ajaxintro.php][1]

Я обнаружил, что, отдохнув от основного проекта и потратив немного времени на изучение механики того, чего вы пытаетесь достичь, вы сможете быстрее решить свою проблему.

Другие вопросы по тегам