[RESOLU] Supprimer une clé d'array précise se trouvant en cache

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Supprimer une clé d'array précise se trouvant en cache

Re: Supprimer une clé d'array précise se trouvant en cache

par samueltremblay » 23 janv. 2018, 10:09

Ah ça explique beaucoup d'erreur tout ça :D

Je te remercie vraiment beaucoup, du fond du coeur, grace à toi, je viens d'en apprendre d'avantage et pouvoir continuer mon client!!! Très apprécié!!!

Merci mille fois de ton temps!!

Sam

Re: Supprimer une clé d'array précise se trouvant en cache

par tesmet » 22 janv. 2018, 22:01


Et j'envoi ton code:

Code : Tout sélectionner

$dateEkey = array_search($get_date_a_supprimer, $global_session['date']); // si la recherche n'est pas en échec if($dateEkey !== false) { unset($global_session['id'][$dateEkey]); // ou array_splice($_SESSION['id'], $dateEkey, 1); unset($global_session['date'][$dateEkey]); // ou array_splice($_SESSION['date'], $dateEkey, 1); unset($global_session['heure'][$dateEkey]); // ou array_splice($_SESSION['heure'], $dateEkey, 1); unset($global_session['num'][$dateEkey]); // ou array_splice($_SESSION['num'], $dateEkey, 1); } else echo 'pas trouver<br>';
L'erreur est de faire les unset() sur $global_session qui n'affectera en rien $_SESSION qui continuera à vivre avec les anciennes données de page en page, il faut appliquer les unset() sur $_SESSION directement (ma préférence) ou bien faire l'affectation $_SESSION = $global_session; après les 4 unset() s'il n'y a rien d'autre dans $_SESSION.

Re: Supprimer une clé d'array précise se trouvant en cache

par samueltremblay » 22 janv. 2018, 21:07

Salut Tesmet, merci de ton support! Vraiment, très apprécié!

Il y a quelque chose qui ne fonctionne pas et je me demande si c'est pas parce que je traite ma date comme un "get" en l'envoyant dans le lien au lieu de POST method ou autre. Tu peux tester ici, letheatre.entreprise-amg.com tu vas te rendre compte que le unset semble fonctionner, mais aussitôt que la date ne se retrouve plus dans le lien, les infos reviennent.

Alors avant tout, voici comment j'enregistre en session une date de spectacle de la billetterie ou quand on est sur la vu d'un spectacle:

Code : Tout sélectionner

session_start(); if(isset($_POST['spectacle_id']) && isset($_POST['date']) && isset($_POST['heure_debut']) && isset($_POST['num'])): if(!isset($_SESSION['spectacle_id']) && isset($_SESSION['date']) && isset($_SESSION['heure_debut']) && isset($_SESSION['num'])): $_SESSION['spectacle'] = array(); endif; $item_ID = (isset($_POST['spectacle_id']) && !empty($_POST['spectacle_id']) ? (int) $_POST['spectacle_id'] : null); $item_date = (isset($_POST['date']) && !empty($_POST['date']) ? (int) $_POST['date'] : null); $item_heure = (isset($_POST['heure_debut']) && !empty($_POST['heure_debut']) ? (int) $_POST['heure_debut'] : null); $item_num = (isset($_POST['num']) && !empty($_POST['num']) ? (int) $_POST['num'] : null); if($item_ID !== null && $item_date !== null && $item_heure !== null && $item_num !== null): $spect_id = $_POST['spectacle_id']; $spect_date = $_POST['date']; $spect_heure = $_POST['heure_debut']; $spect_num = $_POST['num']; $_SESSION['spectacle']['id'][] = $spect_id; $_SESSION['spectacle']['date'][] = $spect_date; $_SESSION['spectacle']['heure'][] = $spect_heure; $_SESSION['spectacle']['num'][] = $spect_num; endif; endif;
Je reprend donc ma session comme ceci rendu au panier:

Code : Tout sélectionner

session_start(); $global_session = $_SESSION['spectacle']; // correspond au array que je t'ai présenté au début
et si j'ai besoin que des dates dans l'array, j'ai ce code:

Code : Tout sélectionner

$get_date_in_cache = $global_session['date'];
(pareil pour les ID, l'heure et num)

Ensuite je reprend ma date à supprimer de cette manière:

Code : Tout sélectionner

$get_date_a_supprimer = $_GET['supprimer_date'];
Et j'envoi ton code:

Code : Tout sélectionner

$dateEkey = array_search($get_date_a_supprimer, $global_session['date']); // si la recherche n'est pas en échec if($dateEkey !== false) { unset($global_session['id'][$dateEkey]); // ou array_splice($_SESSION['id'], $dateEkey, 1); unset($global_session['date'][$dateEkey]); // ou array_splice($_SESSION['date'], $dateEkey, 1); unset($global_session['heure'][$dateEkey]); // ou array_splice($_SESSION['heure'], $dateEkey, 1); unset($global_session['num'][$dateEkey]); // ou array_splice($_SESSION['num'], $dateEkey, 1); } else echo 'pas trouver<br>';
Apres ce code, si je refait un print_r de $global_session APRES ton code, tout ce qui devait etre supprimé est supprimé, mais pas sur le print_r AVANT ton code. et ca fonctionne seulement si le lien est comme ça: http://letheatre.entreprise-amg.com/pan ... e=20171123 aussitot que j'enleve le suprimer_date=, les données reviennent.

As tu une petite idée du pourquoi ?

Merci beaucoup mister :)!!!

