J'ai une page PHP avec 2 instructions MySQL dans différentes parties du code. J'utilise les ensembles de résultats générés pour définir les valeurs de cookies, puis je les appelle plus tard. Cependant, lorsque j'appelle les données de cookie, il ne met pas à jour l'affichage des valeurs de cookie avant une deuxième actualisation. Pour mieux comprendre, Voici les 3 sections de code:PHP + MySQL + Cookies, pourquoi cela ne se charge pas correctement?
<?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, '/');
}
}
?>
Ceci est le code qui extrait les données de la publication. Je pense que c'est la partie qui est incorrecte, mais je ne suis pas sûr.
<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>
Ceci est le code pour charger les données de cookie dans les champs et la partie qui prend la deuxième actualisation pour afficher correctement.
<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>";
}
?>
C'est le code qui transmet une variable basée sur l'ID au 1er bloc de code. Cette partie fonctionne bien.
function ExecuteSQL($SQL)
{
$con = mysqli_connect("localhost", "root", "", "exec_support_db");
$res = mysqli_query($con, $SQL);
mysqli_close($con);
return $res;
}
Voici le code de la fonction ExecuteSQL. Je sais que ce n'est pas le problème.
Je pense que le problème est en haut dans le 1er bloc de code, mais je ne suis pas sûr. J'ai tout essayé et je n'ai plus d'idées. Toute aide serait appréciée.
Vous avez un énorme trou d'injection SQL dans ce code. S'il vous plaît en savoir plus sur l'injection SQL, échapper les entrées de l'utilisateur et les instructions préparées. [Voici une bonne question de référence] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php). Notez également que les données de cookies ne seront pas disponibles dans le tableau '$ _COOKIE' tant que la page n'aura pas été actualisée, car c'est la nature des cookies. Il se peut que [sessions] (http://www.php.net/manual/fr/book.session.php) soit plus adapté à vos besoins. – DaveRandom
Je ne suis pas inquiet à propos de l'injection, je veux juste que cela recharge les cookies sur le premier postback. Je l'ai fait travailler une fois avant, puis soit changé ou ajouté quelque chose et maintenant il ne fonctionne plus de cette façon. Toute aide que vous pouvez donner pour que cela se produise serait appréciée. – BlazeHeroic
Vous n'avez également pas besoin de créer une nouvelle connexion pour chaque requête. Juste besoin de l'amorcer une fois. – datasage