Page 1 sur 2
proposer une liste de choix à l'import d'un CSV
Posté : 29 mars 2007, 11:56
par jay64
Bonjour,
Je voudrais proposer aux visiteurs de mon site la possibilté d'ajouter dans leur table contacts des enregistrements issus d'un fichier CSV (export fait par exemple depuis un logiciel de messagerie).
Ya deux choses que je voudrais pouvoir gérer. Proposer une fenêtre qui liste le contenu du CSV et dans laquelle je vais intégrer des cases à cocher pour choisir les contacts à importer ou non. A la validation, seuls les gens cochés alimenteront la table des contacts.
Quelqu'un pourrait-il me donner une piste ?
Merci
Posté : 29 mars 2007, 12:13
par Expreg
Perso, je ferais ça dans l'autre sens.
- affichage d'une liste créée en php au départ des données que tu souhaite.
- les cases à cocher correspondant à l'id de chaque contact.
- selon les cases cochées par l'internaute, envoi du formulaire, création du fichier CVS à la volée et via les entêtes qui vont bien envoi vers le client.
Posté : 29 mars 2007, 12:15
par Megadeth
Bonjour,
Voici une bonne piste à remanier pour ton cas. Ce script fabrique un csv en téléchargement automatique et sort tous les enregistrements d'une table donnée. A toi maintenant, plutôt que d'interroger une base, de récupérer les valeurs postées des cases à cocher
<? include ("fichier-de-connexion.php");
// Liste les données de la table
// -------------------------------------------
$resQuery = mysql_query("SELECT * FROM ta-table");
header("Content-Type: application/csv-tab-delimited-table");
header("Content-disposition: filename=nom-du-fichier.csv");
if (mysql_num_rows($resQuery) != 0) {
// titre des colonnes
$fields = mysql_num_fields($resQuery);
$i = 0;
while ($i < $fields) {
echo mysql_field_name($resQuery, $i).";";
$i++;
}
echo "\n";
// données de la table
while ($arrSelect = mysql_fetch_array($resQuery, MYSQL_ASSOC)) {
foreach($arrSelect as $elem) {
echo "$elem;";
}
echo "\n";
}
}
?>
Mega

Posté : 29 mars 2007, 12:16
par jay64
c'est justement l'inverse que je veux faire, c'est à dire un import et pas un export !
Posté : 29 mars 2007, 12:17
par mere-teresa
Je crois que tu sauras faire le listing et la case à cocher par personne.
Je te conseille de nommer les cases à cocher du même nom
personne[] ainsi PHP créera un tableau.
Code : Tout sélectionner
<input type="checkbox" name="personne[]" value="12" />
<input type="checkbox" name="personne[]" value="14" />
<input type="checkbox" name="personne[]" value="15" />
$_POST['personne'][0] //==> première case cochée, p. ex. 14
Posté : 29 mars 2007, 12:18
par mere-teresa
Tu vas donc uploader le fichier CSV, le parser et générer une case à cocher par ligne.
Re: proposer une liste de choix à l'import d'un CSV
Posté : 29 mars 2007, 12:31
par Expreg
la possibilté d'ajouter dans leur table contacts des enregistrements issus d'un fichier CSV
Arf, mais quel con je suis !
Je te jure, je suis pas beurré hein... ! (ma tartine oui par contre)
Donc c'est dans l'autre sens, tu as déjà le CVS
Alors là, tu utilises :
- file() pour obtenir un tableau contenant chaque ligne.
- explode() sur chaque ligne en fonction du séparateur des valeurs (;)
Tu obtiens un tableau à deux dimensions.
A partir de là, avec foreach tu montes ton listing avec tes checkbox.
Re: proposer une liste de choix à l'import d'un CSV
Posté : 29 mars 2007, 14:53
par jay64
Arf, mais quel con je suis !
Je te jure, je suis pas beurré hein... ! (ma tartine oui par contre)
Tu me fais rire !
Bon sinon j'avance bien avec vos conseils, j'ai fait ça :
<?php
require_once('../Connections/connection_jesuisne.php');
mysql_select_db($database_connection_jesuisne, $connection_jesuisne);
$fichier = file('../csv/export_contacts.csv');
?>
<table width="100%" border="0" align="center">
<tr>
<td bgcolor="#D2DDE3"><div align="center"><strong>Contact</strong></div></td>
<td bgcolor="#D2DDE3"><div align="center"><strong>Email</strong></div></td>
<td bgcolor="#D2DDE3"><div align="center"><strong>Téléphone</strong></div></td>
<td bgcolor="#D2DDE3"><div align="center"><strong>Importer</strong></div></td>
</tr>
<?
$mots = array();
$i = 0;
foreach($fichier AS $fic)
{
$mots[$i] = explode(";", $fic);
?>
<tr>
<td><div align="center" class="Style1"><?php echo $mots[$i][0]; ?></div></td>
<td><div align="center" class="Style1"><?php echo $mots[$i][1]; ?></div></td>
<td><div align="center" class="Style1"><?php echo $mots[$i][2]; ?></div></td>
<td><div align="center" class="Style1"><?php echo $mots[$i][3]; ?></div></td>
</tr>
<? $i++; }?>
</table>
Maintenant, j'ai deux questions majeures :
1- Comment supprimer la première ligne de mon tableau (celle qui contient les entetes du CSV et dont je me fiche)
2- où intégrer la chekbox que je cocherai ou decocherai ensuite par contact pour déterminer qui j'intègre ou pas dans une future requete INSERT TO qui suivra ?
Merci !!!
Posté : 29 mars 2007, 15:23
par Expreg
Hip,
Bon je vais illustrer un exemple concret, je te laisse chercher la solu.
Exemple ton fichier plat contient ceci :
Avec ce genre de code,
<?php
$fichier=file('ton_csv.txt');
$i=0;
foreach($fichier as $ligne)
{
$donnees=explode(';',$ligne);
foreach($donnees as $val)
{
$new_fichier[$i][]=$val;
}
$i++;
}
echo '<pre>';
print_r($new_fichier);
echo '</pre>';
?>
tu obtiendras ça :
Array
(
[0] => Array
(
[0] => John
[1] =>
[email protected]
[2] => 12345678
)
[1] => Array
(
[0] => Rudy
[1] =>
[email protected]
[2] => 78787878
)
[2] => Array
(
[0] => Jérémy
[1] =>
[email protected]
[2] => 45454545
)
[3] => Array
(
[0] => anne
[1] =>
[email protected]
[2] => 23562356
)
)
Il te reste à réaliser ton tableau et tes checkbox.
Il y a moyen de le faire directement dans le code que j'ai donné