Re: Supprimer une clé d'array précise se trouvant en cache

par tesmet » 22 janv. 2018, 01:11

Comme il peut y avoir autre chose dans la session il est préférable de faire un unset() sur chacun des 4 indexes sans boucle: id, date, heure, num.

Code : Tout sélectionner

$dateEkey = array_search($get_date_a_supprimer, $_SESSION['date']); // si la recherche n'est pas en échec if($dateEkey !== false) { unset($_SESSION['id'][$dateEkey]); // ou array_splice($_SESSION['id'], $dateEkey, 1); unset($_SESSION['date'][$dateEkey]); // ou array_splice($_SESSION['date'], $dateEkey, 1); unset($_SESSION['heure'][$dateEkey]); // ou array_splice($_SESSION['heure'], $dateEkey, 1); unset($_SESSION['num'][$dateEkey]); // ou array_splice($_SESSION['num'], $dateEkey, 1); } else echo 'pas trouver<br>';

Re: Supprimer une clé d'array précise se trouvant en cache

par samueltremblay » 21 janv. 2018, 23:41

Exactement, quand je dis cache, je parle des SESSIONS. Merci pour tes codes, ton exemple.

Je regarde ça et te reviens :)

Merci :)

Re: Supprimer une clé d'array précise se trouvant en cache

par tesmet » 21 janv. 2018, 23:02

Hello. Il faudrait peut être montrer la boucle avec unset() car elle aurait dû fonctionner, sinon il y a array_splice() qui détruit la donnée et réorganise aussi la séquence numérique.

https://3v4l.org/qZGhL

Code : Tout sélectionner

<pre><?php // le cache ??? $_SESSION ? $la_var_du_cache = array( 'id' => array(112, 93, 93, 11559), 'date' => array('20171123', '20180509', '20180508', '20180407'), 'heure' => array('2:00', '8:00', '8:00', '7:00'), 'num' => array( array('adulte' => 3, '60_ans_plus' => 0, '30_ans_moins' => 0 ), array('adulte' => 4, '60_ans_plus' => 0, '30_ans_moins' => 0 ), array('adulte' => 4, '60_ans_plus' => 0, '30_ans_moins' => 0 ), array('adulte' => 0, 'enfant' => 4), ), ); // date à rechercher $get_date_a_supprimer = '20171123'; // rechercher la date dans la colonne date $dateEkey = array_search($get_date_a_supprimer, $la_var_du_cache['date']); // si la recherche n'est pas en échec if($dateEkey !== false) { foreach($la_var_du_cache as $index => $pas_important) { // ou unset($get_date_in_cache[$index][$dateEkey]); array_splice($la_var_du_cache[$index], $dateEkey, 1); // détruire un élément à partir de $dateEkey } } else echo 'pas trouver<br>'; print_r($la_var_du_cache);

Supprimer une clé d'array précise se trouvant en cache

par samueltremblay » 21 janv. 2018, 20:37

Bonjour la communauté,

J'ai un site où je vends des places de spectacles par date. En somme, le client magasine sur le site, clique sur une date voulu, choisi le nombre d'adulte, d'enfant, etc. puis il l'ajoute au panier.

J'ai fait un panier qui prend les éléments se trouvant dans le cache. Alors prenons l'exemple que je vienne de magasiner 4 dates de spectacle, mon cache ressort cette array:

Code : Tout sélectionner

Array ( [id] => Array ( [0] => 112 [1] => 93 [2] => 93 [3] => 11559 ) [date] => Array ( [0] => 20171123 [1] => 20180509 [2] => 20180508 [3] => 20180407 ) [heure] => Array ( [0] => 2:00 [1] => 8:00 [2] => 8:00 [3] => 7:00 ) [num] => Array ( [0] => Array ( [adulte] => 3 [60_ans_plus] => 0 [30_ans_moins] => 0 ) [1] => Array ( [adulte] => 4 [60_ans_plus] => 0 [30_ans_moins] => 0 ) [2] => Array ( [adulte] => 4 [60_ans_plus] => 0 [30_ans_moins] => 0 ) [3] => Array ( [adulte] => 0 [enfant] => 4 ) ) )
https://ibb.co/hgCizG

(Regardez l'image s'il vous plait), quand nous cliquons sur modifier des inputs de type number et un bouton supprimer apparait pour chaque date. Quand nous cliquons sur supprimer, je récupère la date à supprimer, puis je regarde à quelle clé elle correspond avec ce code:

Code : Tout sélectionner

$dateEkey = array_search($get_date_a_supprimer, $get_date_in_cache);

Maintenant que j'ai la clé qui correspond, comment je fais pour supprimer toute les clé "0" du cache par exemple ?

J'ai dejà essayé unset, mais aussitôt que la date ne se retrouve plus dans le lien, les infos reviennes.

Merci pour votre support :)!