【问题标题】:How to echo php Session when using objects使用对象时如何回显php Session
【发布时间】:2011-10-11 18:58:13
【问题描述】:

我无法弄清楚这一点,并尝试了几种方法。

我有一个多页表单,form_1.php 在提交时将信息发送到数据库并重定向到 form_2.php。

我在 form_1.php 上开始一个会话:

<?PHP
if ($_POST)
{
    session_start();

    foreach ($_POST as $field => $value)
    {
        $_SESSION['formdata'][$field] = $value; 
    }
}
.....code that sends info to db and then redirects page to form_2.php
?>

当我到达 form_2.php 时,我有:

<?php

session_start();

if (!empty($_POST)) {

    // Used for later to determine result
    $success = $error = false;

    // Object syntax looks better and is easier to use than arrays to me
    $post = new stdClass;

    // Usually there would be much more validation and filtering, but this
    // will work for now.
    foreach ($_POST as $key => $val)
        $post->$key = trim(strip_tags($_POST[$key]));

....more code that loads dompdf and sends a pdf to email
?>

如果我使用类似的东西:

<?php echo $post->Name; ?>
<?php echo $post->Address; ?>
<?php echo $post->City; ?>
<?php echo $post->State; ?>

我希望在哪里显示数据,但我什么也得不到。

有没有办法写这个相当于:

<?php echo $_SESSION['Name'] ?>

是因为我在使用对象吗?

如果我擦除 form_2.php 中的所有内容并使用以下命令打印会话:

<?php 
 session_start(); 
 Print_r ($_SESSION);
 ?> 

我看到了我想要的数据:

Array ( [sfm_from_iframe] => 0 [formdata] => Array ( [sfm_form_submitted] => yes [Employer_Zip] => 33333 [Injury_type] => Array ( [0] => Head [1] => Left Shoulder [2] => Chest ) [FirstName] => test [LastName] => tester [Address] => 1212 myaddy [City] => city1 [State] => Maine [Zip] => 55555 [Country] => AntiguaAndBarbuda [Phone] => 555-555-5555 [Email] => me@mydomain.com [Employer_Name] => my employer [Employer_Address] => 1212 empaddy [Employer_City] => city2 [Employer_State] => Georgia [DBA_Carrier] => mycarrier [Employer_Phone] => 333-333-3333 [Accident_Date] => 10-03-2011 [Message] => asefsafsadf sadf asdfsdafsadf [yes_no] => yes [SocialSecurity] => 333-33-3333 [Submit_x] => 57 [Submit_y] => 13 ) ) 

可能有帮助的附加说明...

当我只是使用 POST 到 form_2.php 并使用

<?php echo $post->Name; ?> 
<?php echo $post->Address; ?> 
<?php echo $post->City; ?> 

一切都显示出来并且工作正常,但只能直接使用 POST 到该页面。不使用重定向,因为我认为我在编写如何回显 SESSION 对象时搞砸了。

有什么想法吗?

【问题讨论】:

  • 我不太明白您的会话问题是什么。能否获取form_2.php的源代码?

标签: php session object


【解决方案1】:

你是这样重定向的吗:

form1 -submit-> 插入到 DB 中的文件 -redirect-> form2

如果是这种情况,那么您应该知道 POST 数据不会被转发到第三页。如果没有更多信息,很难给出一个好的答案,但也许您应该在 form2 的顶部包含您的数据库插入脚本并将 form1 直接转发到 form2,或者您应该将您的 POST 数据保存到您的会话中,然后在 form2 的顶部获取。

希望有帮助:)

【讨论】:

  • 我正在使用 simfatic 表单(软件)将所有信息发送到数据库......它只是在提交后创建一个重定向,所以我不确定我是否正确说没有发布到 form_2.php。只是一个重定向。来自 simfatic 的代码只定义了这样的重定向: $tupage = new FM_ThankYouPage(); $tupage->SetRedirURL("myurl.com/pdf_email/form_2.php"); $formmailobj->addModule($tupage);
【解决方案2】:

您正在混淆您的 OOP 框架(可能是某种 CMS)提供的代码,并且当您的数据不存在时您尝试使用 $post。

$_SESSION 用于在页面更改之间保存数据。您可以在您的 form2.php 中使用以下代码将所有内容合并在一起:

foreach ($_POST as $key => $val){
        $post->$key = trim(strip_tags($_POST[$key]));
}
foreach($_SESSION['formdata'] as $key => $val){
        $post->$key = trim(strip_tags($_POST[$key]));
}

然后,当你检查你的 $post 对象时,你现在应该有你的数据了。

祝你好运

【讨论】:

  • 我相信你的权利,有些东西正在混合......这是作为 simfatic 形式的黑客添加的:if ($_POST) { session_start(); foreach ($_POST as $field => $value) { $_SESSION['formdata'][$field] = $value; } } 这在 form_2 上使用,因为在表单 2 上我使用 dompdf,这更容易 // 对我来说,对象语法看起来更好,比数组更容易使用 $post = new stdClass; // 通常会有更多的验证和过滤,但这 // 现在可以工作。 foreach ($_POST as $key => $val) $post->$key = trim(strip_tags($_POST[$key]));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多