在页面之间传递$ _SESSION变量

时间:2013-05-13 18:41:36

标签: php session-variables

编辑:session_start()位于“初始页面的整个代码”中,但未显示。我需要另一个换行符。

编辑2:显示原始HTML的输出而不是显示的页面。

我正在处理文档转换网站。它需要一个或两个页面的.docx文件并将其转换为简单的html。 (基本上用p标签替换换行符,没有html或head标签,因为它将显示在现有页面中)。出于测试目的,我正在使用单个单词 - “one” - 转换.docx文件。

我将转换后的数据作为字符串存储在变量$ _SESSSION ['doc']中。由于我遇到的问题,我还存储了一个$ _SESSION ['test']字符串。

我在初始页面上执行var_dump($ _ SESSION),我可以看到两个变量都带有填充字符串。

我在下面的屏幕上做了一个var_dump($ _ SESSION),$ _SESSION ['test']字符串没问题,但$ _SESSION ['doc']现在是一个0长度的字符串。我不确定是什么在截断我的'doc'字符串。

相关变量是$ _SESSION ['doc'],$ _SESSION ['test']和$ outputData。我在这篇文章末尾包含了整个第一页,因为我怀疑$ outputData被覆盖了。

我相信这是初始页面的相关代码段:

<?php $outputData = preg_replace("/.+/", "<p class='converted'>$0</p>", $outputData);
                              $outputData = preg_replace("/<\/p>\n\n/", "<br /><br /></p>", $outputData); ?>
                <?php if(isset($outputData)){$_SESSION['doc'] = $outputData;}else{$_SESSION['doc']="JustATest";} $_SESSION['test'] = "<>()!';!SDFSDFG^%$"; echo "\n<div><br /><br />var_dump: " . var_dump($_SESSION) . "</div>"; ?>

输出:

