我在代碼的各個部分都有一個帶有2個MySQL語句的PHP頁面。我使用生成的結果集來設置cookie值,然後再調用它。但是,當我調用cookie數據時,它不更新cookie值的顯示,直到第二次刷新。爲了更好地理解,以下是代碼的3個部分:PHP + MySQL + Cookies,爲什麼不能正確加載?
<?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數據加載到字段中的代碼,以及將第二次刷新正確顯示的部分。
<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函數的代碼。我知道這不是問題。
我認爲這個問題在第一個代碼塊中已經出現,但我不確定。我已經盡力而爲,現在已經沒有想法了。任何幫助,將不勝感激。
您在此代碼中有一個巨大的SQL注入漏洞。請了解SQL注入,轉義用戶輸入和準備語句。 [這是一個很好的參考問題](http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php)。另請注意,直到頁面刷新後,cookie數據纔會在'$ _COOKIE'數組中可用,因爲這是Cookie的性質。這可能是[會議](http://www.php.net/manual/en/book.session.php)更適合您的需求。 – DaveRandom 2013-03-08 23:21:30
我並不擔心注射,我只是想在第一次回覆中重新加載cookie。之前我曾經工作過一次,然後改變或添加了一些東西,現在它不再以這種方式工作了。任何幫助你可以給這種情況,將不勝感激。 – BlazeHeroic 2013-03-08 23:24:30
您也不需要爲每個查詢創建一個新的連接。只需要引導一次。 – datasage 2013-03-08 23:24:40