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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : proposer une liste de choix à l'import d'un CSV

par jay64 » 03 avr. 2007, 17:47

Merci !

Il n'y a que du vide car je n'ai besoin que de ces deux champs. C'est donc pour ça que dans me fichiers de tests je n'ai que ça.

Pour le reste, j'avance, j'ai donc mis ça :
<input type="checkbox" name="contact[]" value="<? echo strtr(($mots[$i][$NumColNom-1]), "\"", "\0").";".strtr(($mots[$i][$NumColEmail-1]), "\"", "\0");?>">

Ensuite, je renvoie le post du formulaire vers un script dans lequel j'ai fait ça :
<?php 

$ListeContacts = array();
$ListeContacts = print_r($_POST['contact'],true);

session_start();

$IdCli = $_SESSION['user_id'];

$mot = array(); 
$i = 0; 
foreach($ListeContacts AS $Contacts) 
{ 
    $mot[$i] = explode(";", $Contacts); 
	echo $mot[$i][0];
	$i++;
}
?>
Le problème, c'est que je n'ai pas l'impression de récupérer grand chose à l'intérieur de ma boucle.
Je pense que c'est lié à mon tableau $ListeContacts qui n'est pas bien initialisé...
Peux-tu m'aider une ultime fois STP ?

Merci !

par Expreg » 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

par jay64 » 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];;;;;;;;;;;;;;;

par Expreg » 03 avr. 2007, 15:45

Bon, fais-voir un morceau de ton CSV !!!![/php]

par jay64 » 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 !

par mere-teresa » 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, ...)

par jay64 » 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.

par Expreg » 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:

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

par jay64 » 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 !!!

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

par Expreg » 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.

par mere-teresa » 29 mars 2007, 12:18

Tu vas donc uploader le fichier CSV, le parser et générer une case à cocher par ligne.

par mere-teresa » 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

par jay64 » 29 mars 2007, 12:16

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

par Megadeth » 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
:)

par Expreg » 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.