PHP:获取带有Tag Name的元素索引

时间:2017-07-13 21:56:50

标签: php html

我正在尝试获取HTML元素的索引并将其传递给PHP变量以最终上传到数据库。

<form method="post" action="insert.php" enctype="multipart/form-data">
    ....
    <div><textarea name="paragraph[]"></textarea></div> //index 0
    <div><textarea name="paragraph[]"></textarea></div> //index 1
    <div><textarea name="paragraph[]"></textarea></div> //index 2
    ....
</form>

if(isset($_POST['paragraph'])) {

    foreach ( $_POST['paragraph'] as $paragraph){

    //get index of container div for this paragraph and store it in a variable

    }
}

看着this Stack Overflow answer,我猜我应该做点什么:

$divs = $dom->getElementsByTagName('div');

然而,有没有什么方法可以从<div>循环中获取当前<div>元素并存储它,而不是获取所有foreach元素并将它们存储在数组中变量中的索引?

一些澄清:表格是动态的。所以它看起来也像这样:

<form>
    <div><textarea name="paragraph[]"></textarea></div> //index 0
    <div><textarea name="something_else"></textarea></div> index 1
    <div><textarea name="paragraph[]"></textarea></div> //index 2
    <div><textarea name="paragraph[]"></textarea></div> //index 3
</form>

2 个答案:

答案 0 :(得分:2)

发送给PHP的参数只是输入,没有关于包含输入的HTML的信息。所以你不能得到DIV索引,因为它们不是输入的一部分。

您可以更改HTML,以便输入名称包含DIV索引。

<form>
    <div><textarea name="paragraph[0]"></textarea></div> //index 0
    <div><textarea name="something_else"></textarea></div> index 1
    <div><textarea name="paragraph[2]"></textarea></div> //index 2
    <div><textarea name="paragraph[3]"></textarea></div> //index 3
</form>

由于您是动态生成HTML,因此创建它的循环应该能够将DIV索引插入到文本区域的名称中。

然后您的PHP可以通过添加到foreach来获取索引。

foreach ($_POST['paragraph'] AS $divindex => $paragraph)

答案 1 :(得分:1)

您可以使用基本数组来保存所有项目,例如以下HTML:

var NBSref = textBox3.Text;
var Lenght = textBox1.Text;
var Width = textBox2.Text;

var separator = ",";

string csvpath = "FILE LOCATION";

StringBuilder csvcontentNew = new StringBuilder();
csvcontentNew.Append(NBSref + separator  + Lenght + separator  + Width);  // Try it like this

//String that will define CSV Location

File.AppendAllText(csvpath, csvcontentNew.ToString());

textBox1.Clear();
textBox2.Clear();
textBox3.Clear();

然后,当您访问<div><textarea name="items[][paragraph]"></textarea></div> //index 0 <div><textarea name="items[][something_else]"></textarea></div> index 1 <div><textarea name="items[][paragraph]"></textarea></div> //index 2 <div><textarea name="items[][paragraph]"></textarea></div> //index 3 时,您将列出其索引:

$_POST['items']

您可以使用以下循环轻松获取此阵列中保存的所有信息:

array (size=1)
  'items' => 
    array (size=4)
      0 => 
        array (size=1)
          'paragraph' => string 'test' (length=4)
      1 => 
        array (size=1)
          'something_else' => string 'test 2' (length=6)
      2 => 
        array (size=1)
          'paragraph' => string 'test 3' (length=6)
      3 => 
        array (size=1)
          'paragraph' => string 'test 4' (length=6)

将打印:

foreach($_POST['items'] as $index => $item) {
  echo "Index is: " . $index;
  echo "Key is: " . key($item);
  echo "Value is: " . $item[key($item)];
}

如果您希望轻松获取Index is: 0 Key is: paragraph Value is: test Index is: 1 Key is: something_else Value is: test 2 etc. 的所有值,可以使用array_column来访问这些值,例如:

paragraph

将打印:

array_column($_POST['items'], 'paragraph');