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 :

Erreur requete insertion


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Par défaut Erreur requete insertion
    Bonjour à tous.

    j'ai ce fichier qui permet de charger les données dans une base Mysql, il fait trois choses:
    1. modification des produits déja existant dans la base
    2. ajout de nouveau produits
    3. garder les produits deja existant intact(donc pas de traitement specifique)

    quand je charger la base(en csv)pour mettre à jour la base, j'ai cette erreur :
    (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'écriture avec corps en métal et attributs en métal dorés. Plume en acier inoxyda' at line 1)
    mon fichier si qqn peut jetter un coup d'oeil.
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    <?php
    if(!empty($_POST['send'])) {
     $csv_file = $_FILES['csv_file']['name'];
     
    if(!empty($csv_file)) {
            //On simplifie le nom des variables $_FILES
         $tmp_name=$_FILES['csv_file']['tmp_name'];
         $name=$_FILES['csv_file']['name'];
         $size=$_FILES['csv_file']['size'];
         $type=$_FILES['csv_file']['type'];
         $erreur=$_FILES['csv_file']['error'];
     
       //On affiche les différentes variables
     
       echo "Nom du fichier :".$name;
       echo "<br>Taille du fichier :".$size;
       echo "<br>Type de fichier :".$type;
       //echo "<br>Nom temporaire :".$tmp_name;
       echo "<br>Erreur :".$erreur;
       echo "<br />";
     
    //On crée une variable contenant le répertoire de destination
    $uploadpath="/var/www/apache2-default/script/";
     
    //On déplace le fichier du dossier temporaire vers le dossier de destination
     
    move_uploaded_file($tmp_name,$uploadpath.$name);
     
    $fichier= fopen($name, 'rb');
    $references= array();                                                   //on crée un tableau pour les références
    mysql_connect("localhost","root","root");                       //on se connecte à la BD
    mysql_select_db("produits");
    $query="select ref from objets" or die(mysql_error());  //on récupère toutes les références éxistantes dans la base pour les comparer
    $reponse= mysql_query($query);                  //on stoque le résultat de la requete dans la variable $reponse
    $r=0;
    while ($donnees = mysql_fetch_array($reponse))
    {
            $references[$r]=$donnees['ref'];
            //echo $references[$r]."<br />";
            $r++;
    }
     
    $tab=array();                                                                   // tab va servir à stocker les valeur des champs de chaque ligne du fichier csv
    echo "<table border='1'>\n";
     
    $prem = fgetcsv($fichier,1024, ";");                    //on lie la première ligne du fichier pour que le pointeur commence par la 2ème lors du traitement
     
    for ($ligne = fgetcsv($fichier, 1024, ";"); !feof($fichier); $ligne = fgetcsv($fichier, 1024, ";")) {           //on parcourt le fichier ligne par ligne
    echo "<tr>";
    $j = sizeof($ligne);
    $bool = false;
      for($m=0; $m < sizeof($references); $m++){
            if($ligne[0] == $references[$m])
            {
                    $bool =true;
            }
      }
            if($bool== true){
                    $query="update prix set P1=$ligne[11]*$ligne[10], P2=$ligne[12]*$ligne[10], P4=$ligne[13]*$ligne[10], P5=$ligne[14]*$ligne[10], P10=$ligne[15]*$ligne[10], P15=$ligne[16]*$ligne[10], P20=$ligne[17]*$ligne[10], qte=$ligne[9] where ref= '$ligne[0]'" or die(mysql_error());
                    //echo $ligne[9];
                    mysql_query($query);
            }
    if(!$bool){
            for ($i = 0; $i < $j; $i++) {
        $tab[$i]=$ligne[$i];
       if($i == 7){
            $categories = explode("-",$tab[$i]);
            $k= sizeof($categories);
            //on parcours les valeurs multiples des catégories
            for($l=0;$l<$k;$l++){
                    //s'il n'y a pas de catégories on sort de la boucle
                    if($categories[$l]==''){break;}
                    //on insère les couples catégorie référence dans la table de liaison
                    $query="insert into int_obj_cat(cid,ref) values($categories[$l],'$tab[0]')";
                    mysql_query($query)or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
                    //echo "categories : ".$categories[$l]."&nbsp";
     
              }
           }
     
        else if($i == 8){
            $couleurs=explode("-",$tab[$i]);
            $k=sizeof($couleurs);
            //on parcourt ttes les valeures multiples de couleurs
            for($l=0;$l<$k;$l++){
                            // si le champs couleurs est vide on sort de la boucle
                    if($couleurs[$l] ==''){break;}
                    //on insère les couples couleur référence dans la table de liaison
                    $query="insert into int_obj_coul(cid,ref) values($couleurs[$l],'$tab[0]')";
                    mysql_query($query)or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
                    //echo "couleurs : ".$couleurs[$l]."&nbsp";
            //mysql_close();
              }
           }
         else if($i == 22){
            $tailles=explode("-",$tab[$i]);
            $k=sizeof($tailles);
            //on parcourt ttes les valeures multiples de tailles
            for($l=0;$l<$k;$l++){
                            // si le champs taille est vide on sort de la boucle
                    if($tailles[$l] ==''){break;}
                    //on insère les couples taille référence dans la table de liaison
                    $query="insert into int_obj_tail(tid,ref) values($tailles[$l],'$tab[0]')";
                    mysql_query($query)or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
                    //echo "tailles : ".$tailles[$l]."&nbsp";
            }
        }
     
        echo "<td>$tab[$i]</td>";
        }
     
    $query1 = "insert into objets(ref,nom,descriptif,nom_all,descriptif_all,prix,fournisseur,type)values('".$tab[0]."','".$tab[2]."','".$tab[4]."','".$tab[3]."','".$tab[5]."',$tab[10],$tab[1],'".$tab[6]."')";
        $query2= "insert into prix(id,ref,P1,P2,P4,P5,P10,P15,P20,qte) values('','$tab[0]',$tab[11]* $tab[10],$tab[12] * $tab[10],$tab[13] * $tab[10],$tab[14] * $tab[10],$tab[15] * $tab[10],$tab[16] * $tab[10],$tab[17] * $tab[10],$tab[9])";
     
            mysql_query($query1)or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
            mysql_query($query2)or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
        echo "</tr>";
      }
    }
    echo "</table>\n";
    mysql_close();
    }
    }
    ?>
     
    </body>
    </html>

    voici le fichier csv comment il est constitué:

    OM190033;19; DELGADO ANTHRACITE OU BLEU/ALU STYLO PLUME;;Instruments d'écriture avec corps en métal et attributs en métal dorés. Plume en acier inoxydable doré à pointe iridium (M).;;Objet;396;15-40;50;4.733;2.00;0.00;2.00;0.00;2.00;0.00;2.00;;;;;;;

    Merci de votre aide
    j'ai oublié une chose, sur un poste WX avec easyPHP ça marche nickel.le problème je le veux sur Linux.
    j'ai pensé à faire la procedure sur windows ensuite importé la base, mais j'ai un gros problème d'affichage de caractère, donc j'ai aussitot arreter car je connais ce genre de problème.

  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
    Fait un echo de la requete qui ne fonctionne pas.
    Ca sera plus facile pour voir ce qui ne va pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Par défaut
    j'ai des echo pour chaque requete est j'ai ces messages d'erreurs;

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select ref from objetsinsert into objets(ref,nom,descriptif,nom_all,descriptif_all,prix,fournisseur,type)values('OM190031;19; DELGADO CHROME/DORE STYLO PLUME;;Instruments décriture avec corps en métal et attributs en métal dorés. Plume en acier inoxydable doré à pointe iridium (M).;;Objet;396;38;50;5.203;2.00;0.00;2.00;0.00;2.00;0.00;2.00;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,','','','','',,,'')insert into prix(id,ref,P1,P2,P4,P5,P10,P15,P20,qte) values('','OM190031;19; DELGADO CHROME/DORE STYLO PLUME;;Instruments décriture avec corps en métal et attributs en métal dorés. Plume en acier inoxydable doré à pointe iridium (M).;;Objet;396;38;50;5.203;2.00;0.00;2.00;0.00;2.00;0.00;2.00;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',* , * , * , * , * , * , * ,)
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur SQL !
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ','')' at line 1
    OM190031;19; DELGADO CHROME/DORE STYLO PLUME;;Instruments décriture avec corps en métal et attributs en métal dorés. Plume en acier inoxydable doré à pointe iridium (M).;;Objet;396;38;50;5.203;2.00;0.00;2.00;0.00;2.00;0.00;2.00;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

  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
    C'est étrange le guillemet disparait apres le premier élément.

    Tu pourrais faire un print_r($tab); avant la requete ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    values('OM190031;19; DELG...
    Tu n'as pas séparé les colonnes donc il essaie de mettre toute la ligne de ton fichier source dans la colonne ref.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Par défaut
    voila ce que ça m'affiche:
    Merci quand meme les gars, vous etes bien sympa pour votre aide

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select ref from objets
    Array ( [0] => OM190031;19; DELGADO CHROME/DORE STYLO PLUME;;Instruments décriture avec corps en métal et attributs en métal dorés. Plume en acier inoxydable doré à pointe iridium (M).;;Objet;396;38;50;5.203;2.00;0.00;2.00;0.00;2.00;0.00;2.00;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, )
     insert into objets(ref,nom,descriptif,nom_all,descriptif_all,prix,fournisseur,type)values('OM190031;19; DELGADO CHROME/DORE STYLO PLUME;;Instruments décriture avec corps en métal et attributs en métal dorés. Plume en acier inoxydable doré à pointe iridium (M).;;Objet;396;38;50;5.203;2.00;0.00;2.00;0.00;2.00;0.00;2.00;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,','','','','',,,'')
    insert into prix(id,ref,P1,P2,P4,P5,P10,P15,P20,qte) values('','OM190031;19; DELGADO CHROME/DORE STYLO PLUME;;Instruments décriture avec corps en métal et attributs en métal dorés. Plume en acier inoxydable doré à pointe iridium (M).;;Objet;396;38;50;5.203;2.00;0.00;2.00;0.00;2.00;0.00;2.00;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',* , * , * , * , * , * , * ,)
    
    Erreur SQL !
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ','')' at line 1
    OM190031;19; DELGADO CHROME/DORE STYLO PLUME;;Instruments décriture avec corps en métal et attributs en métal dorés. Plume en acier inoxydable doré à pointe iridium (M).;;Objet;396;38;50;5.203;2.00;0.00;2.00;0.00;2.00;0.00;2.00;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

  7. #7
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tailles=explode("-",$tab[$i]);
    Pourquoi tu fais des explode sur le caractère - alors que tes champs sont séparés par des ; ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Erreur requete INSERT INTO en java mySQL
    Par ninya dans le forum Débuter
    Réponses: 1
    Dernier message: 08/01/2010, 10h15
  2. erreur requete INSERT
    Par benga69 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 29/09/2008, 17h11
  3. Réponses: 2
    Dernier message: 01/04/2008, 09h38
  4. message d'erreur sur requete INSERT
    Par captainamerica75 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/05/2007, 13h21
  5. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 17h32

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