PHP会话将保留文本但不保留已发布的变量值

时间:2012-01-16 04:37:20

标签: php session variables format

以下代码涉及使用由php表单事件触发的脚本对Facebook应用程序用户进行身份验证。我通过HTML表单发布一个字符串,其中包含以下代码:

<html>
<body>
<form name="form" enctype="multipart/form-data" action="test.php" method="post">
    <input name="message" type="text" value=""><br/><br/>
    <input type="submit" value="Upload"/><br/>
</form>
</body>
</html>

test.php的代码是:

<?php session_start(); ?>
<html>
   <head xmlns:worldcentric="https://apps.facebook.com/testapp/ns#">
     <title>Test App</title>
   </head>
   <body>
   <?php
    $app_id = "191622610935428";
    $my_url = "http://www.thepropagator.com/facebook/testapp/test1.php";
    $string1 = (string)$_POST["message"];
    $_SESSION['str'] = $string1;
   // $string2 = "teststring";
   // $_SESSION['str'] = $string2;

  $code = $_REQUEST["code"];
  if(empty($code)) {
    $dialog_url = "https://www.facebook.com/dialog/oauth?client_id="
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&scope=email,publish_actions";
    echo("<script>top.location.href='" . $dialog_url . "'</script>");
  }

$string3 = $_SESSION['str'];
echo $string3;
   ?>
   </body>
 </html>

对于上面的代码,我试图存储在

中的信息
$_SESSION['str']

没有被保留。但是,当我更换行

    $string1 = (string)$_POST["message"];
    $_SESSION['str'] = $string1;

用注释掉的行:

    $string2 = "teststring";
    $_SESSION['str'] = $string2;

文本“teststring”确实传递了。正如您所看到的,我尝试将$ _POST [“message”]转换为字符串,但它无论如何都无法正常工作。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您不需要强制转换为字符串,因为默认情况下PHP会将其视为字符串。

我唯一能想到的是,你确定$_POST['message']拥有什么东西吗?回应它以确保它不是空的。

尝试这样的事情:

$_SESSION['str'] = (empty($_POST['message'])) ? "empty" : $_POST['message'];

此外,在您的HTML中,

<input name="message" type="text" value="">

您尚未关闭输入标记。

答案 1 :(得分:0)

该行:

echo("<script>top.location.href='" . $dialog_url . "'</script>");

导致脚本从顶部重新执行。这个问题存在两个问题,即我将我的信息存储在一个常规变量中,当脚本重新开始时,该变量被删除,修复程序是使用会话变量。另一个问题是当脚本重新开始并阅读该行时:

$string1 = (string)$_POST["message"];

这次没有发布,所以它正在删除变量。我通过用以下内容替换上面的行来解决这个问题:

if(empty($ _ SESSION ['string']))   $ _SESSION [ '字串'] = $ _ POST [ “消息”];

if(empty($ _ SESSION ['string']))   $ _SESSION [ '字串'] = $ _ POST [ “消息”];