0

コードのさまざまな部分に 2 つの MySQL ステートメントを含む PHP ページがあります。生成された結果セットを使用して Cookie 値を設定し、後で呼び出します。しかし、Cookie データを呼び出すと、2 回目の更新が行われるまで Cookie 値の表示が更新されません。理解を深めるために、コードの 3 つのセクションを次に示します。

<?php
include 'functions.php';
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    $SqlStatement = "SELECT Deceased.PK_Deceased, Deceased.Date_Death, Personal_Info.First_Name, Personal_Info.Last_Name FROM Deceased INNER JOIN Personal_Info ON Personal_Info.PK_Personal_Info = Deceased.FK_Personal_Info WHERE Deceased.FK_Personal_Info = '".$_POST['cboDeceased']."'";

    $result = ExecuteSql($SqlStatement);
    if(mysqli_num_rows($result) == 1)
    {
        $row = mysqli_fetch_array($result);
        setcookie('deceasedID', $row['PK_Deceased'], time()+360000, '/');
        setcookie('deceasedName', ($row['First_Name']." ".$row['Last_Name']), time()+360000, '/');
        setcookie('deceasedDoD', $row['Date_Death'], time()+360000, '/');
    }
}
?>

これは、ポストバックからデータを取得するコードです。この部分が間違っていると思いますが、よくわかりません。

<tr>
<td width="25%" rowspan="2" align="center">Current User: <?php echo $_COOKIE['username']; ?> </td>
<td width="25%" rowspan="2" align="center">Current Deceased: <?php if(isset($_COOKIE['deceasedName']))echo $_COOKIE['deceasedName']; ?></td>
<td width="50%" rowspan="2" align="center">Deceased Date of Death: <?php if(isset($_COOKIE['deceasedDoD']))echo $_COOKIE['deceasedDoD']; ?></td>

これは、Cookie データをフィールドにロードするコードと、正しく表示するために 2 回目の更新が必要な部分です。

<form action="<?php $_SERVER['PHP_SELF'];?>" method="post">
<table align="center" width="500" border="0.5">
<tr>
<td width="176" align="right" style="font-weight:bold;">Please select deceased:</td>
<td width="214">
  <select name="cboDeceased" id="cboDeceased">
    <option>Select...</option>
    <?php
    $SqlStatement = "SELECT Deceased.PK_Deceased , Personal_Info.First_Name, Personal_Info.Last_Name FROM Deceased INNER JOIN Personal_Info ON Personal_Info.PK_Personal_Info = Deceased.FK_Personal_Info";

    $res = ExecuteSQL($SqlStatement);

    while($row = mysqli_fetch_array($res))
    {
        echo "<option value='".$row['PK_Deceased']."'>".$row['First_Name']." ".$row['Last_Name']."</option>";
    }
?>

これは、ID に基づく変数を 1 番目のコード ブロックに渡すコードです。この部分は正常に動作します。

function ExecuteSQL($SQL)
{
$con = mysqli_connect("localhost", "root", "", "exec_support_db");
$res = mysqli_query($con, $SQL);
mysqli_close($con);
return $res;
}

ExecuteSQL 関数のコードを次に示します。これが問題ではないことはわかっています。

問題は上記の最初のコード ブロックにあると思いますが、よくわかりません。私はできる限りのことを試しましたが、今ではアイデアがありません。どんな助けでも大歓迎です。

4

1 に答える 1

0

上記の DaveRandom による SQL インジェクションを超えて、setcookie の仕組みに関する php マニュアルを参照してください。

http://php.net/manual/en/function.setcookie.php

具体的には、情報がヘッダーに挿入されるため、次のページが読み込まれるまで利用できないと述べています。あなたはおそらく次のようなことをしたいでしょう

if(isset($_COOKIE['deceasedID']))
{
    $deceasedID = $_COOKIE['deceasedID'];
}
else
{
    setcookie('deceasedID', $row['PK_Deceased'], time()+360000, '/');
    $deceasedId = $row['PK_Deceased'];
}
于 2013-03-08T23:25:30.720 に答える