IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Serializer un ensemble de variables sans être un tableau ni un objet


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 423
    Points : 874
    Points
    874
    Par défaut Serializer un ensemble de variables sans être un tableau ni un objet
    bonjour,

    j'ai une trentaine de variable concernant une 'personne' qui se nomment sous la forme :
    $pers_nom
    $pers_prenom
    $pers_telephone
    ..etc

    Ces 40 variables ne sont pas réunies dans un tableau uniquement ni dans un objet, elles proviennent d'un renvoi de formulaire.

    Je souhaite savoir si il est possible de les réunir dans un objet sérializé unique avec une syntaxe du genre :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $backup_20221811 = serialize($pers_*);
    Vous le voyez j'ai inventeé & ajouté le jocker pour dire que je veux sélectionner toutes les variables connues dont le nom commence par $_pers .
    y-a-t-il une syntaxe php qui permet de faire ça ?

    Mon but c'est d'éviter d'écrire du code horrible comme :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $backup_20221811 = serialize($pers_nom).serialize($pers_prenom).serialize($pers_tellephone)....etc;

    Ma finalité c'est de stocker $backup_20221811 à un endroit et de pouvoir le comparer à $backup_20221810 (j-1) afin de savoir si l'une des 40 variables a été mise à jour dans une fiche 'personne'.

    alors, y-a-t-il une syntaxe avec le jocker * ?

    bonne journée

    ps : pour simplifier ma question j'ai pris l'exemple d'une 'personne' avec 40 champs le concernant mais dans la vie réelle ce serait plutôt ce cas : j'ai un formulaire contenant 40 champs de dates (pas 39, pas 41). Si l'une des dates est changée/mise à jour, je veux pouvoir prévenir un groupe et lancer un process. Pour cela, côté js/php, j'ai besoin de comparer les 40 valeurs/champs, et c'est basiquement enquiquinant de faire 40 lignes de comparaisons avec des IF imbriqués côté serveur (script php)!

  2. #2
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Bonjour

    Je pense que tu fais fausse route... Toutes ces valeurs dépendent d'un même "objet" (une personne); pourquoi programmer comme en l'An 100 avant JC ==> pourquoi créer des variables et pas un array; mieux, un objet ? Peut-être le moment de faire un peu de refactoring du code... IMHO.

  3. #3
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 423
    Points : 874
    Points
    874
    Par défaut
    arf, je me doutais que j'aurai pas dû prendre l'exemple de 30 champs d'un personne...ça porte à confusion tellement la création d'objet est nécessaire en 2022. Vus avez lu mon PS ? disons que ce sont juste 30 champs qui ont un nom qui commence pareil.
    ça pourrait être 30 données comptables, 30 données tabulaires, 30 données cartographique.

    Mon but est de déceler si l'une des 30 a changé sans faire 30 tests de IF en cascade...
    Je pourrais serializer les $_POST en une fois mais j'ai pas besoin des 50 !

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 331
    Points : 15 675
    Points
    15 675
    Par défaut
    Citation Envoyé par clavier12AZQSWX Voir le message
    Je pourrais serializer les $_POST en une fois mais j'ai pas besoin des 50 !
    vous pouvez comparer directement les valeurs dans $_POST avec les fonctions de traitement des tableaux.

    si par exemple vous avez ces valeurs dans $_POST
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $_POST = [
    	"champs_pas_utile" => "abc",
        "nom" => "Jean",
    	"naissance" => "1975",
    	"poids" => "45",
    	"2e_champs_pas_utile" => "789",
    ];
    alors vous utilisez ce code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $personne_avant = [
    	"nom" => "Jean",
    	"naissance" => "1965",
    	"poids" => "45",
    ];
     
     
    $difference = array_diff($personne_avant, $_POST);
    $champs_differents = array_keys($difference);
    et là, la variable $difference contient ["naissance" => "1965"].
    et $champs_differents contient ["naissance"].

    https://www.php.net/manual/fr/function.array-keys.php

  5. #5
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 423
    Points : 874
    Points
    874
    Par défaut
    donc en faisant $difference = array_diff($personne_avant, $_POST);

    $difference ne va pas contenir les champs en plus présent dans le second tableau ?
    Array_diff ne traite que les champs équivalent des 2 tableaux donc, ça je savais pas ! merci!

Discussions similaires

  1. Permuter deux variables sans variable temporaire
    Par khayyam90 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 09/01/2015, 08h02
  2. Deconnexions sans être deconnecté
    Par Dinytro dans le forum Dépannage et Assistance
    Réponses: 2
    Dernier message: 13/01/2006, 01h32
  3. Sortie standard stockée dans variable sans rc
    Par ggnore dans le forum Linux
    Réponses: 2
    Dernier message: 13/12/2005, 14h46
  4. [Info]Modifier un ensemble de variable
    Par kaiser2003 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 07/09/2005, 15h53
  5. [PHP-JS] Envoi de variable sans passer par un submit
    Par adilou1981 dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2004, 19h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo