Получите номер мобильного телефона «intl-tel-input» с кодом страны, используя PHP, а не JS

#javascript #php #mysql #php-7

Вопрос:

У меня есть форма регистрации (PHP и MySQL), в которой посетители могут указать свое имя, адрес электронной почты и номер мобильного телефона. После отправки он отправляется в базу данных.

Теперь я хочу добавить код страны с выпадающим списком перед номером мобильного телефона, чтобы посетители могли выбрать нужную страну и ввести свой номер мобильного телефона.

Для этого я использовал «ввод intl-tel» с Github. Все работает нормально. но когда я пытаюсь получить значение номера мобильного телефона с кодом страны, используя метод PHP POST или GET, это не работает. Но это работает, когда я пытаюсь получить значение из JS.

Ниже приведен код получения номера мобильного телефона с кодом страны от JS, и он работает совершенно нормально.

 <div class="container">
      <form id="login" onsubmit="process(event)">
        <p>Enter your phone number:</p>
        <input id="phone" type="tel" name="phone" />
        <input type="submit" class="btn" value="Verify" />
      </form>
      <div class="alert alert-info" style="display: none"></div>
      <div class="alert alert-error" style="display: none"></div>
</div>

<script>
    const phoneInputField = document.querySelector("#phone");
    const phoneInput = window.intlTelInput(phoneInputField, {
      utilsScript:
        "https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/js/utils.js",
    });

    const info = document.querySelector(".alert-info");
    const error = document.querySelector(".alert-error");

    function process(event) {
      event.preventDefault();

      const phoneNumber = phoneInput.getNumber();

      info.style.display = "none";
      error.style.display = "none";

      if (phoneInput.isValidNumber()) {
        info.style.display = "";
        info.innerHTML = `Phone number in E.164 format: <strong>${phoneNumber}</strong>`;
      } else {
        error.style.display = "";
        error.innerHTML = `Invalid phone number.`;
      }
    }
  </script>
 

Я знаю, что могу получить данные с помощью JS и добавить их в базу данных. Но есть ли какой-либо способ, чтобы я мог получить значение номера мобильного телефона с кодом страны, используя метод POST?

Заранее спасибо.

Комментарии:

1. Как вы передаете окончательный номер телефона PHP? В вашем текущем примере есть только сторона JS, пожалуйста, покажите, как вы передаете ее на сторону PHP.

2. Я сталкиваюсь с трудностями при передаче конечного значения только в PHP, раньше я получал значения с помощью отправки формы методом POST. теперь, после отправки формы, он вызывает функцию JS.

3. Хорошо, смотрите мой ответ ниже, основанный на этом комментарии

Ответ №1:

Основываясь на вашем ответе на мой предыдущий комментарий, проблема в том, что вы использовали Javascript для проверки и правильного форматирования числа, и теперь вам нужно передать отформатированное значение обратно в PHP

Вы можете сделать это, взяв phoneNumber результат, поместив его обратно во входные данные, а затем отправив форму.

Вот код

 <div class="container">
      <form id="login" onsubmit="return process(event)">
        <p>Enter your phone number:</p>
        <input id="phone" type="tel" name="phone" />
        <input type="submit" class="btn" value="Verify" />
      </form>
      <div class="alert alert-info" style="display: none"></div>
      <div class="alert alert-error" style="display: none"></div>
</div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/css/intlTelInput.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/js/intlTelInput.min.js"></script>
<script>
    const phoneInputField = document.querySelector("#phone");
    const phoneInput = window.intlTelInput(phoneInputField, {
      utilsScript:
        "https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/js/utils.js",
    });

    const info = document.querySelector(".alert-info");
    const error = document.querySelector(".alert-error");

    function process(event) {

      const phoneNumber = phoneInput.getNumber();

      info.style.display = "none";
      error.style.display = "none";

      if (phoneInput.isValidNumber()) {
        info.style.display = "";
        document.getElementById("phone").value=phoneNumber
        return true
        // info.innerHTML = `Phone number in E.164 format: <strong>${phoneNumber}</strong>`;
      } else {
        error.style.display = "";
        error.innerHTML = `Invalid phone number.`;
        return false;
      }
    }
  </script>
 

Изменения заключаются в:

  • onsubmit событие формы теперь проверяет возвращаемое значение. Если это ложь, не будет отправляться, если это правда, будет продолжать отправляться
  • теперь process(event) функция возвращает значение true, если номер телефона подтвержден, или значение false, если это не так
  • если process(event) возвращено значение true, он также редактирует input номер телефона, содержащий правильно отформатированное значение

Конечно, теперь вы можете переключить форму на ПУБЛИКАЦИЮ вместо получения, изменить действие и т. Д…

Комментарии:

1. Теперь я использовал метод POST, он работает отлично, как и ожидалось, включая предупреждающее сообщение, проверку и т. Д. Большое вам спасибо!

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