Base SQL + base Access

Mammouth du PHP | 687 Messages

30 sept. 2010, 02:48

Bonsoir,

j'ai créé un formulaire de saisi en php qui à l'aide d'un bouton "envoyer" transfert toutes les données saisies dans une table de ma base phpmyadmin.
Ma question est la suivante:

Peut-on à la fois envoyer les informations saisies dans ce formulaire dans la base de données sql et dans une base de données access se trouvant par exemple sur mon serveur (MUTUALISE)...?

Cette base de données access me servira à faire par la suite un publipostage avec word.
La fusion entre access et word me permettra ainsi de récupérer l'adresse, le nom, prénom etc....

Si cette manipulation est possible, pouvez-vous m'indiquer comment procéder s'il vous plait car faire des copier/coller ce n'est vraiment pas passionnant!

Merci à tous!

Mammouth du PHP | 881 Messages

30 sept. 2010, 05:35

Maintenir deux bases de données à jour tournera vite au casse-tête.
Je crois qu'il te serait préférable d'exporter le contenu de ta base mySQL via phpmyadmin à chaque publipostage
Ton export, tu le feras alors avec phpmyadmin, via la fonction "Exporter", choisis alors le format Excel et tu publipostera aisément avec Word.

Bonne chance.
Soyez artisans de paix

Mammouth du PHP | 687 Messages

30 sept. 2010, 10:13

Merci,

ça je l'ai fait déja le problème c'est que j'ai besoin des informations de deux tables donc ça fait au résultats deux exportations, donc deux tableaux...
et le problème ce que j'ai une table coordonnées et une table contacts et que parfois il y a 3/4 contact par entreprises donc lorsque je fusionne les deux bases, c'est un peu le foutoire...

Le top serait effectivement de dire à excel ou access de compléter les adresses des contacts supplémentaire automatiquement car les deux bases ont un champs commun... le champs "raison social"... Le truc c'est que j'ai l'impression que excel ne veut pas m'écouter moi! (rire)

Merci beaucoup!

Mammouth du PHP | 881 Messages

30 sept. 2010, 10:42

Bon soir,

arrives-tu à obtenir le résultat escompté par une requête SQL dans PhpMyAdmin ?

Je pense ici à une seule requete qui questionne les deux tables et qui donne le résultat final ?

Il y aura certainement du JOIN ... ON et du WHERE dans une telle requête

Si tu n'y arrives pas, mais que tu penses que c'est possible de le faire, présente-nous ici la structure de chacune de tes tables, présente aussi les conditions de jonction des tables et le résultat escompté, nous pourrons t'aider. Autrement, je crois que tu devras faire appel à deux series de commandes pour l'enregistrement ou l'exportation de tes données: une série qui dirigera l'info vers la base MySQL, l'autre série qui en fera autant vers une base Access.
En cherchant un peu ici tu trouveras des messages pour te guider vers l'exportation Access, j'ai vu ça passer à quelques reprises.
Soyez artisans de paix

Mammouth du PHP | 687 Messages

30 sept. 2010, 12:07

Merci!
Lorsque je lance une requête pas de problème les infos sont récupérées et affichées mais le problème c'est que ces infos doivent être récupérées sous forme de tableau par exemple de manière à ce que je puise faire un copier/coller intégral par exemple du tableau php vers excel ou access...? je patoge un peu la.

ce qui me rend la tâche vraiment difficile c'est que j'ai 3 tables et parfois 3 ou 4 contacts pour une société... donc lorsque j'exporte sous excel la fusion est loupée car il y a un décalage au niveau des entreprises donc obligé de sélectionner manuellement la personne à contacter alors que cette personne est déjà ciblé grâce à la table 3 champs "signataire"

voici la première table : (table contact)

--
-- Base de données: `attelspefac`
--

-- --------------------------------------------------------

--
-- Structure de la table `pefac_entreprises_contacts`
--

