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

Langage PHP Discussion :

Aide SQL insert


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2017
    Messages : 47
    Par défaut Aide SQL insert
    Bonjours,


    j'ai un problème rien ne s’exécute lorsque je rentre cette ligne ...

    Cela vient t'il de la ligne en elle même ou de mon code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $nb_modifs = $bdd->exec('INSERT into conge (nom_dusage) values ($getData[0])');

    Voici le code entier :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <?php
     
    $bdd = new PDO('mysql:host=localhost;dbname=gestion_compte;charset=utf8', 'root', '');
     
        $reponse = $bdd->query('SELECT * FROM conge');
     
     while( $donnees = $reponse->fetch())
              {  
    $test = $donnees['prenom'];
    $test2 = $donnees['nom_dusage'];
    echo "test :  $test";
     
    if(isset($_POST["Import"])){		
    	 $filename=$_FILES["file"]["tmp_name"];	
     
     
    	if($_FILES["file"]["size"] > 0)
    	{
                $file = fopen($filename, "r");
        fgetcsv($file, 767, ";");
    		while (($getData = fgetcsv($file, 767, ";")) !== FALSE)
    		{
    echo "<br>";
     
     
          echo "getData :  $getData[0]";
          echo "<br>";
          if ($getData[0] == $test2) {
          $nb_modifs = $bdd->exec('UPDATE conge SET prenom = "'.$test.'\n '.$getData[0].'  "');
          }
     
    else
    {
       $nb_modifs = $bdd->exec('INSERT into conge (nom_dusage) values ($getData[0])');
     
    }
     
    }
     
     
         }
       fclose($file); 
       }
     }
     
      ?>

  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
    Tu devrais commencer par indenter ton code proprement et analyser sa logique de fonctionnement.
    Actuellement c'est complétement délirant.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2017
    Messages : 47
    Par défaut Voici
    Voici le code indenter j'aimerais juste savoir le problème de cette ligne je cherche mais je trouve pas ...
    voici la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $nb_modifs = $bdd->exec('INSERT into conge (nom_dusage) values ($getData[0])');

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?php
     
    $bdd = new PDO('mysql:host=localhost;dbname=gestion_compte;charset=utf8', 'root', '');
    $reponse = $bdd->query('SELECT * FROM conge');
     
     
     
    while( $donnees = $reponse->fetch())
    {  
     
      $test = $donnees['prenom'];
      $test2 = $donnees['nom_dusage'];
     
      if(isset($_POST["Import"])){		
        $filename=$_FILES["file"]["tmp_name"];	
     
        if($_FILES["file"]["size"] > 0)
        {
          $file = fopen($filename, "r");
          fgetcsv($file, 767, ";");
     
          while (($getData = fgetcsv($file, 767, ";")) !== FALSE)
          {
              if ($getData[0] == $test2) {
              $nb_modifs = $bdd->exec('UPDATE conge SET prenom = "'.$test.'\n '.$getData[0].'  "');
            }
     
            else
            {
             $nb_modifs = $bdd->exec('INSERT into conge (nom_dusage) values ($getData[0])');
           }
     
         }
       }
       fclose($file); 
     }
    }
     
    ?>

  4. #4
    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
    Si tu n'as aucune idée du problème qu'est ce qui t'amène a penser que c'est cette ligne qu'il faut corriger ?

    Tu n'as rien changé à la logique du code.
    Regarde ce qui se passe dans ton code quand le fichier CSV n'a pas été uploadé :
    - tu établis une connexion à la base de données
    - tu executes la requête et tu parcoures toutes les lignes
    - pour chaque ligne tu vas contrôler que le fichier n'est pas là et ne rien faire.

    Imagine que ta base de données fasse 10000 lignes et que ton fichier CSV contienne 2 noms nouveaux :
    - tu vas lire chacun des 10000 noms de la base de données
    - pour chacun ouvrir le fichier CSV, lire les 2 noms et refermer le fichier
    - le nom de la base de données va être différent de deux du fichier CSV, tu vas faire un INSERT, pour la ligne suivante idem, pour la ligne suivante idem, pour la ligne suivante idem ... 10000 insert du même nom.

    Bref ....

    Beaucoup plus simplement tu peux faire un INSERT ON DUPLICATE UPDATE.
    Il suffit juste de bien avoir une clef UNIQUE sur ta colonne nom_dusage.
    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
    16
    17
    18
    <?php
    if(isset($_POST['Import'])) {
     
    	$bdd = new PDO('mysql:host=localhost;dbname=gestion_compte;charset=utf8', 'root', '');
     
        if($_FILES['file']['error'] === 0)
        {
    		$file = fopen($_FILES["file"]["tmp_name"], "r");
    		fgetcsv($file, 767, ";");
    		$sth = $bdd->prepare('INSERT INTO conge (nom_dusage) values (:prenom_insert) ON DUPLICATE KEY UPDATE SET prenom = CONCAT(prenom, "\n", :prenom_update)';
    		while (($getData = fgetcsv($file, 767, ";")) !== FALSE)
    		{
    			$sth->execute(array(':prenom_insert'=>$getData[0], ':prenom_update'=>$getData[0]));
    		}
    		fclose($file); 
    	}
    }
    ?>
    Je n'ai absolument pas compris pourquoi tu incrémentais le prénom mais j'ai laissé le fonctionnement comme ça.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Juste pour répondre à la question initiale :


  6. #6
    Membre averti
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2017
    Messages : 47
    Par défaut
    Bonjours ,

    merci de votre aide je vient de réussir je que je voulais.



    Cependant un autre problème est survenu est ce sera le dernier :

    - Lors de l'importation d'une ligne excel:

    Nom : Capture4.PNG
Affichages : 140
Taille : 4,6 Ko

    - J'obtiens ceci dans ma base de donnée :

    Nom : Capture5.PNG
Affichages : 143
Taille : 25,4 Ko

    -Je réimporte ma ligne et j'obtiens ceci :
    Nom : Capture6.PNG
Affichages : 138
Taille : 28,8 Ko

    Pour l’instant tous va pour le mieux !

    - Maintenant lorsque je modifie le nom d'usage :

    Nom : Capture7.PNG
Affichages : 142
Taille : 4,4 Ko

    - J'obtiens ma nouvelle ligne comme voulu car le nom d'usage n'est pas le même :

    Nom : Capture8.PNG
Affichages : 147
Taille : 39,3 Ko

    Et là le problème arrive !

    - Lorsque je réimporte cette ligne excel avec le nom différent .

    - Il me recréer une nouvelle ligne ...
    donc une nouvelle personne
    Nom : Capture10.PNG
Affichages : 146
Taille : 48,0 Ko

    Il n'a donc pas modifier la ligne bob6 comme bob5...

    J'ai donc chercher et j'ai trouvé en affichant
    $getData[0]
    et
    $nom_dusage
    comme ceci :
    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
    16
    17
    18
     
     echo "<br>";
          echo "$getData[0]";
          echo "<br>";
          echo "$nom_dusage";
          echo "<br>";
          echo "$getData[1]";
          echo "<br>";
          echo "$prenom";
          echo "<br>";
          echo "$getData[2]";
          echo "<br>";
          echo " $nom_de_famille";
          echo "<br>";
          echo "$getData[3]";
          echo "<br>";
          echo " $date_de_naissance";
          echo "<br>";
    Que
    $prenom
    gardé bob5 et ne prenez pas bob6 ... ?

    Nom : Capture9.PNG
Affichages : 143
Taille : 17,6 Ko


    Je sais que mes explication sont très bouillon de même pour ma présentation mais j’espère avoir été le plus clair possible ...

    Merci de votre aide à l'avance ...

    edit : j'ai oublié de vous passer le code :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    <?php
     
     
    if(isset($_POST["Import"])){
     
     
      $bdd = new PDO('mysql:host=localhost;dbname=gestion_compte;charset=utf8', 'root', '');
     
      $reponse = $bdd->query('SELECT * FROM conge');
      $donnees = $reponse->fetch();
      $nom_dusage =  $donnees['nom_dusage'];
      $prenom =  $donnees['prenom'];
      $nom_de_famille =  $donnees['nom_famille'];
      $date_de_naissance =  $donnees['date_naissance'];
      $categorie = $donnees['categorie'];
      $grade =  $donnees['grade'];
     
     
     
      if($_FILES["file"]["size"] > 0)
      {
     
        $file = fopen($_FILES["file"]["tmp_name"], "r");
        fgetcsv($file, 767, ";");
        while (($getData = fgetcsv($file, 767, ";")) !== FALSE)
        {  
     
          if ($getData[0] == $nom_dusage AND $getData[1] == $prenom AND $getData[2] == $nom_de_famille AND $getData[3] == $date_de_naissance) 
          {
            echo "<script type=\"text/javascript\">
            alert(\"Votre fichier CSV a bien été importé.\");
            window.location = \"test.php\"
          </script>";
     
     
          $nb_modifs = $bdd->exec('UPDATE conge SET categorie = "'.$categorie.'\n \n'.$getData[4].'  "');
          $nb_modifs = $bdd->exec('UPDATE conge SET grade = "'.$grade.'\n \n'.$getData[5].'"');
        }
        else
        {
          echo "<br>";
          echo "$getData[0]";
          echo "<br>";
          echo "$nom_dusage";
          echo "<br>";
          echo "$getData[1]";
          echo "<br>";
          echo "$prenom";
          echo "<br>";
          echo "$getData[2]";
          echo "<br>";
          echo " $nom_de_famille";
          echo "<br>";
          echo "$getData[3]";
          echo "<br>";
          echo " $date_de_naissance";
          echo "<br>";
          echo "<script type=\"text/javascript\">
          alert(\"Votre fichier CSV a bien été importé.\");
          window.location = \"test.php\"
        </script>";
     
        $nb_modifs = $bdd->exec("INSERT into conge (nom_dusage,prenom,nom_famille,date_naissance,categorie,grade) values ('".$getData[0]."','".$getData[1]."','".$getData[2]."','".$getData[3]."','".$getData[4]."','".$getData[5]."')");
      }
    }
     
    fclose($file);  
    }
    }

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

Discussions similaires

  1. Syntaxe tableaux dans ordre SQL INSERT
    Par lio33 dans le forum SQL
    Réponses: 6
    Dernier message: 19/10/2005, 17h07
  2. Réponses: 2
    Dernier message: 30/09/2005, 15h41
  3. Multiplier les And dans Sql Insert Into
    Par samlepiratepaddy dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 23/09/2005, 21h55
  4. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  5. erreur SQL ...INSERT INTO
    Par naidinp dans le forum ASP
    Réponses: 20
    Dernier message: 18/09/2003, 11h38

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