代码之家  ›  专栏  ›  技术社区  ›  Richard T

我如何将文本区域的内容与动态生成的名称相关联,以便在发布时可以获取它,并且可以通过<button>预先启动?

  •  0
  • Richard T  · 技术社区  · 5 月前

    我是一名经验丰富的程序员,但对PHP不熟悉,我正在进行第一个真正的项目。

    我正在浏览一棵文件树,并显示各种内容——文本、图像等——当授权用户查看时,他们可以做一些特殊的事情,例如脚本向他们显示其他人看不到的按钮,让他们采取某些行动。

    这工作得很好,但我一直在思考如何将内容与 textarea 使用按钮的帖子,我可以动态创建文本区域和按钮,但让代码执行_post处理——请原谅这个双关语!-接收文本区域的内容,并知道数据与什么相关,因为它将如何处理它,要么是动态生成的名称的一部分,要么是发送的数据的一部分——只要不太痛苦,我真的不在乎。

    到目前为止,我看到的所有例子都假设你有一个静态的情况,也假设你正在使用:

    <input...
    

    我没有发现任何不使用输入表单的例子。。。也许值得指出的是,绝大多数的例子都是对“提交”这个词的过度使用,这是我迄今为止发现的最少的滥用 is in this example:

    <form action="" method="post">
    <label>Additional Comments:</label><br>
    <textarea cols="35" rows="12" name="comments" id="para1">
    <php echo $comments; ?>
    </textarea><br>
    <input type="submit" name="button" value="Submit"/></form>
    

    但它仍然没有帮助:“提交”是一个关键字还是一个任意名称?!新手不知道。

    在上面我注意到id的使用,我一直在从这个角度考虑,但这里似乎没有引用它。。。我无法让输入构造在我的环境中工作——它不能与表单创建紧密联系在一起(或者也许我错了?)。。。但我在每个合适的地方都有按钮,所以我现在对它们相当熟悉。我不明白的是如何将 文本区 使用相关按钮。如果你使用 <input 但我不是。

    我尝试了很多东西,但现在我坐在这里:

       echo '<textarea name="fileMeta" rows="20" class="textarea"
        id="meta_'.$arrayIndex.'">';
       echo $contents;
       echo "</textarea><br>";
       echo '<button name="saveMeta" value="'.$arrayIndex.
        '" formtarget="_self" formmethod="post" form="thisForm" '.
        'align="left">Save</button>';
    

    (这不是问题的一部分,但顺便说一句,类标识似乎并没有起到什么作用——我试图将其用于css。)

    请注意,文本区域是如何基于数组索引动态生成id的。按钮的值包含相同的数组索引。当然,我打算加入这些——很容易。。。至少我是这么想的。

    点击按钮后,想法是对“saveMeta”进行代码检查,但后来。。。这只会得到值$arrayIndex。

    但即使是这个新手也很清楚,按钮并没有直接将其与文本区域的内容联系起来。我希望,因为它被认为是表单数据,所以它会在帖子中传递,并且有一些方法可以根据id“提取内容”。但似乎没有任何方法可以轻松发现——至少对于像我这样的新手来说——在_POST数组中发送回了什么值。。。

    …我正在考虑通过以下方式转储整个_POST数组:

    var_dump($_POST);
    

    …并在碎片中筛选我的数据,也许从中可以了解到我的假设是否正确(文件文本区域在那里),如果是这样,我如何在PHP大海捞针中找到它。

    除此之外,我陷入了困境。

    我突然想到了一个创意。。。

    …并不是说我知道如何实现它:也许在按钮执行操作时,它会以某种方式从文本区域加载value属性?

    好吧,我以为我成功了!

    沮丧的是,我确实做了 var_dump ,就像这样:

       if (isset($_POST['saveMeta']))
       {
          var_dump($_POST);
          ...
    

    我发现数组中有两个元素,按钮和文本区域,如前所述,一个可通过“saveMeta”获得,另一个可从“fileMeta”获得(这是文本区域的名称)!

    我错误地认为它是有效的,我只是不知道如何访问数据,错误地认为你首先查找按钮的名称,并从中获取值,然后查找文本区域的名称,你就得到了你的数据。

    不。出于某种原因,它有上次的数据 文本区 加载?!这是一个奇怪的怪癖。。。

    1 回复  |  直到 5 月前
        1
  •  1
  •   ADyson    5 月前

    您是否尝试一次提交一个文本区域?在这种情况下,把每一个放在自己的 <form> (该表单内也有一个按钮),然后当您按下按钮时,只会提交该表单内的数据。如果你需要发送一些东西来识别它,要么在按钮中输入一个值来帮助你,要么在表单中添加一个隐藏字段(例如,使用某种ID或PHP中处理数据所需的任何东西——从你的描述来看,这有点不清楚)。

    例如

    <form method="POST">
      <input type="hidden" name="ID" value="123"/>
      <textarea name="formMeta" rows="20" class="textarea"></textarea>
      <input type="submit" value="Submit" name="submitButton"/>
    </form>
    

    在页面上重复此模式,根据需要一次显示尽可能多的文本区域。