0

PHP のセッションについて質問があります。

セッションを設定するためにPHPでコーディングしましたが、それを削除したいのですが、エラーが発生し、UNSET(変数$_SESSION)を使用すると混乱します。この件について私が何をすべきかを示すために、誰かが私を助けてくれるかもしれません。前もって感謝します

                    $_SESSION['chart'] = array();
                    $_SESSION['chart'][0]['index']  = 0
                    $_SESSION['chart'][0]['type'] = $type;
                    $_SESSION['chart'][0]['idanimal'] = $iddog;
                    $_SESSION['chart'][0]['price'] = $price;
                    printdata(); // <== this is the function to print out the data

私がしたいのは、このセッションのインデックスに基づいて削除することだけです

関数は次のとおりです。

function printdata()
                {
                    $totalharga = 0;
                    if(is_array($_SESSION['chart']))
                    {
                    echo "<h3>"."Berikut adalah keranjang belanja anda" . "</h3>". "<br>";
                    $max = count($_SESSION['chart']);  
                    $th1 = "<th>" . "No" . "</th>";
                    $th2 = "<th>" . "Animal Type" . "</th>";
                    $th3 = "<th>" . "ID Binatang" . "</th>";
                    $th4 = "<th>" . "Harga" . "</th>";
                    $th5 = "<th>" . "Hapus Data" . "</th>";
                    echo "<table border=1>";
                    echo "<tr>";
                    echo $th1 ;
                    echo $th2;
                    echo $th3;
                    echo $th4;
                    echo $th5;
                    echo "</tr>";
                    for ($indexo = 0; $indexo < $max; $indexo++) 
                    {
                    echo "<tr>";
                    echo "<td>" . $indexo."</td>";
                    echo "<td>" . $_SESSION['chart'][$indexo]['type']."</td>";
                    echo "<td>" . $_SESSION['chart'][$indexo]['idanimal']."</td>";
                    echo "<td>" .  "Rp. " . $_SESSION['chart'][$indexo]['harga']. ",-"  ."</td>";
                    echo "<td>" . "<a href='deletesession.php?session=$indexo'>" ."Proses ".   "</a>"."</td>";
                    $totalharga += $_SESSION['chart'][$indexo]['harga'];
                    echo "</tr>";
                    }
                    echo "</table>" . "<br/>";
                    echo "<blockquote>" .  "Total Pembelian Item Yang Anda Pesan  =". "<h2>". "Rp." . $totalharga . ",-" ."</h2>" . "</blockquote>";
                    }else
                    {
                        echo "Chart is still Empty";
                    }
                }

私はすでにこれを試しました:コンテンツですでに満たされたチャートがあると仮定し、このコード内で削除しようとしましたが、未設定の変数でエラーを受け取りました

unset($_SESSION['chart'][1])

ありがとうございました

4

2 に答える 2

0

コードで改善できる点をいくつか見つけました。

  • 関数内でエコーしないでください。代わりに戻ります (次に、関数が返すものをエコーし​​ます)。これにより、結果をどうするかに関してより柔軟に対応できます。
  • PHP には、配列を反復するための組み込みループであるforeachループがあります。for の代わりにそれを使用する必要があります。

だからここに私が持っているものがあります:

function print_session_data($session) {
    if (!is_array($session)) {
        return "Array is empty";
    }
    $table_data  = "";
    $total_harga = 0;
    foreach ($session as $index => $data) {
        $table_data .= <<<TABLE_DATA
        <tr>
            <td>$index</td>
            <td>{$data["type"]}</td>
            <td>{$data["idanimal"]}</td>
            <td>Rp. {$data["harga"]}</td>
            <td><a href="deletesession.php?session=$index">Proses</a></td>
        </tr>
TABLE_DATA;
        $total_harga += $data["harga"];

    }

    $result = <<<RESULT
<h3>Berikut abalah keranjang belanja anda</h3>
<table border="1">
    <thead>
        <tr>
            <th>No</th>
            <th>Animal Type</th>
            <th>ID Binatang</th>
            <th>Harga</th>
            <th>Hapus Data</th>
        </tr>
    </thead>
    <tbody>
        $table_data
    </tbody>
</table>
<blockquote>Total Pembelian Item Yang Anda Pesan = <strong>Rp. $total_harga</strong></blockquote>
RESULT;
    return $result;
}

$_SESSION['chart']                = array();
$_SESSION['chart'][0]['type']     = "Type";
$_SESSION['chart'][0]['idanimal'] = 6;
$_SESSION['chart'][0]['price']    = '$25';
$_SESSION['chart'][0]['harga']    = 25;
echo print_session_data($_SESSION["chart"]); // <== this is the function to print out the data
于 2012-08-31T08:51:20.310 に答える
0

コンテンツで既に満たされたチャートがあると仮定し、このコード内で削除しようとしましたが、未設定の変数でエラーを受け取りましたunset($_SESSION['chart'][1])

コードからわかることから、データを正しく設定解除する最良の方法は次のとおりです: DEMO

$_SESSION['chart'][0]セッション変数インデックスを再度使用する前に、が設定されているかどうかを確認する必要があります。$_SESSION['chart']配列にまだ他のインデックスが含まれている場合printdata();は、セッションが空だったことを示す else を呼び出すことができます。

于 2012-08-31T09:04:51.470 に答える