【问题标题】:Return the value of a textarea in PHP [duplicate]在PHP中返回文本区域的值[重复]
【发布时间】:2014-03-07 21:42:34
【问题描述】:

我正在使用简单的 HTML DOM 从数据表单中删除。我感兴趣的只是输入和文本区域、名称和值。这些名称对应于 MySQL 表中的列。除了我无法在 textareas 上获得返回值外,它大部分都像宣传的那样工作。我在这个网站和其他网站上进行了搜索,我发现最接近解决方案的是 [1]:Retrieve value of a textarea with PHP

我发现我必须通过两次“$html->load($result["body"])”来获取输入和文本区域的名称和值。当我尝试将每一个都包含在一个传递中时,该函数拾取了所有输入,但忽略了文本区域。所以我添加了第二遍来获取 textarea,它确实返回了 textarea 名称,但没有返回任何值。我可以在页面源代码和调试器中看到值。事实上,defaultValue、innerHTML、textContent 和 value 中的任何一个都显示相同的输出。代替“textarea [value]”,我已经尝试了上述所有属性。没有错误,什么都没有。

这是一个代码sn-p:

$url = "some url";
$web = new WebBrowser();
$result = $web->Process($url);

if (!$result["success"])  echo "Error retrieving URL.  " . $result["error"] . "\n";
else if ($result["response"]["code"] != 200)  echo "Error retrieving URL.  Server returned:  " . $result["response"]["code"] . " " . $result["response"]["meaning"] . "\n";
else
{
    echo "Order inputs: </br>";
    $html->load($result["body"]);
    $rows = $html->find("input[name]");
    $rows = $rows + $html->find("input[value]");
    foreach ($rows as $row)
    {
        echo "\t" . $row->name . "&nbsp;" . $row->value . "</br>";
    }
}

unset($html);
unset($result);
unset($rows);

$html = new simple_html_dom();
echo "</br></br>";

$result = $web->Process($url);

if (!$result["success"])  echo "Error retrieving URL.  " . $result["error"] . "\n";
else if ($result["response"]["code"] != 200)  echo "Error retrieving URL.  Server returned:  " . $result["response"]["code"] . " " . $result["response"]["meaning"] . "\n";
else
{
    echo "Order textarea(s): </br>";
    $html->load($result["body"]);
    $rows = $html->find("textarea[name]");
    $rows = $rows + $html->find("textarea[value]");
    foreach ($rows as $row)
    {
        echo "\t" . $row->name . "&nbsp;" . $row->value . "</br>";
    }
}

【问题讨论】:

  • 试过了:“注意:尝试获取非对象的属性...”
  • 所以发布您尝试过的内容。显然,您不会完全使用该答案中的内容,因为它包含对您很可能没有使用的元素类的引用。
  • 好的。代替“textarea[value]”,替换为“textarea[innerHTML]”或“textarea[textContent]”。我不是已经说过了吗?我刚刚尝试了“textarea [content]”,它返回内容、文本框和所有内容。

标签: php mysql


【解决方案1】:

文本区域没有值。它有内容(开始和结束标签之间的东西),而不是value 属性。

【讨论】:

  • 我的调试器显示了值,以及我提到的其他属性。
  • 好的。欢迎您继续使用value 然后.. :~)
  • 不,这就是问题的重点。再读一遍。我尝试了其他属性,但仍然一无所获。
  • 那是因为它根本不是一个属性。输入元素有一个值属性:&lt;input value="Here it is!"&gt;。文本区域有内容:&lt;textarea&gt;Here it is!&lt;/textarea&gt;.
  • 我有答案,但现在没有足够的分数来回答我自己的问题。答案是:明文,例如 find("textarea[plaintext]"); > 谢谢大家,我知道你试过了。如果我很狡猾,我深表歉意。
【解决方案2】:

答案是“明文”

$result = $web->Process($url);

if (!$result["success"])  echo "Error retrieving URL.  " . $result["error"] . "\n";
else if ($result["response"]["code"] != 200)  echo "Error retrieving URL.  Server returned:  " . $result["response"]["code"] . " " . $result["response"]["meaning"] . "\n";
else
{
    echo "Order textarea(s): </br>";
    $html->load($result["body"]);
    $rows = $html->find("textarea[name]");
    $rows = $rows + $html->find("textarea[plaintext]");

    $numtexts = 0;

    foreach ($rows as $row)
    {
        echo "\t" . $row->name . "&nbsp;" . $row->plaintext . "</br>";
        $numtexts = $numtexts + 1;
    }
}

这是一种有限的数据形式,具有可预测的输入和文本区域。正如我之前所说,input 和 textarea 名称对应于 MySQL 表列,因此很容易映射返回值。我在 Sourceforge 的简单 dom 手册中找到了适合我的答案。

【讨论】:

    【解决方案3】:

    你可能想要:

    $html->find('textarea', 0)->text();
    

    【讨论】:

    • “致命错误:不支持的操作数类型...”
    猜你喜欢
    • 2011-04-17
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2021-06-17
    • 2012-09-02
    • 1970-01-01
    相关资源
    最近更新 更多