【问题标题】:Getting input type checkbox through PHP POST通过 PHP POST 获取输入类型复选框
【发布时间】:2020-08-01 17:30:35
【问题描述】:

看看这段代码,它来自 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 项目是从带有 JSON 的 JS 创建的。

【问题讨论】:

  • $_POST['art2'] 将给出值1 Libra de queso cuajada,因此请验证以查看使用 php 检查的内容。

标签: javascript php arrays


【解决方案1】:

不管它们是如何创建的,问题是浏览器根本不发送disabled 表单元素(如果您使用浏览器检查工具的网络选项卡,您会发现这一点@see screenshot以下)。运行这个form.php 脚本来查看&lt;input type="any" disabled="disabled"&gt; 是如何发送的(或者说不发送)。

<html>
<head>
    <meta charset="utf-8">
</head>
<body>
<form action="form.php" method="post">
    <input type="text" name="txt_disabled" disabled="disabled" value="Default Foo disabled"/><br>
    <input type="text" name="txt_readonly" readonly="readonly" value="Default Foo readonly"/><br>
    <input type="checkbox" name="box_disabled" disabled="disabled" checked="checked"> disabled <br>
    <input type="checkbox" name="box_readonly"  onclick="return false;" checked="checked"> readonly (with JS) <br>
    <input type="submit" name="formsent" value="Send">
</form>

<div>
    <b>$_POST after form send</b><br>
    <?php
    if (isset($_POST['formsent'])){
        echo '<pre>';
        print_r($_POST);
        echo '</pre>';
    }
    ?>
</div>
</body>
</html>

浏览器中的网络检查清楚地表明,所有具有disabled 属性的字段都不包含在 POST 的有效负载中,实际上它们在表单发送期间甚至不会离开浏览器,因此您无论如何都无法在 PHP 中获取它们。您无法通过禁用字段绕过此设置,这是设计使然。

相反,您可以使用readonly attr 而不是disabled 来实现禁用功能,但正如您所看到的,您还需要使用一些 CSS 样式来查看只读元素以查看就像他们被禁用一样。

对于不想运行示例脚本的任何人,屏幕截图中的输出如下:

可选方法

...正在使用与禁用字段同名的隐藏字段,但是我会在不同的浏览器中检查以确保:

<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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2015-06-02
    • 2016-09-20
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多