8795 sujets

Développement web côté serveur, CMS

Bonjour,
je souhaite faire des mises à jour de mes tables de liaison et je coince un peu.

Voici la situation

Table "produits"
produit_id | nom | ...

table "proprietes"
propriete_id | nom | ...

table de liaison "link_produits_proprietes" (qui peut contenir des commentaires)
produit_id | propriete_id |commentaire

Dans mon formulaire de saisie/mise à jour, pour un produit, j'ai la liste des propriétés (checkbox) et un champ correspondant pour le commentaire.

Aucun problème pour créer et récupérer les liaisons. Pour les mises à jour, j'utilise la procédure suivante que je souhaite optimiser.

Lors d'une mise à jour d'un produit:
1/ j'efface toutes les liaisons associées à mon produit dans la table link_produits_proprietes
2/ j'ajoute les liaisons exportées par le formulaire

Le problème:
Maintenant, je dois créer automatiquement des PDF pour chaque
- produit (avec la liste des propriétés)
- propriété (avec la liste des produits qui ont cette propriété)

Pour ne pas surcharger les serveur, je voudrais ne créer les PDF que pour le produit en question et pour les propriétés qui ont changé (supprimée, mise à jour du commentaire ou nouvelle)

Auriez-vous une procédure qui me permettrait de faire cela?
D'avance, merci pour votre aide.
Salut,

pas bien sûr d'avoir tout compris mais j'essaye :

* pour savoir si les propriétés d'un produit ont été modifiées il suffit d'alimenter un array à plusieurs dimensions (ou plusieurs arrays) avant la mise à jour contenant les propriétés et les commentaires et de comparer avec les nouvelles valeurs soumises via formulaire (donc soit utiliser les sessions pour stocker cet array avant soumission, soit un INPUT hidden avec le tableau en serialize, soit refaire un select avant un éventuel update). Si quelque chose a été modifié tu mets à jour un champ de la fiche produit (soit un booléen updated qui passe à true soit une date de dernière modification) et c'est ce champ que tu testes pour savoir s'il faut générer ou nom un PDF.

* si tu veux plus de précision je ne vois qu'un moyen : historiser les modifications.
Modifié par Heyoan (25 Feb 2010 - 15:35)
Merci pour l'idée des array!!!!!

Je crée un array avec les valeurs d'origine
Je crée un array avec les valeurs soumises par le formulaire

J'analyse et compare les 2 arrays, j'en crée un 3e avec les id qui changent!


$_proprietes_original  = $_proprietes_nouveau = $_proprietes_update = "";

// Création du array d'origine avec les valeurs de ma BDD
$requete="SELECT * FROM link_produits_proprietes WHERE produit_id = ".$_POST['id']." ORDER BY propriete_id";
     $resultat=mysql_query($requete) or die ("Erreur: ".mysql_error());
     while($ligne=mysql_fetch_array($resultat)){
          $_proprietes_original[$ligne['propriete_id']] = $ligne['commentaire'].$ligne['note']; // Je concatène tous les éléments variables. Commentaires et notes enregistrées dans la table de liaison.
     }

// Récupération des nouvelles valeurs transmises par le formulaire
$valLiaison = $_POST['propriete']; //car mes données sont transférées via un array a 2 dimensions
foreach($valLiaison as $key => $value) {
     $_proprietes_nouveau[$key] = $_POST['commentaire'][$key].$_POST['note'][$key]; // Je concatène tous les éléments variables. Commentaires et notes enregistrées dans la table de liaison.
}

// La partie analyse et comparaison des tableaux
$_proprietes_complet = $_proprietes_original + $_proprietes_nouveau;
foreach($_proprietes_complet as $key => $value) {
     if(!isset($_proprietes_original[$key]) || $_proprietes_complet[$key] != $_proprietes_original[$key] || !isset($_proprietes_nouveau[$key]) || $_proprietes_complet[$key] != $_proprietes_nouveau[$key]){
          $_proprietes_update[$key] = "1"; // je mets juste une valeur de 1 pour les clé qui correspondent aux propriétés qui changent
     }			
}


il ne me reste plus qu'à faire une boucle foreach sur l'array $_proprietes_update et ne modifier (créer les pdf) que sur les enregistrements concernés.

J'espère que c'est clair Smiley cligne .

Antonio