Textarea没有填写所有$ _GET数据,用引号中断

时间:2012-03-23 02:08:57

标签: php html textarea

我有一个从上一页启动的文本区域页面:

$message = $_POST['editPost'];
header("location:editPost.php?msg=$message");

editPost.php检索此内容并填充文本区域,如下所示:

echo "<form action='index.php' method='post'>
Your Post:<br/>
<textarea name='comments' cols='100' rows='100'>".$_GET["msg"]."</textarea>
<br/>
<input type=submit value='submit'>
</FORM>";

我得到的问题并非所有'msg'的数据似乎都被传递过来,或者消息在达到引号时被切断,例如“

我希望它用文本填充textarea的文本:

  

所以这是我这篇作业的第二篇博客文章,自从我上一篇文章

以来,我已经取得了一些进展

然而,它只将此添加到文本区域:

  

所以这是我的第二篇博客文章,我

正如我所说,在达到引号后似乎不再包含任何字符串。反正有这个,所以我可以传递整个信息吗?

修改

我可能会补充一点,我知道一个更简单的解决方案是从MySQL数据库中再次检索消息,因为我正在使用它,但我只是对它的工作方式感兴趣。

if(isset($_POST['edit'])) {
//$_SESSION['postToEdit'] = $_POST['editPost'];
$message = htmlentities($_POST['editPost'], ENT_QUOTES);
header("location:editPost.php?msg=$message");

这是我从这个表单发布后对数据的处理方式:

foreach($posts as $postid=>$post)
            {
                echo '<div class="blogPosts">'.$post;
                if(isset($_SESSION['username'])) {
                    if($_SESSION['isAdmin'] == "true") {

                        echo "<br/><br/><form name='adminTools' action='index.php' method='post'>
                        <input type='hidden' name='editPost' value='$post'>
                        <input type='submit' value='Edit' name='edit'/>
                        <input type='hidden' name='deletePost' value='$postid'>
                        <input type='submit' value='Delete' name='delete' /></form>
                        </div>";

3 个答案:

答案 0 :(得分:1)

echo "<form action='index.php' method='post'>
Your Post:<br/>
<textarea name='comments' cols='100' rows='100'>".htmlspecialchars($_GET["msg"])."</textarea>
<br/>
<input type=submit value='submit'>
</FORM>";

textarea似乎是一个奇怪的容器,但这是你的电话

答案 1 :(得分:0)

我想我明白了。

header("location:editPost.php?msg=$message");闻起来不太好。

如果您只是想解决问题,请使用http://php.net/manual/en/function.urlencode.php并在获取值http://www.php.net/manual/en/function.urldecode.php

您收到了一个帖子请求,然后使用标头位置转发它。这绝对是一种糟糕的方式。将参数作为?msg=$message

上的查询字符串传递时,可能会出现此问题

由于MVC和类似的应用程序(n层应用程序)现在已成为标准。您不应该使用意大利面条代码,混合使用html和php以及使用标头作为FrontController调度程序。

我建议您使用SLIM框架。如果你不想学习这个。您至少应遵循here所述的标准。

E.g:

<?php
// index.php

// load and initialize any global libraries
require_once 'model.php';
require_once 'controllers.php';

// route the request internally
$uri = $_SERVER['REQUEST_URI'];
if ($uri == '/index.php') {
    list_action();
} elseif ($uri == '/index.php/show' && isset($_GET['id'])) {
    show_action($_GET['id']);
} else {
    header('Status: 404 Not Found');
    echo '<html><body><h1>Page Not Found</h1></body></html>';
}

简而言之,创建一个FrontController文件,该文件将根据请求映射到所需的操作(控制器),而不使用header()来执行特定的操作(例外情况是,实际上只需要实际的头文件)

答案 2 :(得分:-1)

在显示之前使用addslashes($ message)将其传递给querystring和stripslashe($ _ GET ['msg'])函数。 点击addslashes()stripslashes()以获取更多参考资料。