【问题标题】:$_post inside for loop$_post 在 for 循环中
【发布时间】:2014-05-02 08:50:59
【问题描述】:

我正在尝试在 php 中玩耍,但进展并不顺利。我正在尝试通过 html 中的输入字段更改字符串

HTML 部分

<form action="index2.php" method="POST">
<textarea name="text"><?php echo $search_replace; ?></textarea><br>
search<br><input type="text" name="search"><br>
replace<br><input type="text" name="replace">
<input type="submit">
</form>

php部分

$text = $_POST[text];
$search = $_POST[search];
$replace = $_POST[replace];
$search_replace = str_replace($search, $replace, $text);

这可行,但我想尝试将所有变量放在 for 循环中,只是为了尝试新事物。这就是我最终得到的结果(可能应该使用 foreach):

$field = array('text', 'search', 'replace');
for($i = 0; i > 3; $i++) {
 if(isset($_POST[$field[$i]]) &&!empty($_POST[$field[$i]])) {
 $field[$i] = $_POST[$field[$i]];
 }
}
$search_replace = str_replace($field[1], $field[2], $field[0]);

$field[0] 中仍然有“文本”。 for 循环后的值不应该是 $_POST[$field[0]] 吗?我需要创建单独的数组吗?一个是字段名称,一个是空的,用于存储 $_POST[field[i]]?

【问题讨论】:

  • $i 不应该低于 3 而不是高于 3?
  • 这个循环真的有效吗? for ($i = 0; i &gt; 3; $i++) 真的应该是 for ($i =0; $i &lt; 3; $i++)... 带有美元符号和反向不等式。
  • 你用 0 声明 $i。然后你说,$i > 3。但是 $i 小于 3。它应该是。 ($i = 0; $i
  • 你也忘记了 for 循环中第二个 'i' 的 '$'
  • 并且在 php 部分中,您应该用引号将索引名称括起来。

标签: php arrays for-loop isset


【解决方案1】:

像这样改变:

for($i = 0; $i < 3; $i++) 
{
     if(isset($_POST[$field[$i]]) &&!empty($_POST[$field[$i]])) {
     $field[$i] = $_POST[$field[$i]];
}

在您的代码中,循环是这样的:

for($i = 0; i > 3; $i++)

您忘记在 for 循环中的第二个“i”之前添加 $ 符号。

第二个条件是$i &gt; 3。 您将 $i 初始化为 0 并检查 $i 是否大于 3,如果大于 3,则增加 $i,这永远不会发生,因为 $i 最初为 0。

所以一定是$i&lt;3

【讨论】:

  • 复制问题!忘记美元符号了。
  • @mavrosxristoforos 已清除 :-)
  • 你改变了什么,为什么这段代码现在是正确的?请详细说明你的答案。
  • 哇,我现在真的很笨,谢谢你的回答。所以代码真的有效。不错
【解决方案2】:

你可以这样做:

<?php
$posted = array();
if (! empty($_POST)) {
    foreach ($_POST as $pk => $pv) {
        if (! empty($k)) {
            $posted[$pk] = $pv;
        }
    }
}
?>

因为,$_POST 本身就是一个数组。它有键和值。

如果一个表单元素被发布,我们通过$_POST['varName']的方式得到它,

我们正在访问 $_POST 的密钥 varname

此外,我们正在检查它是否为空。所以只会提取那些发布的变量。

<?php
echo '<pre>';
print_r($posted);
echo '</pre>';
?>

【讨论】:

  • 为什么你认为这是正确的答案?请详细说明。
  • 另外请说明此代码将分配任何用户可能发布的任何值,从而允许 XSS。
猜你喜欢
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 2013-01-23
  • 2011-10-18
  • 2015-01-28
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多