IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

fgetcsv et INSER INTO Souple [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut fgetcsv et INSER INTO Souple
    Bonjour à tous;

    J'ai bien bossé le fgetcsv
    et je récupère le tout dans des array
    le but est bien sur de faire un INSERT INTO, donc avec SET id = :id, Nom = :Nom, etc
    mais le problème c'est que les csv ont
    • Un nombre de colonnes différents
    • Des noms de colonnes différents

    alors le nombre de SET va changer.

    J'ai fait ca
    1. Lire le csv

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    OK
    Mais les arrays sont de la forme [0] => 1, [1] => Le nom etc...
    Et pour le array de execute() il aurait fallu [id] => 1, [Nom] => Le nom etc...

    Alors je tente:
    1. De récupérer les entetes dans un array

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $arrayName = array();
    if ($i==0) 
    	{ // Créer les en tetes
    	$num = count($data); echo "Num=".$num;
        	echo "<br/>";
        	for ($n=0; $n < $num; $n++) 
        		{ 
            		//echo $data[$n]."<br/>";
            		array_push($arrayName,$data[$n]);
        		}
        	// print_r($arrayName);
        	for ($d=0; $d < $num; $d++) { 
        	 	echo $arrayName[$d].' / ';
    	 } 
    }
    Ok

    Et là il faudrait créer un array des lignes suivantes avec comme entete l'arrayName précédent ?

    Qu'en pensez-vous ?
    Je pense que je galère bien, en tout cas


  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est plus simple de ne me pas nommer les paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
       if (!isset($sth)) {   
                  $sth = $pdo->prepare('INSERT INTO ' . $table . ' VALUES (' . implode(',', array_fill(0, count($data), '?')) . ')');
       }
       else {
                  $sth->execute($data);
       }
    }   
    unset($sth);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut
    Waouh !
    Ca claque


    J'essaye ça !

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut
    En lancant des print_r pour $data et s$sth on a


    $Data= Array ( [0] => 11 [1] => [2] => Semi mat [3] => 1 )
    Ok
    Pour $sth:
    $sth= PDOStatement Object ( [queryString] => INSERT INTO finitions VALUES (?,?,?,?) )

    Ben ouais mais ca marche
    Super Sabotage Merci !!!

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut Protéger des injections
    Bonjour,
    Pour protéger l'application des injections,
    j'ai tenté d'importer un .csv avec <u/>DD</u>
    et comme protection j'ai fait:
    • un mysql_real_escape_string() sur le array_fill > C'est pô bon.
    • htmlspecialchars sur le ('?') > pas d'erreur mais ca garde les <u>
    • htmlentities sur le ('?') > idem


    Vous auriez une idée ?

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ce que tu tentes là, c'est une injection XSS, en l’occurrence l'ajout de code exécutable à l'affichage de la page. En général on tente <script>alert('BOUM!')</script>, si tu as une popup "BOUM!", c'est pas bon.

    mysql_real_escape_string protège des injections SQL, qui magouillent les requêtes en base de donnée. Ce n'est pas ton cas, donc il est normal que ça ne fasse rien dessus. (Et de toute façon, si tu utilises PDO et les requêtes préparéescorrectement, tu es déjà protégé, inutile de mélanger mysql_real_escape_string dans l'affaire)

    htmlentities et htmlspecialchars protègent des injections de HTML en "neutralisant" le HTML pour qu'il doit affiché et non "exécuté". Dans l'exemple de l'alert('BOUM!') que je citais au-dessus, ça va écrire "alert('BOUM!')" au lieu de faire la popup. Tu es donc bien protégé, mais évidement c'est moche vu que ça écrit le code html dans la page.

    Si tu veux retirer des balises html d'une chaine, regarde du côté de strip_tags.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] inser into avec variable php
    Par gwendoline-bricout dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 16/10/2013, 09h47
  2. [PDO] PDO MySQL INSERT INTO rien ne s'insere.
    Par jano_dave dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/12/2009, 10h49
  3. Réponses: 7
    Dernier message: 30/03/2006, 07h49
  4. [VB6] [Excel] Insérer une image dans une feuille
    Par mathias dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 09/10/2002, 07h44
  5. Inserer Un Menu dans un autre en execution
    Par apt dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 11h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo