如何发布禁用的输入框

23

你好,我有一些输入内容,但其中一个被禁用了(是的,我需要它来填写我的时间表),但我该如何将其发送到autocomplete.php再到insert.php?我收到了以下错误提示:在 C:\wamp\www\testlp\insert.php 的第30行出现 Undefined index: client1 错误。

这是我的 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 />

这里出现了错误:提示:在 C:\wamp\www\testlp\insert.php 的第 12 行,client1 未定义


8
你可以尝试使用 readonly 替代 disabled - Lix
1
请参考 @Lix 的回答,查看更多信息:https://dev59.com/cG445IYBdhLWcg3wucio - user1477388
我可以尝试使用"readonly",但是我需要让某些人能够在此输入框中进行编辑,同时我也需要将它发送到我的插入操作中。最后,我该如何处理我的错误? - Thephpdoge
1
但是为什么,如果您希望用户能够对其进行某些操作,它需要被禁用或只读? - putvande
<input type="text" name="client1" @Thephpdoge旁边添加以下编程内容:<input type="text" name="client1" class = "client" size="12" id ="client1" value="<?php echo $_POST['client1']; ?>" readonly /> -或者- <input type="text" name="client1" class = "client" size="12" id ="client1" value="<?php echo $client1; ?>" readonly /> - Funk Forty Niner
显示剩余12条评论
3个回答

105

使用属性readonly而不是disabled

  • readonly: 输入框不能被修改
  • disabled: 输入框无法使用表单功能
  • (以及相关的第三个选项: input type=hidden: 输入框不可见,但值会被提交)

如果使用disabled属性,则在提交表单时该元素不会被发送,因此在$_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的语法。


2
你的代码肯定还有其他问题。readonly 应该是可以这样使用的。 - putvande
具体是什么出了问题?你确定拼写属性名称和 $_POST 索引的方式相同吗?你重新加载了页面吗? - cypherabe
你看到我编辑和代码中的错误了吗?是的,我已经重新加载了。 - Thephpdoge
如果您想要禁用字段的外观,这对用户来说非常好,可以添加一个名为.readonlyinput的CSS类,并将颜色设置为#999999或类似颜色,然后将其应用于输入框。 - KingOfAllTrades
@qkx 不,这不是错误的。 - matronator
显示剩余3条评论

9
这里是一个解决方法的想法。
<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将在隐藏的输入字段中发布该值。
你可以使用<?php echo !empty($text)?$text:'';?>填充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 ="<?php $_POST['client1']?>",对吗? - User0434
取决于。value=6,value=tokenvalue,无论如何和如何填充此值都由开发人员决定。因此,value可以来自php(服务器端),也可以来自javascript,value可以是硬编码的。问题在于如何将此值从客户端移动到服务器端。 使用$_POST ['client1']表示您正在将值从服务器(php)/后端移动到客户端(ui)/html/javascriipt。 在提问时:我们不关心值如何到达客户端。 我们只关心如何将其从客户端传输到服务器端。 - TimeTrax
1
simple and efficient :) - vieroli

-2
如果你想要禁用它,使其在数据库中不变,那么你不必将其POST。使用SELECT填充,并添加属性"disabled"。
<?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>

1
但是他们确实想要POST它。 - Mark Fisher
1
我不明白这如何回答问题。 - Mark Fisher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接