proposer une liste de choix à l'import d'un CSV

Eléphant du PHP | 331 Messages

29 mars 2007, 11:56

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

Eléphant du PHP | 170 Messages

29 mars 2007, 12:13

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.
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Mammouth du PHP | 737 Messages

29 mars 2007, 12:15

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
:)

Eléphant du PHP | 331 Messages

29 mars 2007, 12:16

c'est justement l'inverse que je veux faire, c'est à dire un import et pas un export !

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

29 mars 2007, 12:17

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
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

29 mars 2007, 12:18

Tu vas donc uploader le fichier CSV, le parser et générer une case à cocher par ligne.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 170 Messages

29 mars 2007, 12:31

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.
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Eléphant du PHP | 331 Messages

29 mars 2007, 14:53

Arf, mais quel con je suis !
Je te jure, je suis pas beurré hein... ! (ma tartine oui par contre)
Tu me fais rire ! :lol:

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 !!!

Eléphant du PHP | 170 Messages

29 mars 2007, 15:23

Hip,

Bon je vais illustrer un exemple concret, je te laisse chercher la solu.
Exemple ton fichier plat contient ceci :

Code : Tout sélectionner

John;[email protected];12345678 Rudy;[email protected];78787878 Jérémy;[email protected];45454545 anne;[email protected];23562356
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é :wink:
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Eléphant du PHP | 331 Messages

30 mars 2007, 10:08

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.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

30 mars 2007, 15:37

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, ...)
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 331 Messages

03 avr. 2007, 14:32

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 !

Eléphant du PHP | 170 Messages

03 avr. 2007, 15:45

Bon, fais-voir un morceau de ton CSV !!!![/php]
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Eléphant du PHP | 331 Messages

03 avr. 2007, 16:21

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];;;;;;;;;;;;;;;

Eléphant du PHP | 170 Messages

03 avr. 2007, 16:36

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
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends