当元素名称未知时,从$ _POST数组中获取输入元素名称

时间:2011-11-17 12:27:41

标签: php string parsing post

我有一个PHP文件,其中包含另一个文件,用于通过循环MySQL查询的结果创建表,然后将所有HTML和PHP变量作为字符串返回。该字符串在div标签中回显。

创建表的PHP函数还会创建具有唯一名称和ID的输入元素,这些名称和ID来自它所在的行/列的名称。这意味着每个控件都是唯一的,我不知道哪个将用于提交数据。这样做我可以通过JavaScript使用在线编辑。这样,用户只需单击页面上表格中的元素,即可显示隐藏的输入控件。

点击提交表单帖子。要知道数据应该在数据库中的位置以及如何为更新生成SQL字符串,我需要获取已发布的文本框的名称。 post数组只包含两个元素,即提交按钮和文本框。我该如何解析这个名字?

目前我正在检查是否已使用以下代码设置了提交按钮:

if(isset($_POST['submit'])) 
{
  //do stuff here
  $sql= update TABLENAME set ...

  $results = $dbConnect->prepare($sql);
}

等。

示例$_POST数组内容是:

Array ( [submit] => submit [newText_primaryKey_columnName] => User Input Text )

3 个答案:

答案 0 :(得分:0)

如果您知道数组中只有两个键,而您只想要一个未提交的键,请从数组中删除提交,剩下的就是您的键:

$post = $_POST;
unset($post['submit']);
$keys = array_keys($post);
$key = $keys[0];

一个完整的例子:

<?php
//$post = $_POST;
$post = array('submit' => True, 'some key I made up' => 'foobar');
unset($post['submit']);
$keys = array_keys($post);
$key = $keys[0];

print $key;
// some key I made up

答案 1 :(得分:0)

如果您使用标准名称(如单元格)启动所有Cell Id,则很容易将其拉出。

//Assuming CellID's Like cell_1, cell_2, cell_3 etc

foreach ($_POST as $Key => $Value)  //Check all posted values
{
    if (strpos('cell',$Key) !== false ) //if cell is at the begining of the key name
    {
        $OurKey = $Key; 
            //This will put cell into $temp and our id will be put in $CellID
        list($temp,$CellID) = implode('_', $OurKey);
        break;
    }

}

//Do Something With Our ID
SubmitData($CellID, $Value);

我希望这就是你所追求的目标。

一种相关的注释,您可能会发现YUIjquery等javascript库可用于减少所需的嵌入式表单的数量。值得研究。

答案 2 :(得分:0)

如果您的$_POST数组看起来像这样:

Array ( [submit] => submit [newText_primaryKey_columnName] => User Input Text )

然后你可以找到不是提交输入的密钥:

$my_key = '';
if (!empty($_POST)) {
    foreach ($_POST as $key => $val) {
        if ($key != 'submit') {
            $my_key = $key;
        }
    }
}

//you can now access the value of your text input using $_POST[$my_key]
//you can also determine what to do with your information

$tmp = explode("_", $my_key);//$tmp[0] = "newText"; $tmp[1] = "primaryKey"; $tmp[2] = "columnName";