Posté : 30 mars 2007, 10:08
par jay64
Merci !
Mais ça je l'ai déjà fait ... puisque j'arrive à afficher sans problème le contenu de mon CSV dans un joli tableau formaté comme je veux.
Là où je bloque, c'est comment insérer ma checkbox pour chaque ligne (donc ma boucle) et en fonction de ce qui est coché ou pas, le traduire pour savoir qui j'intègre dans une future requete INSERT INTO.
Je répète mon besoin : je veux proposer à l'utilisateur de récupérer au choix suite à l'import d'un CSV (issu d'un export fait avec un logiciel de messagerie) une liste de contacts qui s'ajouteront alors dans les contacts qu'il a déjà dans son profil.
Posté : 30 mars 2007, 15:37
par mere-teresa
Afficher la checkbox, tu devrais savoir le faire...il faut juste donner comme value une donnée pertinente (code contact, ou bien nom+prénom, ...)
Posté : 03 avr. 2007, 14:32
par jay64
Je suis désolé mais je ne m'en sors pas (je ne réponds que maintenant car je peux vous assurer que j'ai cherché avant de poster)
Voici ce que j'ai :
<form name="form1" method="post" action="">
<table width="100%" border="0" align="center">
<tr>
<td bgcolor="#D2DDE3"><div align="center"><strong>Contact</strong></div></td>
<td bgcolor="#D2DDE3"><div align="center"><strong>Email</strong></div></td>
<td bgcolor="#D2DDE3"><div align="center"><strong>Importer</strong></div></td>
</tr>
<?
$mots = array();
$i = 0;
foreach($fichier AS $fic)
{
$mots[$i] = explode($delimiteur, $fic);
?>
<tr>
<td><div align="center" class="Style1"><?php echo strtr(($mots[$i][$NumColNom-1]), "\"", " "); ?></div></td>
<td><div align="center" class="Style1"><?php echo strtr(($mots[$i][$NumColEmail-1]), "\"", " "); ?></div></td>
<td><div align="center" class="Style1">
<label>
<input type="checkbox" name="<?php echo "checkbox".$i;?>" value="checkbox">
</label>
</div></td>
</tr>
<? $i++; }
}
}
?>
</table>
</form>
J'arrive bien à afficher un tableau dynamique contenant le fichier csv récupéré en rajoutant en plus ma checkbox mais je ne sais pas ensuite comment le traiter pour faire en sorte que les enregistrements pour lesquels la checkbox est cochée, soit pris en compte dans ma future requete INSERT INTO.
SVP, un coup de pouce ...
Merci !
Posté : 03 avr. 2007, 15:45
par Expreg
Bon, fais-voir un morceau de ton CSV !!!![/php]
Posté : 03 avr. 2007, 16:21
par jay64
Nom;Adresse de messagerie;Rue (domicile);Ville (domicile);Code postal (domicile);Département (domicile);Pays/région (domicile);Téléphone personnel;Téléphone mobile;Rue (bureau);Ville (bureau);Code postal (bureau);Département (bureau);Pays/région (bureau);Téléphone professionnel;Société;Fonction
Alice;
[email protected];;;;;;;;;;;;;;;
Aurélie;
[email protected];;;;;;;;;;;;;;;
Aurélien CERS;
[email protected];;;;;;;;;;;;;;;
Bar Capbreton;
[email protected];;;;;;;;;;;;;;;
Posté : 03 avr. 2007, 16:36
par Expreg
Arf !
Il n'y a que du vide dans ce CSV !!!!
Tu ne sais pas nettoyer ça avant ????
Enfin...
Code : Tout sélectionner
<input type="checkbox" name="<?php echo "checkbox".$i;?>" value="checkbox">
Pas bon cette syntaxe !
Comme ça :
Code : Tout sélectionner
<input type="checkbox" name="contact[]" value="la valeur du contact">
Ensuite pour récupérer les emails c'est :
<?php
echo print_r($_POST['contact'],true);
?>
Tu obtiendras un array() avec les emails cochés