Отправьте значение функции javascript в форме HTML на страницу PHP - PullRequest
0 голосов
/ 30 марта 2020

У меня есть функция JavaScript в виде массива и форма HTML, которая отправляет данные на страницу PHP для последующей отправки по электронной почте. Но мне также необходимо отправить результат функции JavaScript в форме на страницу php. Возможно ли это?

В настоящее время я пытаюсь следующим образом, но без результатов:

HTML страница и сценарий:

function showcartitems() {
  var showcart = paypal.minicart.cart.items();
}
<form action="teste4.php" method="post" class="creditly-card-form agileinfo_form" onsubmit="showcartitems()">
  <section class="creditly-wrapper wthree, w3_agileits_wrapper">
    <div class="information-wrapper">
      <div class="first-row form-group">
        <div class="controls">
          <label class="control-label">Nome Completo: </label>
          <input class="billing-address-name form-control" type="text" name="name" placeholder="Nome Completo">
          <input type="hidden" name="cart" value="showcart" />
        </div>
        <div class="w3_agileits_card_number_grids">
          <div class="w3_agileits_card_number_grid_left">
            <div class="controls">
              <label class="control-label">Numero de telemóvel:</label>
              <input class="form-control" type="text" name="mobile" placeholder="Numero de telemóvel">
            </div>
          </div>
          <div class="w3_agileits_card_number_grid_left">
            <div class="controls">
              <label class="control-label">Email:</label>
              <input class="form-control" type="text" name="email" placeholder="Email">
            </div>
          </div>
          <div class="w3_agileits_card_number_grid_right">
            <div class="controls">
              <label class="control-label">Rua: </label>
              <input class="form-control" type="text" name="rua" placeholder="Rua">
            </div>
          </div>
          <div class="clear"> </div>
        </div>
        <div class="controls">
          <label class="control-label">Cidade: </label>
          <input class="form-control" type="text" name="cidade" placeholder="Cidade">
        </div>
        <div class="controls">
          <label class="control-label">Método de pagamento: </label>
          <select name="pagamento">
            <option>MBWay</option>
            <option>Transferência Bancária</option>
            <option>Multibanco (apenas para entregas ao domicílio)</option>

          </select>
        </div>
      </div>
      <button class="submit check_out">Verificar disponibilidade!</button>
    </div>
  </section>
</form>

Страница PHP все еще довольно проста, просто проверяя, правильно ли поступают переменные, все они, кроме значения функции javascript:

echo $_POST['name']; 
echo $_POST['mobile']; 
echo $_POST['email']; 
echo $_POST['rua']; 
echo $_POST['cidade']; 
echo $_POST['pagamento']; 
echo $_POST['showcart']; 
?>

Я что-то не так делаю? Есть ли лучший способ сделать это, или это просто невозможно?

РЕДАКТИРОВАТЬ 1: После предложения @epascarello мне удалось получить значение в сторону PHP, которая возвращает следующее:

[{"_data":{"cmd":"_cart","add":"1","item_name":"FILA 1010302","item_image":"images/1010302-1.png","amount":99,"discount_amount":"50.00","submit":"Adicionar ao carrinho","quantity":2,"href":"http://teste/index.html#5"},"_options":[],"_discount":100,"_amount":99,"_total":98,"_eventCache":{"change":[[null,null]]}},{"_data":{"cmd":"_cart","add":"1","item_name":"FILA 1010575","item_image":"images/1010575-1.png","amount":99,"discount_amount":"50.00","submit":"Adicionar ao carrinho","quantity":1,"href":"http://teste/index.html#5"},"_options":[],"_discount":50,"_amount":99,"_total":49,"_eventCache":{"change":[[null,null]]}},{"_data":{"cmd":"_cart","add":"1","item_name":"FILA 1010707","item_image":"images/1010707-1.png","amount":99,"discount_amount":"50.00","submit":"Adicionar ao carrinho","quantity":1,"href":"http://teste/index.html#5"},"_options":[],"_discount":50,"_amount":99,"_total":49,"_eventCache":{"change":[[null,null]]}},{"_data":{"cmd":"_cart","add":"1","item_name":"FILA SCM00514","item_image":"images/scm00514-1.png","amount":99,"discount_amount":"50.00","submit":"Adicionar ao carrinho","quantity":1,"href":"http://teste/index.html#5"},"_options":[],"_discount":50,"_amount":99,"_total":49,"_eventCache":{"change":[[null,null]]}}]

Я пробовал несколько подходов с json_decode, но я не получаю нужный результат.

Я хотел бы разбить этот массив, например:

item_name=x;
item_image=x;
quantity=x;

Может ли кто-нибудь указать мне правильное направление? Извините за вопрос, я новичок в этих языках, и, несмотря на свои исследования, мне не удалось найти решение самостоятельно.

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

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Итак, у вас есть <input type="hidden" name="cart" value="showcart" />, поэтому вам нужно установить значение поля. Это значение магическим образом не ссылается на созданное вами значение JavaScript.

Присвойте элементу ввода идентификатор, чтобы было проще сослаться на

<input type="hidden" name="cart" id="cart" />

и установить значение ввода в ваш метод, который вызывается при отправке

function showcartitems() {
  document.getElementById('cart').value = JSON.stringify(paypal.minicart.cart.items());
}
0 голосов
/ 31 марта 2020

После решения @epascarello, чтобы иметь возможность декодировать строку де JSON, я последовал предложению @RaymondMutyaba, которое работает довольно корректно:

$item_name = json_decode($_POST['cart'], true)[0]["_data"]["item_name"];
$array_of_items_in_cart = json_decode($_POST['cart'], true);
$first_item_in_cart = array_of_items_in_cart[0];
$name_of_first_item_in_cart = first_item_in_cart["_data"]["item_name"];
$first_item_discount = first_item_in_cart["_discount"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...