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 :

Insertion dans une base de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut Insertion dans une base de données
    Salut,
    Mon programme consiste a faire une mise a jour d'une base de donnée a partir d'un fichier texte au format csv. la mise a jour se fait normalement mais j'ai tout juste ajouté une autre condition pour que mon programme soit un peu complet. cette condition consiste a détecter une nouvelle ligne dans mon fichier texte et l'insère dans ma base de donnée. j'ai écrit le code et semble intact mais en compilant je reçois l'erreur suivante:
    Fatal error: Maximum execution time of 30 seconds exceeded in C:\Program Files\EasyPHP 2.0b1\www\fini_ress2.php on line 39
    voila mon 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
    <?php
    mysql_connect("localhost", "root", ""); 
    mysql_select_db("tuniproject"); 
    $reponse = mysql_query("SELECT * FROM ressources");
    $monfichier = fopen("ressources.txt", "r+");
    $repdeb="med";
    while ($repdeb!="UNIT" or $repdeb<0 or $repdeb>500)
    {
        $ligne = fgets($monfichier);
        $array_chaine = explode(';', $ligne); 
        $repdeb=$array_chaine[0];
    }
    $array_chaine[1]="PHYS_STATE";
    $ligne = fgets($monfichier);
    while ($donnees = mysql_fetch_array($reponse))
    {
    $array_chaine1 = explode(';', $ligne); 
    if ($array_chaine1[1] != $donnees['PHYS_STATE'])
    {
        echo "changement du statut physique ".$donnees['PHYS_STATE']." en ".$array_chaine1[1]." dans ".$donnees['UNIT']."<br />";
    	mysql_query('UPDATE ressources SET PHYS_STATE="'.$array_chaine1[1].'" WHERE id="'.$donnees['id'].'"');
    }
    if ($array_chaine1[2] != $donnees['LOCATION'])
    {
        echo "changement de la location ".$donnees['LOCATION']." en ".$array_chaine1[2]." dans ".$donnees['UNIT']."<br />";
    	mysql_query('UPDATE ressources SET LOCATION="'.$array_chaine1[2].'" WHERE id="'.$donnees['id'].'"'); 
    }
    $ligne = fgets($monfichier);
    }
    $test=$ligne!="";
    if ($test=true)
    {
    $comp=$donnees['id']+1;
    }
    while ($ligne!="")
    {
    $array_chaine1 = explode(';', $ligne); 
    mysql_query('INSERT INTO ressources VALUES('.$comp.','.$array_chaine1[0].','.$array_chaine1[1].','.$array_chaine1[2].')');
    $comp++;
    }
    mysql_close(); 
    fclose($monfichier);
    ?>
    j'ai ajouté la variable $comp pour inserer mon id qui ne figure pas dans le fichier de mise a jour.
    merci.

  2. #2
    Membre éprouvé
    Inscrit en
    Juin 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Juin 2009
    Messages : 104
    Par défaut
    hello

    Fatal error: Maximum execution time of 30 seconds exceeded in C:\Program Files\EasyPHP 2.0b1\www\fini_ress2.php on line 39
    j'ai copié de <?php jusqu'à ?> dans mon BBEDIT favori, la ligne 39 étant :
    pourrais-tu faire un echo ou autre de "$ligne" juste avant la ligne 35 ?
    vu que quelque chose part en boucle, si je comprend bien dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while ($ligne!="")
    {
    $array_chaine1 = explode(';', $ligne);
    mysql_query('INSERT INTO ressources VALUES('.$comp.','.$array_chaine1[0].','.$array_chaine1[1].','.$array_chaine1[2].')');
    $comp++;
    }
    également, mais je ne suis pas un pro de PHP,
    que signifie
    $test=$ligne!="";
    cela ne m'est pas familier (je sens que je vais apprendre un truc super grave !).

    j'espère ne pas avoir été trop idiot et que mes lignes aideront.

    Douce journée
    Pat

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    Vérifie si tu n'as pas de boucle infinie dans ton code.
    Sinon ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set('max_execution_time','0');
    Le paramètre 0 dit que le script peut tourne durant un temps infinie (en seconde), mais tu peux le modifier à ton besoin.

  4. #4
    Membre éclairé Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    merci pour vos réponses.
    @cholopat:
    seule la dernière boucle while qui bug le code, si je l'enlève il marche normalement mais vraiment je vois pas exactement son problème
    $test=$ligne!="";
    cette commande génère une variable booléenne nommée "$test" qui teste justement la fin du fichier.
    @andry.aime:
    j'ai ajouté ta commande dans mon code et j'ai remplacer le 0 par 50 pour limiter la boucle et éviter l'infinité au cas ou mais le résultat c'est qu'il n'affiche plus rien même pas une erreur. Il se bloque au chargement.

  5. #5
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    En fait ton probleme vient d'une boucle infinie je pense. Tu dis de faire une insertion tant que tu n'as pas vidé $ligne mais tu ne le vides jamais au final! La fonction explode transforme "test1;test2;test3" en un tableau contenant 3 éléments (test 1, test2 et test3).
    Du coup il faut que transformes $ligne en un tableau, et qu'ensuite seulement tu boucle sur le tableau résultant en faisant une boucle for/while

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    C'est sûr que c'est boucle infinie
    while ($ligne!="")
    {
    $array_chaine1 = explode(';', $ligne);
    mysql_query('INSERT INTO ressources VALUES('.$comp.','.$array_chaine1[0].','.$array_chaine1[1].','.$array_chaine1[2].')');
    $comp++;
    }
    Mais je ne sais pas ou en veux tu en venir.
    Tu as tansformé $ligne en tableau dans le boucle,
    $array_chaine1 = explode(';', $ligne);
    Je pense que tu devrais le faire en dehors du boucle et faire la condition avec $array_chaine1

  7. #7
    Membre éclairé Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    Bon c'est vrai c'était du charabia ma boucle car j'ai oublier de passer a chaque fois a la ligne suivante (lol)
    je l'ai transformé maintenant et ce n'est plus une boucle infinie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while ($ligne!="")
    {
    $array_chaine1 = explode(';', $ligne); 
    mysql_query('INSERT INTO ressources VALUES('.$comp.','.$array_chaine1[0].','.$array_chaine1[1].','.$array_chaine1[2].')');
    echo "insertion de nouveaux parametres".$array_chaine1[0]."<br />";
    $comp++;
    $ligne = fgets($monfichier);
    }
    fallait écrire '$ligne = fgets($monfichier);' pour passer a chaque fois a une nouvelle ligne pour avoir enfin la condition qui me fait sortir de la boucle. Voila maintenant j'affiche aussi le contenu de mes nouvelles ligne et c'est correct mais reste que la base de donnée qui reste intacte pourtant la commande 'insert to' me semble correcte.
    @andry.aime: Je transforme a chaque fois ma ligne du fichier texte en array pour avoir chaque valeur a part pour pouvoir l'inserer par la suite dans ma base de donnée.
    merci,

  8. #8
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Il est important de vérifier que mysql_query() n'a pas échoué quand meme!
    il faudrait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $requete= 'INSERT INTO ressources VALUES('.$comp.','.$array_chaine1[0].','.$array_chaine1[1].','.$array_chaine1[2].')';
     
    mysql_query($requete) or die("Erreur :" . mysql_error(). "<br/>Requête :$requete");

  9. #9
    Membre éclairé Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    merci pour votre réponse ^^'
    j'ai ajouté la condition d'erreur et ça m'affiche :
    Erreur :Champ 'ET' inconnu dans field list
    Requête :INSERT INTO ressources VALUES(16,ET-784,SE-NH,1A005-06)
    16 c'est l'id de la nouvelle ligne sachant que le dernier id dans ma table c'est 16 donc pas d'erreur pour la variable $comp et les autres donnée sont dans la nouvelle ligne ajoutée dans mon fichier.

  10. #10
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    il faut ajouter des quotes autour des champs texte pour l'insertion dans la base de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete= 'INSERT INTO ressources VALUES('.$comp.',"'.$array_chaine1[0].'","'.$array_chaine1[1].'","'.$array_chaine1[2].'")';

  11. #11
    Membre éclairé Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    ah oui c'était ça le problème merci infiniment ^^'
    mais je comprend toujours pas pourquoi la variable $comp ne nécessite pas de cote alors que la variable du array en a besoin Ôo
    merci encore et bonne continuation.

  12. #12
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Je suppose que la colonne dans laquelle tu mets $comp n'est pas un champ texte mais un champ qui représente un nombre?
    En gros il faut entourer des "quotes" les valeurs qui vont s'insérer dans des champs textuels (VARCHAR ou TEXT par exemple)

  13. #13
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Les données à insérer devront être dans une simple quote
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete= "INSERT INTO ressources VALUES('".$comp."','".$array_chaine1[0]."','".$array_chaine1[1]."','".$array_chaine1[2]."')";

  14. #14
    Membre éclairé Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    oui exactement $comp est un nombre et il est d'ailleurs l'id du tableau ^^'

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

Discussions similaires

  1. Parcours d'un fichier et insertion dans une base de données !
    Par condor_01 dans le forum Général Java
    Réponses: 2
    Dernier message: 24/04/2008, 09h24
  2. Insertion dans une base de donnée
    Par hamzus2005 dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/07/2007, 11h40
  3. Problème d'insertion dans une base de donnèes
    Par atout dans le forum Administration
    Réponses: 14
    Dernier message: 27/12/2006, 07h07
  4. Insertion dans une base de donnée MYSQL !
    Par condor_01 dans le forum JDBC
    Réponses: 7
    Dernier message: 01/08/2006, 12h10
  5. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 22h13

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