Inclure un ensemble de données dans une note

Petit nouveau ! | 6 Messages

21 févr. 2008, 09:49

Bonjour,


J'ai un petit souci je souhaite :
Remplir une ligne contenant plusieurs champs dans une table, l’un de ces champs est la résultante d’un ensemble de variables.

Pour exemple :

J’ai une intervention à faire et je dois emmener avec moi deux articles.
Je dispose côté serveur de deux tables (`site` et `intervention`) l’une pour le lieu du rendez vous et l’autre pour les articles.
Côté client, je dispose d’une seule table (`agenda`) avec des champs pour l’info site et un champ "`age_Detail`" pour récupérer l’ensemble des articles "`Num_Produit`".

La requête fonctionne en voici le code :

Code : Tout sélectionner

Version du serveur: 5.0.27 CREATE TABLE `site` ( `Num_Site` int(11) NOT NULL auto_increment, `Ref_Clt_Site` varchar(50) default NULL, `Libelle` varchar(50) NOT NULL, `Adresse` varchar(50) NOT NULL, `Ville` varchar(50) NOT NULL, `CP` varchar(50) default NULL, PRIMARY KEY (`Num_Site`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=69 ; CREATE TABLE `intervention` ( `Num_Interv` int(11) NOT NULL auto_increment, `Num_Site` int(11) NOT NULL, `Num_Ticket_Appel` int(11) default NULL, `Num_Intervenant` int(11) NOT NULL, `Num_Produit` int(11) default NULL, PRIMARY KEY (`Num_Interv`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=25 ; CREATE TABLE `agenda` ( `age_id` int(10) unsigned NOT NULL auto_increment, `Num_Site` int(11) NOT NULL, `Ref_Clt_Site` varchar(50) default NULL, `Libelle` varchar(50) NOT NULL, `Adresse` varchar(50) NOT NULL, `Ville` varchar(50) NOT NULL, `CP` varchar(50) default NULL, `Num_Ticket_Appel` int(11) default NULL, `Num_Intervenant` int(11) NOT NULL, `age_Detail` varchar(50) NOT NULL, PRIMARY KEY (`age_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=66 ; Global $conn; $Num_Interv = $this->Num_Interv->CurrentValue; $sSqlWrk = "SELECT `intervention`.`Num_Produit`, FROM `intervention` WHERE (`intervention`.`Num_Interv` = '$Num_Interv')"; $rswrk = $conn->GetAll($sSqlWrk); FOREACH ($rswrk as $tab) { $tableau = $tab['Num_Produit']; } var_dump($tableau);
Si je mets le var_dump dans la boucle FOREACH j'obtiens toutes les variables,
mais si je l'inscrit après tel que dans l'exemple je n'obtiens qu'une seule variable.

Bien entendu si je mets le insert à l'intérieur de la boucle cela me crée plusieurs enregistrements ce que je ne souhaite pas.

Un petit coup de main serait le bienvenu.
Merci

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

d0m
Mammouth du PHP | 1141 Messages

21 févr. 2008, 10:09

C'est rarement une bonne idée de mettre plusieurs éléments dans un champ, pour éviter la redondance et le parsing.
Il est préférable de faire 3 tables :
- l'une étant agenda sans le champ age_detail
- une autre contenant tous les produits, ce que tu as surement déjà vu que tu as un identifiant numérique num_Produit dans la table intervention,
- la troisième faisant le lien entre les agendas et les produits avec l'identifiant de l'agenda et l'identifiant du produit.

Concernant ton problème en lui même tel que tu le poses, c'est parce que tu écrases la variable $tableau à chaque fois, ne l'utilisant pas comme un tableau mais comme une variable de type entier. En gros il te manque les [ ]
foreach(...){
  //tu mets dans la variable $tableau l'identifiant du produit qui est numérique 
  $tableau = $tab['Num_Produit'];
}
Ce que tu voulais surement faire :
//déclaration de la variable comme un tableau
$tableau = array();
foreach(...){
  //tu ajoutes l'identifiant du produit dans la variable $tableau 
  $tableau[] = $tab['Num_Produit'];
}

Petit nouveau ! | 6 Messages

21 févr. 2008, 10:56

Merci pour ta réponse,

En effet c’est ce que je cherche.
	$tableau = array();
	foreach ($rswrk as $tab)
	{
	extract($tab);
	$tableau[] = $Num_Produit;
	}
	print_r($tableau);
	}
Le résultat donne : « Array ( [0] => 163 [1] => 165 ) »

Mais maintenant comment je ressorts les variables pour les envoyer.

Lorsque j’écris :
$age_detail = 'N° Installation :'.$tableau;
Il m’insert : « N° Installation :Array »….

Merci pour votre aide

d0m
Mammouth du PHP | 1141 Messages

21 févr. 2008, 11:07

La concaténation . peut se faire entre des chaines de caractères ou à la limite des valeurs numériques qui sont alors automatiquement converties en chaines de caractères.
Ton tableau, converti en chaine de caractère donne "array".

Il faut bien comprendre que $tableau n'est ni une chaine de caractère ni une valeur numérique, c'est une variable de type tableau (array) contenant des valeurs numériques.
$tableau[0], $tableau[1],... elles sont des valeurs numériques et peuvent donc être concaténés.

Par exemple
$age_detail = 'N° Installation :'.$tableau[0];
affichera la première valeur du tableau.

Pour faire de manière générique d'un tableau une chaine de caractère, va voir du coté de la fonction implode.

Petit nouveau ! | 6 Messages

21 févr. 2008, 11:29

Merci, tout fonctionne.