CREATE TABLE IF NOT EXISTS `pefac_entreprises_contacts` (
  `id` int(11) NOT NULL auto_increment,
  `num_client` int(11) NOT NULL,
  `nom` varchar(150) NOT NULL,
  `prenom` varchar(150) NOT NULL,
  `fonction` varchar(150) NOT NULL,
  `telephone` varchar(10) NOT NULL,
  `email_contact` varchar(150) NOT NULL,
  `nom_entreprise` varchar(250) NOT NULL,
  `signataire` varchar(250) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=661 ;

Voici la deuxième table : (table coordonnées)

--
-- Base de données: `attelspefac`
--

-- --------------------------------------------------------

--
-- Structure de la table `pefac_entreprises_coordonnees`
--

CREATE TABLE IF NOT EXISTS `pefac_entreprises_coordonnees` (
  `id` int(11) NOT NULL auto_increment,
  `num_client` int(11) NOT NULL,
  `nom_entreprise` varchar(250) NOT NULL,
  `telephone` varchar(10) NOT NULL,
  `fax` varchar(10) NOT NULL,
  `email` varchar(150) NOT NULL,
  `adresse` varchar(250) NOT NULL,
  `adresse_bis` varchar(200) NOT NULL,
  `code_postal` varchar(5) NOT NULL,
  `ville` varchar(250) NOT NULL,
  `site_internet` varchar(250) NOT NULL,
  `capital` int(11) NOT NULL,
  `num_siret` varchar(14) NOT NULL,
  `num_tva` varchar(13) NOT NULL,
  `forme_juridique` varchar(40) NOT NULL,
  `creation` varchar(100) NOT NULL,
  `ca` varchar(100) NOT NULL,
  `agrement` varchar(100) NOT NULL,
  `code_naf` varchar(5) NOT NULL,
  `zone_activite` varchar(15) NOT NULL,
  `activite` text NOT NULL,
  `mots_cles` text NOT NULL,
  `mots_cles_option` text NOT NULL,
  `username` varchar(16) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `num_siret` (`num_siret`),
  UNIQUE KEY `num_client` (`num_client`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=361 ;

et la troisième table : (informations complémentaires)

--
-- Base de données: `attelspefac`
--

-- --------------------------------------------------------

--
-- Structure de la table `pefac_entreprises_dossiers`
--

CREATE TABLE IF NOT EXISTS `pefac_entreprises_dossiers` (
  `id` int(11) NOT NULL auto_increment,
  `num_dossier` int(11) NOT NULL,
  `date_limite` int(11) NOT NULL,
  `num_saisie` int(11) NOT NULL,
  `ref_client` text NOT NULL,
  `ref_autre` text NOT NULL,
  `formule` text NOT NULL,
  `Haut` varchar(8) NOT NULL,
  `Bas` varchar(8) NOT NULL,
  `Gauche` varchar(8) NOT NULL,
  `News` varchar(8) NOT NULL,
  `Contact` varchar(8) NOT NULL,
  `nbr_semaine` int(2) NOT NULL,
  `logo` varchar(150) NOT NULL,
  `plaquette_pdf` varchar(150) NOT NULL,
  `num_client` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `num_dossier` (`num_dossier`),
  UNIQUE KEY `num_client` (`num_client`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=355 ;

Voila.

Les infos dont j'ai besoin pour faire mon publipostage sous word avec excel ou access :

- nom_entreprise ( table 1)
- Signataire (table 2)
- fonction (table 2)
- adresse ( table 1)
- adresse_bis ( table 1)
- code_postal ( table 1)
- ville ( table 1)
- logo (table 3)
- site_internet ( table 1)
- capital ( table 1)
- num_siret ( table 1)
- num_tva ( table 1)
- forme_juridique ( table 1)
- creation ( table 1)
- ca ( table 1)
- agrement ( table 1)
- code_naf ( table 1)
- zone_activite ( table 1)
- activite ( table 1)
- num_dossier (table 3)
- ref_client (table 3)
- ref_autre (table 3)

MERCI PAR AVANCE!

Mammouth du PHP | 1967 Messages

30 sept. 2010, 15:01

il te suffit de créer une page commencant par ta requéte, ensuite tu traite le résultat pour creer ton fichier excel (en mode csv, c'est-à-dire que tu sépare chaque cellule par un ; et chaque ligne par un retour charriot). Tu aura alors directement la feuille excell avec laquelle travailler pour ton publipostage.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 687 Messages

30 sept. 2010, 16:28

Je vois un peu le truc...
Aurais-tu à tout hasard un squelette de cette idée? Car je galère un peu là...

:(

Merci

Mammouth du PHP | 1967 Messages

30 sept. 2010, 17:06

Si tu as ta requête, avec tes LEFT JOIN (pour ca je suis pas le plus doué pour t'aider) tu la parcours ligne par ligne et à chaque ligne, tu écris dans ton fichier csv une ligne contenant tous tes champs séparer par un ;
$fh = fopen("CHEMIN VERS TON FICHIER",'w');
//ligne d'entête de colonne
$ligne = 'blabla;blabla;...';
fwrite($fh,$ligne);
$sql = '';//TA requète ici
$result = mysql_query($sql) or die (mysql_error());
while ($row=mysql_fetch_row($result)){
$ligne = $row[0] . ';' . $row[1] ... ."\n";
//Si tu gère bien cette partie, on peut simplifier * 
$ligne = implode($row,';') . "\n";
fwrite($fh,$ligne);
} 
fclose($fh);
mysql_close();
Code non testé

* il faut que tu range tes champs dans l'ordre voulu dans ta requète et que tu vérifie le comportement de mysql_fetch_row
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 687 Messages

30 sept. 2010, 17:14

Merci!

je vais tester tout cela! :D

Mammouth du PHP | 881 Messages

30 sept. 2010, 17:42

Ou encore, tu passes tes commandes dans PhpMyAdmin puis, en bas de la table de résultats, tu cliques sur "Exporter" et tu choisis vers Excel.
Tu peux exporter une table entière comme les résultats d'une requête croisée.

Attendons de voir les résultats obtenus avant de nous lancer dans la construction d'une requete.
Soyez artisans de paix

Mammouth du PHP | 687 Messages

30 sept. 2010, 17:44

Ah oui? tu penses que depuis phpmyadmin je peux faire un croisement de résultat?
Je suis désolé je suis un peu envahissant avec mes questions mais j'adore comprendre ce que je fais... :D

Mammouth du PHP | 881 Messages

30 sept. 2010, 18:10

Essaie quelque chose comme ceci:
SELECT UN.nom_entreprise, DEUX.Signataire, DEUX.fonction, UN.adresse, UN.adresse_bis, UN.code_postal, UN.ville, TROIS.logo, UN.site_internet, UN.capital, UN.num_siret, UN.num_tva, UN.forme_juridique, UN.creation, UN.ca, UN.agrement, UN.code_naf, UN.zone_activite, UN.activite, TROIS.num_dossier, TROIS.ref_client, TROIS.ref_autre 
FROM pefac_entreprises_dossiers AS TROIS 
LEFT JOIN pefac_entreprises_contacts AS DEUX ON DEUX.num_client = TROIS.num_client 
LEFT JOIN pefac_entreprises_coordonnees AS UN ON UN.num_client = TROIS.num_client  
GROUP BY UN.id

corrige, ajoute, change, bouge au besoin...
Soyez artisans de paix

ViPHP
AB
ViPHP | 5818 Messages

30 sept. 2010, 18:45

@Patriboom Pourquoi passer par phpMyadmin ?

A moins d'avoir des raisons particulières (tables énormes), si possible je ferais comme l'a dit Spols, une requête en php qui permettra de faire un tableau excel directement exploitable par word.

L'avantage c'est qu'on peut automatiser la procédure depuis une page php sans avoir à passer par PhpMyadmin.

Pour plus de facilité (par rapport à l'exemple donné par Spols), il y a la fonction fputcsv spécialement conçue pour formater des données CSV en php
        //... requête
        

	$result = mysql_query($query);

        $dirfile = 'adresse_de_mon_fichier.csv';
	
	if($result && $fp = @fopen($dirfile, 'w'))
	
		{
			$colonnes = array('colonne1','colonne2','colonne3','colonne4');// nom des colonnes

			fputcsv($fp, $colonnes, ';');//écrit le nom des colonnes
	
			while ($line = mysqli_fetch_row($result)) fputcsv($fp, $line, ';');//écrit les lignes au format csv français (avec un ; comme séparateur)
		
			fclose($fp);
			mysql_free_result($result);
		}

Mammouth du PHP | 687 Messages

30 sept. 2010, 18:53

Merci...
depuis tout à l'heure je teste... je crois que je vais jeter l'éponge! je suis à deux doigts de jeter l'ordi par la fenêtre! je suis complètement larguer la!
Pfiiiiiiioooouuu
je n'arrive pas à faire cette fusion entre ces trois tables qui ont le même point commun : le champ "nom_entreprise"
je sais que c'est possible de le faire en access ou même sous forme de tableau php mais la... je n'y arrive plus... :cry:

merci pour ton aide en tout cas!

Mammouth du PHP | 881 Messages

30 sept. 2010, 18:54

@AB
C'est bien sûr, on peut tout mettre ça dans PHP par la suite. Pour l'instant, il suffit d'établir et de tester la requête.
Ensuite, plutôt que de passer par une table en CSV, je crois qu'il sera possible d'exporter directement au format Excel.
Une fois la requête bien établie avec PhpMyAdmin, il suffira de copier/coller cette requête dans le code PHP.

Aussi, passer par PhpMyAdmin parce que c'est ce qu'il fait actuellement.
Veut-il se lancer dans la programmation PHP et tout automatiser immédiatement ou ne veut-il que passer ses données une fois par années ?
Je dirais qu'à raison d'une fois par année, ça ne vaut pas la peine de bâtir du code, de le déboguer, de l'intégrer dans un programme et d'ajuster le tout.
Le besoin exprimé, jusqu'ici, n'est qu'un transfert de données. Je ne veux donc pas imposer au banqet à qui demande café/roties.
Au fait ... très intéressante la fonction fputcsv, merci du tuyau.

@orell1
Montre-nous ce que tu as essayé jusqu'à présent.
Tu sais que les ligatures de tables sont beaucoup plus solides et sûres quand elles sont établies sur des ID uniques que sur des noms. Les noms impliquent de vérifier la casse, s'emmêle dans les fautes de frappe, etc.

Présente-nous ici les requêtes que tu as essayées, nous tâcherons de le déboguer avec toi.
As-tu bien compris la requête que je t'ai proposée, celle avec les deux LEFT JOIN ?
Ne fait-elle pas le boulot?
Soyez artisans de paix