Флажок получения типа ввода через PHP POST - PullRequest
0 голосов
/ 01 августа 2020

Взгляните на этот код, взятый из формы в html, которая имеет метод POST и пытается отправить некоторую информацию в файл с именем validating-cart. php

<form action="actions/validating-cart.php" method="POST" id="carrito-form">     <!--COMBO CARRITO-->
   <legend class="carrito-legend">COMBO 2</legend>
   <input type="hidden" name="nameCombo" id="nameCombo" value="COMBO 2">
   
   <button class="reiniciar-btn" type="button">Borrar carrito</button>
   <div class="error-msj"></div>

   <ul>
    <li><label><input type="checkbox" name="art0" checked="checked" disabled="disabled" value="1 Panal de huevos AAA">1 Panal de huevos AAA</label></li>
    <li><label><input type="checkbox" name="art1" checked="checked" disabled="disabled" value="1 Pollo campesino">1 Pollo campesino</label></li>
    <li><label><input type="checkbox" name="art2" checked="checked" disabled="disabled" value="1 Libra de queso cuajada">1 Libra de queso cuajada</label></li>
    <li><label><input type="checkbox" name="art10" checked="checked" disabled="disabled" value="1 Lata de maiz tierno">1 Lata de maiz tierno</label></li>
    <li><label><input type="checkbox" name="art11" checked="checked" disabled="disabled" value="1 Lata de salchicha viena">1 Lata de salchicha viena</label></li>
  </ul>
  
  <output>$65.000</output>
  <input type="hidden" name="costo" id="precio" value="$65.000">
</form>

Через файл PHP я пытаюсь получить с помощью POST скрытые элементы ввода, а также флажок ввода со значением, что странно, мой файл PHP не распознает, что находится в значении флажка ввода, и он говорит ошибка типа «Преобразование массива в строку». Я не знаю, может быть, это потому, что эти элементы li созданы из JS с JSON.

1 Ответ

1 голос
/ 01 августа 2020

Неважно, как они созданы, проблема в том, что disabled элементы формы вообще не отправляются браузером (что вы могли бы узнать, если бы использовали вкладку «Сеть» инструмента проверки вашего браузера @ см. Снимок экрана ниже). Запустите этот сценарий form.php, чтобы увидеть, как отправляется <input type="any" disabled="disabled"> ( или, скорее, не отправляется ).



    



    

disabled
readonly (with JS)
$_POST after form send
<?php if (isset($_POST['formsent'])){ echo '<pre>'; print_r($_POST); echo '
'; }?>

Проверка сети в браузере ясно показывает, что все поля с атрибутом disabled не включены в полезную нагрузку POST, буквально они даже не ' Не выходите из браузера во время отправки формы, поэтому вы все равно не сможете получить их в PHP. Вы не можете обойти это с отключенными полями, это сделано намеренно.

Вместо этого вы можете достичь функции отключения , используя readonly attr вместо disabled, но, как вы можете видеть, вы также необходимо будет использовать некоторые стили CSS, чтобы элементы, доступные только для чтения, выглядели так же, как они были отключены.

Для тех, кто не хочет запускать пример сценария, вот его результат на снимке экрана:

script output in the browser

Optional approach

... is using hidden fields with same name as disabled fields, however I'd check it in different browsers to make sure:

<form action="form.php" method="post">
    <input type="text" name="txt_disabled" disabled="disabled" value="Default Foo disabled"/><br>
    <input type="hidden" name="txt_disabled" value="Default Foo disabled"/>

    <input type="checkbox" name="box_disabled" disabled="disabled" checked="checked"> disabled <br>
    <input type="hidden" name="box_disabled"  checked="checked">

    <select name="select_disabled" disabled="disabled">
        <option value="1">One</option>
        <option value="2" selected="selected">Two</option>
        <option value="3">Three</option>
    </select><br>
    <input type="hidden" name="select_disabled" value="2">

    <input type="submit" name="formsent" value="Send">
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...