如何发布禁用的输入

Posted

技术标签:

【中文标题】如何发布禁用的输入【英文标题】:How do I post disabled input 【发布时间】:2014-05-24 06:23:37 【问题描述】:

您好,我有一些输入,但其中一个被禁用(是的,我的时间表需要它)但是我如何将它发送 autocomplete.php 到 insert.php 我有这个错误 Undefined index: client1 in C: \wamp\www\testlp\insert.php 第 30 行

这是我的代码 autocomplete.php

<form action = 'insert.php' method="post"  >

    <input type="text" name="client1" class = "client" size="12" id ="client1" disabled />

        </form>

这里是我的代码 insert.php

    session_start(); 
    $date = $_POST['data'] ;
    $client1 = $_POST['client1'] ;

    echo($client1);
    echo($date);

编辑我试过这个:

<input type="text" name="client1" class = "client" size="12" id ="client1"readonly />

这里是错误:Notice: Undefined index: client1 in C:\wamp\www\testlp\insert.php on line 12

【问题讨论】:

为什么需要禁用它?我认为您无法在其中使用 disabled 您可以尝试使用readonly 而不是disabled 同上@Lix 请参阅***.com/questions/4727974/… 了解更多信息 我可以尝试只读,但我需要一个可以在此输入中写入但我需要将其发送到我的插入。最后我该如何处理我的错误? 但是,如果您希望您的用户能够使用它做某事,为什么需要禁用它或只读? 【参考方案1】:

这里是你如何解决这个问题的想法

<form action = 'insert.php' method="post"  >
  <input type="text" name="client1" class="client" size="12" id="client1" disabled />
  <input hidden name="client1" value="inserted_value_of_client1"/>
</form>

您甚至可以从第一个输入中删除名称。 这样,您的禁用输入仍将显示,但 php 会将值发布到您的隐藏输入字段中。

你可以使用 &lt;?php echo !empty($text)?$text:'';?&gt; 填充 value 字段,如这里的一些答案所示

TLDR;

<form action="index.php" method="post">
  <input type="text" disabled  value="my_value"/>
  <input hidden name="client" value="my_value"/>
</form>

【讨论】:

这里 "value="inserted_value_of_client1"/> " 的意思是 value="" 对吗? 取决于。 value=6, value=tokenvalue,无论您以何种方式填充此值,都取决于开发人员。所以值可以来自php(服务器端)值可以来自javascript,值可以是硬编码的。这里的问题是如何将这个值从客户端移动到服务器。执行 $_POST['client1'] 意味着您正在将值 FROM THE SERVER (php)/backend 移动到 client(ui)/html/javascriipt。在提出问题的时候:我们不在乎价值是如何到达客户的。我们只关心从客户端到服务器的获取 简单高效:)【参考方案2】:

如果您希望禁用它以便它不会在数据库中更改,那么您不必发布它。使用 SELECT 填充 &lt;input&gt; 并添加属性“禁用”。

<?php
if ( !empty($_POST)) 
$other_inputs= $_POST['other'];

$valid = true;
if (empty($text)) 
    $valid = false;


if ($valid) 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "UPDATE table set text = ? WHERE id = ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($other_inputs,$id);

 else 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT * FROM table where id = ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($id));
    $data = $q->fetch(PDO::FETCH_ASSOC);
    $text = $data['client1'];

?>
<form action = 'insert.php' method="post"  >
    <input type="text" name="client1" class = "client" size="12" id ="client1" disabled vlaue="<?php echo !empty($text)?$text:'';?>" />
</form>

【讨论】:

但他们确实想发布它。 我看不出这是如何解决问题的。【参考方案3】:

使用属性readonly 而不是disabled

只读:无法修改输入 已禁用:输入没有表单功能 (以及相关的第三个选项:input type=hidden:input不可见,但是提交了值)

您收到错误,因为在提交表单时未发送禁用元素,因此$_POST 中不存在(在您的情况下根本没有$_POST['client1']

编辑编辑:示例不完整 - 正如接受的答案所述,name 属性也必须存在

 <input type="text" name="client1" class = "client" size="12" id ="client1" value="something" readonly />

 <input type="text" name="client1" class = "client" size="12" id ="client1" value="something" readonly="readonly" />

如果你想要一个更像 xml 的语法。

【讨论】:

您的代码肯定有其他问题。 readonly 应该这样工作。 究竟是什么不工作? - 你确定你拼写 name 属性和 $_POST 索引相同吗?你重新加载你的页面了吗? 您在我的编辑和代码中看到错误了吗,是的,我重新加载 如果你想要一个禁用字段的外观,这对用户来说很好,添加一个名为 .readonlyinput 的 CSS 类并将颜色设置为 #999999 或类似,然后将其应用于输入。 您的代码错误。它是readOnly(非只读)属性,值为true/false(非“只读”)

以上是关于如何发布禁用的输入的主要内容,如果未能解决你的问题,请参考以下文章

如何发布带有条件的禁用/只读输入字段?

如果用户从浏览器返回时具有值,如何启用默认禁用的输入

如何更改禁用输入的字体颜色?

如何在颤动中禁用 texformfield 输入?

提交后如何禁用输入字段

仅当特定输入为空时,如何禁用按钮?