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 :

Requête se déroule mais n'enregistre rien dans la base [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Par défaut Requête se déroule mais n'enregistre rien dans la base
    Bonjour à tous,

    Nouveau venu sur ce forum, et nouveau pratiquant du php (autodidacte: dur dur!), je souhaiterai solliciter votre aide.
    Je suis en train de mettre en place un script pour importer un fichier csv dans une table.
    Ma requête s'exécute bien, mais il n'y a aucun enregistrement effectué dans la table.
    Voici mon code, si ça peut vous aider.
    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
    $db_selected=mysql_select_db('alte strade');
     
    //=========================
    // Traitement des donnees
    //=========================
     
    //recupere le nom du fichier indiqué par l'user
    $fichier=$_FILES["userfile"]["name"];
     
    // ouverture du fichier en lecture    
    if ($fichier)
    	{
    	//ouverture du fichier temporaire 
    	$fp = fopen ($_FILES["userfile"]["tmp_name"], "r"); 
    	}
    else{ 
    	// fichier inconnu 
    	?>
    	<p align="center" >- Importation échouée -</p>
    	<p align="center" ><B>Désolé, mais vous n'avez pas spécifié de chemin valide ...</B></p>
    	<?php
      	exit(); 
    	}
    // declaration de la variable "cpt" qui permettra de compter le nombre d'enregistrements réalisés
    $cpt=0;
    ?>
    <p align="center">- Importation Réussie -</p>
     
    			<p align="right"><a href="#bas">Bas de page</a></p>
     
    <?php
    // importation    
    while (!feof($fp))
    {
      $ligne = fgets($fp,4096);  
      // on crée un tableau des élements séparés par des points virgule
      $liste = explode(";",$ligne); 
      // premier élément
      $liste[1] = ( isset($liste[1]) ) ? $liste[1] : Null;
      $liste[2] = ( isset($liste[2]) ) ? $liste[2] : Null;
      $liste[3] = ( isset($liste[3]) ) ? $liste[3] : Null;
      $liste[4] = ( isset($liste[4]) ) ? $liste[4] : Null;
      $liste[5] = ( isset($liste[5]) ) ? $liste[5] : Null;
      $liste[6] = ( isset($liste[6]) ) ? $liste[6] : Null;
      $liste[7] = ( isset($liste[7]) ) ? $liste[7] : Null;
      $liste[8] = ( isset($liste[8]) ) ? $liste[8] : Null;
      $liste[9] = ( isset($liste[9]) ) ? $liste[9] : Null;
      	$classement=$liste[1]; 
    	$nom=$liste[2];
        $prenom= $liste[3];
    	$dossard= $liste[4];
    	$licence= $liste[5];
    	$naissance= $liste[6];
    	$club= $liste[7];
    	$classement_cat= $liste[8];
    	$temps= $liste[9];
      	// pour eviter qu un champs "classement" du fichier soit vide
    	if ($classement!='')
    		{
    		// nouvel ajout, compteur incrémenté
    		$cpt++; 
    		// requete et insertion ligne par ligne 
    		// champs1 id en general dc on affecte pas de valeur
    		$query = "INSERT INTO gravona (Classement,Nom,Prénom,Dossard,Licence,Ne_en,Club,Classement_par_catégorie,temps_) VALUES('$classement','$nom','$prenom','$dossard','$licence','$naissance','$club','$classement_cat','$temps')";  
      		$result= mysql_query($query);
      		if (mysql_error())
    			{
    			?>
    			<p align="center" ><B>ERREUR DE REQUETE SUR LA BASE.</B></p>
    			<?php 
    			fclose($fp);
    			exit(); 
      			}
    		else
    			{
    			?>
    			<table width="505" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#eeeeee">
        			<tr>
          				<td width="124">Article importé :</td>
          				<td width="361"><?php echo $liste[2];?></td>
        			</tr>
    			</table>
    			<?php
    			}
    		}
    }
    // fermeture du fichier
    fclose($fp);
    //on supprime la derniere car elle est vide
    //$sql=mysql_query("DELETE FROM gravona WHERE classement=''"); 
     
    //==================
    // FIN
    //==================
    ?>
    <br><br>Nombre de valeurs nouvellement enregistrées: <b><?php echo $cpt;?></b>.<br><br>
    Merci infiniment pour les réponses que vous pourrez me fournir.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Par défaut
    Es tu vraiment sur que ta requête est conforme ?

    Juste au cas ou, tu peux faire un "echo" de $query (ta requete) en dessous.
    Ensuite, tu colles cela dans l'onglet SQL de phpmyadmin par exemple, afin de vérifier si la syntaxe et les différentes valeurs des champs sont corrects.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    Tu peux ajouter "echo $query" pour voir si tout va bien jusque là ?

    Sinon attention, s'il y a un guillemet dans tes datas, ca passera pas. Il faut que tu escapes toutes les variables avec mysql_real_escape_string.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Par défaut
    Ok, merci pour vos réponses.
    Je vérifie tout ça et vous tient au courant.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Par défaut
    Bonjour,

    comme préconisé, j'ai copié ma requête dans mysql, et cela a fonctionné.
    Mais je ne vois aucun changement dans la requête au niveau de mon fichier php. Cela reste identique.
    J'ai bien ajouté un 'echo' devant $query, de cette manière:
    echo $query = "INSERT INTO gravona (Classement,Nom,Prénom,Dossard,Licence,Né_en,Club,Classement_par_catégorie,temps_) VALUES('$classement','$nom','$prenom','$dossard','$licence','$naissance','$club','$classement_cat','$temps')";
    Malheureusement, aucune valeur n'est enregistrée.
    Peut être que j'ai oublié quelques chose...
    Merci de votre aide.

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut
    Il faut que tu passes par des opérandes de concaténation ( . ) pour tes variables classement, nom, prenom etc... car entre single quote (') elles ne sont pas interprétées et $classement équivaut non pas à la valeur du classement mais au nom de la variable (donc $classement).

    Essaye ceci, çelà devrait aller mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $query = "INSERT INTO gravona (Classement,Nom,Prénom,Dossard,Licence,Né_en,Club,Classement_par_catégorie,temps_) VALUES('.$classement.','.$nom.','.$prenom.','.$dossard.','.$licence.','.$naissance.','.$club.','.$classement_cat'.,'.$temps.')'";

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Par défaut
    Merci pour ta réponse.

    Pourtant cette modification ne change rien. J'ai toujours 0 valeurs enregistrées. Et je n'arrive pas à saisir pourquoi.
    Si quelqu'un à d'autre idées à me faire partager...

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Par défaut
    pourquoi as tu 8 champs et 9 insert ?

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Par défaut
    erreur de ma part
    desole

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Par défaut
    @Brice14000

    Effectivement, la modification était nécessaire.
    D'autre part j'avais mis une clé primaire sur le champ 'POINTS'. Mauvaise idée car les données de ce champs seront ajoutées plus tard.
    Donc à chaque ajout dans la base, il met par défaut 0 pour chaque ligne du champ 'Points'. Je me retrouve avec des doublons sur un champ possédant une clé primaire.

    Autre chose: le fichier que je souhaite importer utilise comme séparateur ";". Cela veut dire ";" entre chaque valeur à insérer, mais aussi en début et en fin de ligne.

    De cette manière mes valeurs sont enregistrées correctement.

    Un GRAND merci donc à tous pour votre aide.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/11/2012, 09h11
  2. Réponses: 0
    Dernier message: 12/03/2010, 15h45
  3. [INSERT INTO] Rien dans ma base !
    Par dekovince dans le forum Débuter
    Réponses: 7
    Dernier message: 21/03/2007, 17h37
  4. Réponses: 10
    Dernier message: 14/02/2007, 12h03
  5. [MySQL] Selectionner 4 enregistrements aléatoires dans ma base
    Par Benji76 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/03/2006, 16h20

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