Bonjour,
Voici la problématique :
J'ai un site, composé de plusieurs zones (creation de compte, pages classiques, espace perso, etc). Sur ce site, un emplacement Bannière, dans lequel je souhaite choisir quelle bannière sera affichée, en fonction de la zone dans laquelle on est (récupérée via un $_GET['module']).
J'ai donc un formulaire qui, pour chaque bannière, liste l'ensemble des zones du site, sous forme de checkboxes, que je coche ou non suivant que je veux lier cette bannière à cette zone. Une fois ce formulaire soumis :
J'ai à nouveau 2 tableaux :
$previous_areas, récupéré ainsi :
$previous_areas = getDataFromQuery(sprintf("SELECT adarea_id, adarea_area_id FROM ".$cfg_prefixe."adareas WHERE adarea_ad_id = '%s' ORDER BY adarea_id",
mysql_real_escape_string($_GET['ad_id'])));
et qui donne ceci :
Array ( [0] => Array ( [adarea_id] => 16 [adarea_area_id] => 1 ) [1] => Array ( [adarea_id] => 17 [adarea_area_id] => 2 ) [2] => Array ( [adarea_id] => 30 [adarea_area_id] => 8 ) )
Cette table
adareas fait le lien entre une bannière, et une zone du site.
Et j'ai également mon tableau $_POST['ad_areas'], qui contient l'ensemble des checkboxes cochées dans le formulaire précédent :
Array ( [0] => 1 [1] => 2 [2] => 7 [3] => 8 )
Ce que je souhaite faire :
Pour chaque élément de $_POST :
- Si cette zone est déja liée à ma pub courante (c'est à dire si mon tableau $previous_areas comporte une ligne où $previous_areas = $_POST['ad_areas'], ne rien faire.
- Si cette zone n'est pas encore liée à ma pub courante, enregistrer ce nouveau lien dans ma table.
Et si des lignes de mon tableau $previous_areas n'ont aucune correspondance avec $_POST['areas'], alors supprimer ces entrées dans la table
ad_areas (car cela signifie que l'on vient de décocher la checkbox de cette zone, donc qu'on ne veut plus que cette pub soit liée à cette zone).
J'en suis donc arrivé à quelque chose comme ça :
$previous_areas = getDataFromQuery(sprintf("SELECT adarea_id, adarea_area_id FROM ".$cfg_prefixe."adareas WHERE adarea_ad_id = '%s' ORDER BY adarea_id",
mysql_real_escape_string($_GET['ad_id'])));
print_r($previous_areas);
echo '<hr />';
print_r($_POST['ad_areas']);
foreach($previous_areas as $key => $previous_area) {
if(recursive_in_array($previous_area['adarea_area_id'], $_POST['ad_areas']) === true) {
echo "<br />On supprime POST['ad_areas'][".($key)."] car il existe deja ds la bdd";
unset($_POST['ad_areas'][$key]);
}
else {
echo "<br />";
echo(sprintf("DELETE FROM ".$cfg_prefixe."adareas WHERE adarea_ad_id = '%s' AND adarea_area_id = '".$previous_area['adarea_area_id']."'",
mysql_real_escape_string($_GET['ad_id'])));
updateTable(sprintf("DELETE FROM ".$cfg_prefixe."adareas WHERE adarea_ad_id = '%s' AND adarea_area_id = '".$previous_area['adarea_area_id']."'",
mysql_real_escape_string($_GET['ad_id'])));
}
}
echo '<hr /><hr />';
print_r($previous_areas);
echo '<hr />';
print_r($_POST['ad_areas']);
foreach($_POST['ad_areas'] as $ad_area) {
// on link une nouvelle zone pour cette pub
echo "<br />";
echo(sprintf("INSERT INTO ".$cfg_prefixe."adareas VALUES('', '%s', '".$ad_area."')", mysql_real_escape_string($_GET['ad_id'])));
updateTable(sprintf("INSERT INTO ".$cfg_prefixe."adareas VALUES('', '%s', '".$ad_area."')", mysql_real_escape_string($_GET['ad_id'])));
}
Ce qui me donne :
Array ( [0] => Array ( [adarea_id] => 16 [adarea_area_id] => 1 ) [1] => Array ( [adarea_id] => 17 [adarea_area_id] => 2 ) [2] => Array ( [adarea_id] => 30 [adarea_area_id] => 8 ) ) Array ( [0] => 1 [1] => 2 [2] => 7 [3] => 8 )
On supprime POST['ad_areas'][0] car il existe deja ds la bdd
On supprime POST['ad_areas'][1] car il existe deja ds la bdd
On supprime POST['ad_areas'][2] car il existe deja ds la bdd
Array ( [0] => Array ( [adarea_id] => 16 [adarea_area_id] => 1 ) [1] => Array ( [adarea_id] => 17 [adarea_area_id] => 2 ) [2] => Array ( [adarea_id] => 30 [adarea_area_id] => 8 ) )
Array ( [3] => 8 )
INSERT INTO adareas VALUES('', '1', '8')
Ca ne fonctionne pas parfaitement. Dans mon exemple, on voit que POST['areas'][3] nest pas supprimé, alors qu'il devrait l'être par exemple.
Si quelqu'un se sent le courage de jeter un coup d'oeil à mon script pour me donner un coup de main, il est le bienvenu.
Ou peut-etre existe t'il une solution plus simple pour arriver à mes fins ?