array(2) {
["doc"]=>
string(32) "<p class='converted'>one</p>
"
["test"]=>
string(18) "<>()!';!SDFSDFG^%$"

后续页面上的相关代码:

<?php if(session_id() == ''){session_start();}

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

global $woocommerce;

$woocommerce->show_messages();
?>

<div>session_id: <?php echo session_id(); ?><br />OUTPUT: <?php echo var_dump($_SESSION); ?></div>

<?php do_action( 'woocommerce_before_cart' ); ?>

<form action="<?php echo esc_url( $woocommerce->cart->get_cart_url() ); ?>" method="post">

后续页面的输出:

session_id: jl40cdmbdpd3h40qg3ogmghkp0
OUTPUT: array(2) { ["doc"]=> string(0) "" ["test"]=> string(18) "<>()!';!SDFSDFG^%$" }
编辑:我没有查看原始HTML。 /我摇头。

IGNORE: One thing I found strange on the initial page is the single word "one" is showing up as a 32 char string. . . so there seems to be some extraneous white space after the document conversion. . . but it still outputs from the $_SESSION['doc'] variable on the initial screen.

初始页面的整个代码:

<?php if(session_id() == '' ){session_start();}

if(isset($_POST['added']))
{
add_basic_edit( $_POST['id'], $_POST['wc'] );
unset($_POST['added']);
header('Location: http://localhost/cart/');
exit;
}
/* Template Name: Upload Page */ get_header();

/**
 * Test code to programmatically add a pricing calculator product to the cart, on
 * every page load
 */
function add_basic_edit( $product_id, $num_words ) {

global $wc_measurement_price_calculator;

$product = get_product( $product_id );  // id of my 'word' product

$measurements = $wc_measurement_price_calculator->get_product_measurements( $product );

// get the one measurement
foreach ( $measurements as $measurement ) ;

$measurement->set_value( $num_words );  // the number of words

// add to cart
$wc_measurement_price_calculator->add_to_cart( $product->id, $measurement );
/var/www/html/websites/localhost/wordpress/wp-content/themes/Avada/upload.php}

if(isset($_POST['posted']))
{
require_once 'HTTP/Request2.php';

class DocumentConverterClient {
    var $url = '';

    function convert($inputFile, $outputType) {
        $this->url="http://localhost:8080/jodconverter-sample-webapp-3.0-SNAPSHOT/converted/$inputFile.$outputType";
        $request = new HTTP_Request2($this->url);
        $request->setMethod(HTTP_Request2::METHOD_POST)
            ->setHeader('Content-Type', 'multipart/form-data')
            ->addPostParameter('outputFormat', $outputType)
            ->setBody($inputData);
        $request->addUpload('inputDocument', $inputFile);

        return $request->send()->getBody();
    }
}

$documentConverter = new DocumentConverterClient();

$inputFile = $_FILES['inputDocument']['tmp_name'];
$outputType='txt';
$noext=current(explode(".", $_FILES["inputDocument"]["name"]));
$inputType=end(explode(".", $_FILES["inputDocument"]["name"]));
$outputFile = "data/$noext.$outputType";

$outputData = $documentConverter->convert($inputFile, $outputType);
//file_put_contents($outputFile, $outputData);
} ?>

<div class="column_group"><br /><br />
    <div style="float:left;width:30%;" class="left_clumn">
        <div style="float:left;width:35%">Wordcount:</div><div><?php $wc = str_word_count($outputData); echo $wc;?>
        </div>
        <div style="float:left;width:35%">Price Per Word:</div><div>$<?php $product_id=get_page_by_title('Basic Editing', 'OBJECT', 'Product' ); $product = get_product( $product_id->ID ); $ppw = $product->get_price(); echo $ppw;?>
        </div>
        <div style="float:left;width:35%">Total Price:</div><div>$<?php echo number_format(($wc * $ppw),2);?>
        </div>
        <div><br /><br />
            <form name="add_to_cart" id="add_to_cart" action="../upload-page/" method="post">
                <input type="hidden" name="added" value="added" />
                <input type="hidden" name="id" value="<?php echo $product_id->ID; ?>" />
                <input type="hidden" name="wc" value="<?php echo $wc; ?>" />
                <?php $outputData = preg_replace("/.+/", "<p class='converted'>$0</p>", $outputData);
                              $outputData = preg_replace("/<\/p>\n\n/", "<br /><br /></p>", $outputData); ?>
                <?php if(isset($outputData)){$_SESSION['doc'] = $outputData;}else{$_SESSION['doc']="JustATest";} $_SESSION['test'] = "<>()!';!SDFSDFG^%$"; echo "\n<div><br /><br />var_dump: " . var_dump($_SESSION) . "</div>"; ?>
                <span class="BlueButton" onclick="document.getElementById('add_to_cart').submit()">Add to Cart</span>
            </form>
        </div>
</div>
    </div>
    <div style="float:right;width:70%;" class="right_column">
        <div><?php echo $outputData; ?></div>
    </div>
</div>

<div id="content" style="<?php echo $content_css; ?>">
</div>
<div id="sidebar" style="<?php echo $sidebar_css; ?>"><?php generated_dynamic_sidebar(); ?></div>
<?php get_footer(); unset($_POST['posted']); ?>

2 个答案:

答案 0 :(得分:1)

在将任何呈现为页面输出之前,您必须将session_start()添加到所有页面的顶部。

Source

答案 1 :(得分:0)

这是一个糟糕的答案,因为我仍然不知道为什么$ _SESSION ['doc']被覆盖,特别是因为$ _SESSION ['test']被保留了。我认为它与我处理表单数据的各种if(isset())语句有关。我相信其中一个人在某个时候会覆盖$ outputData。 。 。但我不确定在哪里。

我改变了第一个这样的语句来从_POST变量中获取outputData:

if(isset($_POST['added']))
{
    add_basic_edit( $_POST['id'], $_POST['wc'] );
    unset($_POST['added']);
    $_SESSION['doc'] = $_POST['outputData'];
    header('Location: http://techleadnet.com/cart/');
    exit;
}

我在表单中添加了一个隐藏的输入,并添加了几个正则表达式来删除单引号和双引号:

$outputData = preg_replace("/\"/", "&quot;", $outputData);
$outputData = preg_replace("/\'/","&rsquo;", $outputData);

<input type="hidden" name="outputData" value="<?php echo $outputData; ?>" />

如果有人可以指出我在弄乱$ _SESSION ['doc']变量的位置,或者$ outputData被覆盖的地方,这将是一个更好的答案。

尝试尝试使用if语句创建session_start(),这两个页面中的第一件事,但它没有什么区别。