【问题标题】:$_POST dropped due to htaccess redirect$_POST 由于 htaccess 重定向而被丢弃
【发布时间】:2014-04-09 21:07:52
【问题描述】:

我有以下代码,但是当我回显 $url、$id2 或 $message 时,变量显示为空。 php 操作文件没有问题并且正在工作。请注意,这是使用 php 回显的,并且显示得很好。

<form name="comment" method="post" action="comment.php" onSubmit="return form_Validator(this)">
<table width=\"100%\">
    <tr>
            <th colspan=\"2\">Title</th>
    </tr>
    <tr valign=\"top\">
            <th scope=\"row\"> </th>
            <td><div align=\"center\"><textarea class=\"formtext\" tabindex=\"4\" id=\"message\" name=\"message\" rows=\"10\" cols=\"50\"></textarea></div></td>
    </tr>

    <tr>    
            <td>&nbsp;</td>
            <td><div align=\"center\"><input type=\"submit\" name=\"post\" class=\"submit\" value=\"Comment\" /></div><br />
</td>
    </tr>
</table>
<input type=\"hidden\" name=\"submit\" value=\"true\"> 
<input type=\"hidden\" name=\"url\" value=\"$url\" />
<input type=\"hidden\" name=\"id2\" value=\"$id2\" />
</form>

澄清:问题是我发送给 php 函数的变量结果是空的。他们什么都没有。我查看了其他已回答的类似问题的问题,有人提到重写规则可能会弄乱 $_POST 的东西。真的吗?我是否必须在 htaccess 中添加其他内容才能传输变量?

另外,PHP 文件:

<?php
if (userinfo['userid']!=0) {


$url = $_POST["url"];
$id2 = $_POST["id2"];
$email = $_POST["email"];
$message = $_POST["message"];

// These return nothing:
echo $url;
echo $id2;
echo $message;

$sendcomment = mysql_query("INSERT INTO comments SET tutorialid='$id2', email='$email', comment='$message', date=now()");

if($sendcomment){
    header("Location: $url");
} else {
    // Do Nothing
}
} else {
    header("Location: 403.php");
}
?>

【问题讨论】:

  • 您面临的问题是什么?
  • 你也可以展示你的PHP代码吗?
  • 此外,&lt;input type=\"hidden\" name=\"submit\" value=\"true\"&gt; 是干什么用的?
  • 你为什么要逃避所有这些引号
  • 由于 textarea 为空,因此无法正常显示。问题在于我应该在 textarea> 之后和 之前输出数据的 php 代码。我们需要看看 PHP 代码以及它是如何获得它的价值的。

标签: php html forms post


【解决方案1】:

你为什么要逃跑?

删除它就可以了

<form name="comment" method="post" action="comment.php" onSubmit="return form_Validator(this)">
<table width="100%">
    <tr>
            <th colspan="2">Title</th>
    </tr>
    <tr valign="top">
            <th scope="row"> </th>
            <td><div align="center"><textarea class="formtext" tabindex="4" id="message" name="message" rows="10" cols="50"></textarea></div></td>
    </tr>

    <tr>    
            <td>&nbsp;</td>
            <td><div align="center"><input type="submit" name="post" class="submit" value="Comment" /></div><br />
</td>
    </tr>
</table>
<input type="hidden" name="submit" value="true"> 
<input type="hidden" name="url" value="$url" />
<input type="hidden" name="id2" value="$id2" />
</form>

demo

删除不正确的这部分代码:

 if($sendcomment){
    header("Location: $url");
} else {
    // Do Nothing
}
} else {
    header("Location: 403.php");
}

【讨论】:

  • 不,因为正如我在主帖中所说,我使用 php 回显整个表单。因此,它类似于: echo "所有带有转义的 html 代码";我相信,这与重写规则有关。
  • 所以,我发现了问题,但我不知道如何解决。问题出在设置重定向的 htaccess 中。因此,所有 $_POST 数据都将被删除。有没有办法让它忽略我的 sendcomment.php 的规则?如何修复 htaccess 文件,使其不会重定向并且 $_POST 数据不会丢失?
  • 你能告诉我整个代码吗?在这种情况下,不需要转义,只需执行 echo "" 并在标签内使用 '
  • 请出示您的 htacces 文件。问题可能与stackoverflow.com/a/4638696/3489793 重复
  • 您是否尝试过删除文件中的所有代码并仅使用 看看它是否输出了什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多