|
|
|
|
Bonsoir,
Je m'adresse à vous car j'ai un gros problème sur un site.
Dans un de mes scripts PHP je manipule un tableau stocké en session afin d'y ajouter / retirer des éléments.
Voici le code permettant d'ajouter un élément s'il n'est pas présent encore dans ce tableau :
$offerList = null;
// --- Retrieve list of offers already in session
if ( isset($_SESSION['offerList']) && !empty($_SESSION['offerList']) ){
$offerList = $_SESSION['offerList'];
}
// --- Check if current offer is not already in session
$found = false;
$i = 0;
$sizeList = sizeof($offerList);
while ( $found == false && $i < $sizeList ){
if ( $offerList[$i] == $no_asp )
$found = true;
// --- Increase counter
$i++;
}
// --- If no_asp found, advise the user
if ( $found == true ){
echo "alert('L\'offre est deja dans votre panier.');";
exit;
}
else {
//echo "alert('Ajout de l offre ".$no_asp." a la place ".sizeof($offerList)."');";
// --- Add current offer to current session
$offerList[sizeof($offerList)] = $no_asp;
$_SESSION['offerList'] = $offerList;
echo "alert('Votre offre est dans le panier');";
}
Configuration: Windows XP Firefox 2.0.0.5
Je comprend pas trop la logique de ton code, surtout pourquoi tu parcours tout le tableau pour voir si une valeur y est présente.
if ( !empty($_SESSION['offerList']) )
{
if( in_array($no_asp, $_SESSION['offerList'] )
{
echo "alert('L\'offre est deja dans votre panier.');";
}
else
{
$_SESSION['offerList'][] = $no_asp;
echo "alert('Votre offre est dans le panier');";
}
} |
Ca fait un moment que j'ai pas fais de PHP de la sorte, donc j'ai oublié pas mal de chose ^^
$offerList = array();
// --- Retrieve list of offers already in session
if ( isset($_SESSION['offerList']) && !empty($_SESSION['offerList']) ){
$offerList = $_SESSION['offerList'];
}
// --- Check if current offer is not already in session
$found = false;
$i = 0;
$sizeList = sizeof($offerList);
$newList = null;
for ( $i=0; $i<$sizeList; $i++ ){
if ( $offerList[$i] != $no_asp ){
$newList[sizeof($newList)] = $offerList[$i];
}
}
// --- Replace in session last list by the new one
$_SESSION['offerList'] = $newList;
J'imagine qu'il y a une fonction analogue à in_array pour supprimer un élément du tableau ? ~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~ |
J'ai tenté de remplacer mon code par celui-ci :
if ( !empty($_SESSION['offerList']) ){
for ( $i=0; $i<sizeof($_SESSION['offerList']); $i++ ){
if ( $_SESSION['offerList'][$i] == $no_asp ){
unset($_SESSION['offerList'][$i]);
break;
}
}
}
Mais j'ai l'impression que la fonction "unset" ne supprimer pas correctement la valeur, mais la remplacer par une valeur "batarde". Car lorsque je parcours mon tableau pour l'afficher, j'ai une erreur d'offset sur l'ancien indice ou se situait l'offre que j'ai supprimé. Quelqun saurait-il me dire comment supprimer correctement une valeur d'un tableau ? ~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~ |
Je ne sais pas trop ce que tu veux faire, je pense que ce doit-être ça, mais pas sûr. if ( !empty($_SESSION['offerList']) )
{
if( in_array($no_asp, $_SESSION['offerList']) )
{
$index = array_search($no_asp, $_SESSION['offerList']);
unset($_SESSION['offerList'][$index]);
}
}Egalement, foreach est plus pratique qu'un simple for ou while pour parcourir tous les éléments d'un tableau ;) |