0

分解機能とセッション変数を組み合わせると、何が間違っているのかを理解しようとしています。私はすでにセッション変数と爆発関数についてかなりの量の調査を行ってきましたが、2 つを「結合」するためのヘルプを見つけるのに苦労しました。

以下は私が使用しているコードです。$_SESSION['shirt_type']それが「爆発」していることに気付くでしょう。この変数は、シャツの種類と価格の 2 つの情報を収集します。$_SESSION['shirt_type']2つのチャンクに爆発したい。

ただし、次を使用してチャンク[0]または[1]をエコーし​​ようとすると、

echo "Shirt Type = {$_SESSION['$shirt_type_chunks[0]']}<br>";
echo "Shirt Price = {$_SESSION['$shirt_type_chunks[1]']}<br>";

私のWebページは次のように表示されます

Shirt Type = 
Shirt Price = 

構文が間違っていると思います。展開されたセッション変数をエコーし​​ようとしたときに、正しい構文を示す場所を見つけることができませんでした。

提供できるヘルプは非常に高く評価されます。また、私は StackOverflow を初めて使用するので、間違って投稿した場合はお詫び申し上げます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<?php
session_start();
$_SESSION['shirt_type'] = $_POST['shirt_type'];
$_SESSION['shirt_type_chunks'] = explode("|", $shirt_type);

$_SESSION['shirt_size'] = $_POST['shirt_size'];
$_SESSION['shirt_size_chunks'] = explode("|", $shirt_size);

$_SESSION['shirt_qty'] = $_POST['shirt_qty'];

$_SESSION['price'] = $_SESSION['$shirt_type_chunks[1]'] + $_SESSION['$shirt_size_chunks[1]'];
?>
</head>
<body>
<p>
  <?php
    session_start();

    echo "Shirt Type = {$_SESSION['$shirt_type_chunks[0]']}<br>";
    echo "Shirt Price = {$_SESSION['$shirt_type_chunks[1]']}<br>";
    echo "Shirt Up Charge = {$_SESSION['$shirt_size_chunks[1]']}<br>";
    echo "Shirt Size = {$_SESSION['$shirt_type_chunks[0]']}<br>";
    echo "Shirt Qty = {$_SESSION['shirt_qty']}<br>";

    echo "Price = {$_SESSION['price']}<br>";
  ?>
</p>
</body>
</html>
4

1 に答える 1

1

出力の前にセッションを開始する必要があります。コードを次のように変更します。

<? session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
...
<title>Untitled Document</title>
<?
$_SESSION['shirt_type'] = $_POST['shirt_type'];
$_SESSION['shirt_type_chunks'] = explode("|", $shirt_type);
$_SESSION['shirt_size'] = $_POST['shirt_size'];
$_SESSION['shirt_size_chunks'] = explode("|", $shirt_size);

$_SESSION['shirt_qty'] = $_POST['shirt_qty'];

$_SESSION['price'] = $_SESSION['$shirt_type_chunks[1]'] + $_SESSION['$shirt_size_chunks[1]'];
?>
</head>

ここで間違っている 2 つ目はregister_global = on、システム上では $_SESSION['shirt_type'] と $shirt_type が同じ変数になる可能性があることです。$_POST['some_name'] と $some_name または $_SESSION['var_name'] と $var_name など、変数にグローバル変数と同じ名前を使用しないようにしてください。

そして、@brenjt が気付いた 3 番目の問題は、スクリプトで必要な呼び出しは 1 つだけですsession_start()

4 番目の =)$_SESSION['$shirt_type_chunks[1]']は機能しません。PHP で一重引用符を使用すると、インタープリターは文字列内の変数を見つけようとさえしません。小さな例:

<?
$a = "Mike";
echo "Hi, my name is $a"; // will output Hi, my name is Mike
echo 'Hi, my name is $a'; // will output Hi, my name is $a
echo 'Hi, my name is '.$a; // will output Hi, my name is Mike
?>

3 番目の方法が最も効率的です。この場合、PHP は単一引用符を認識し、文字列の分析にリソースを費やさないからです。だからそれを $_SESSION[$shirt_type_chunks[1]]

これが、私が推測するように、あなたが向かっていたものです:

<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<?php
$shirtDetails = explode("|", $_POST['shirt_type']);
$_SESSION['shirt_type'] = $shirtDetails['0'];
$_SESSION['shirt_price'] = $shirtDetails['1'];

$sizeDetails = explode("|", $_POST['shirt_size']);
$_SESSION['shirt_size'] = $sizeDetails[0];
$_SESSION['shirt_up_charge'] = $sizeDetails[1];
$_SESSION['shirt_qty'] = $_POST['shirt_qty'];

$_SESSION['price'] = $_SESSION['shirt_qty'] * $_SESSION['shirt_price'] + $_SESSION['shirt_up_charge'];
?>
</head>
<body>
<p>
  <?php
    echo 'Shirt Type = '.$_SESSION['shirt_type'].'<br>';
    echo 'Shirt Price = '.$_SESSION['shirt_price'].'<br>';
    echo 'Shirt Up Charge = '.$_SESSION['shirt_up_charge'].'<br>';
    echo 'Shirt Size = '.$_SESSION['shirt_size'].'<br>';
    echo 'Shirt Qty = '.$_SESSION['shirt_qty'].'<br>';
    echo 'Total Price = '.$_SESSION['price'].'<br>';
  ?>
</p>
</body>
</html>

最後の質問 - 各フォーム プロパティに対して単一の入力を作成しないのはなぜですか? なぜこのデータを | で連結したいのですか? 本当に必要ですか?

于 2013-03-21T18:13:23.293 に答える