2013-03-08 91 views
0

我在代碼的各個部分都有一個帶有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函數的代碼。我知道這不是問題。

我認爲這個問題在第一個代碼塊中已經出現,但我不確定。我已經盡力而爲,現在已經沒有想法了。任何幫助,將不勝感激。

+5

您在此代碼中有一個巨大的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

+0

我並不擔心注射,我只是想在第一次回覆中重新加載cookie。之前我曾經工作過一次,然後改變或添加了一些東西,現在它不再以這種方式工作了。任何幫助你可以給這種情況,將不勝感激。 – BlazeHeroic 2013-03-08 23:24:30

+0

您也不需要爲每個查詢創建一個新的連接。只需要引導一次。 – datasage 2013-03-08 23:24:40

回答

0

超出DaveRandom上面提到的SQL注入看看PHP手冊上的setcookie是如何工作的:

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']; 
} 
+0

非常感謝你!它完美的作品。我認爲這一定是我所做的就是拉行數據,然後將它改爲使用cookies。非常感謝。 – BlazeHeroic 2013-03-08 23:37:17

+0

沒問題,您可能需要考慮將問題標記爲已回答,如果這樣做完成了您要查找的內容。 – DaOgre 2013-03-11 18:57:44

+0

除了現在我已經回到它,它不起作用。我甚至已經回覆並再次嘗試,但仍然無法正常工作,所以我不知道我是如何處理這個問題的,但它不再工作。 – BlazeHeroic 2013-03-13 00:43:01