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 :

incrémenter un champ dans la base a chaque nouveau document


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de hadjiphp
    Inscrit en
    Décembre 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 155
    Points : 43
    Points
    43
    Par défaut incrémenter un champ dans la base a chaque nouveau document
    Bonjour,
    j'ai une question :
    table "stage" contient les champs : terme, occure, url,titre,resume,code_doc
    code_doc : je doit codé chaque nouveau document c-à-d a chque rentré d'un URL j'incrémente le code_doc si non j'ai rien fait.

    je fait un code php qui permet de parcourir la base de donnée et quand je rentre un nouveau URL, je teste si cette URL existe je l'insert pas dans la base mais si non (si cette URL n'existe pas dans la base de données) alors j'incrément le code_doc et j'insert dans la base de donnée.

    voila 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
     
    <?php
    $sql_rech=mysql_query("select * from stage order by code_doc");
    while (($tab_rech=mysql_fetch_array($sql_rech)) and (($tab_rech['url']!= $code)))
    {}
     
     
    if ($tab_rech['url']!=$code)
    {
    $x= $tab_rech['code_doc'];
    $x++;
    foreach( $stats as $mot => $nb)
    {
    $sql = "INSERT INTO stage 
           (terme, occure, url,titre,resume,code_doc) 
           VALUES
           ('" . $mot . "', $nb, '" . $code ."','".$champs1_titre."','".$champs1_descr."','".$x."')
           ";   
    mysql_query($sql) or die (mysql_error());
    }
    }
    ?>

    avec la connexion c'est sur.

    ma question :
    1-j'arrive a faire le teste dans la base de données si cette URL existe alors je l'insert pas dans la base de données.
    mais dans le cas contraire (si cette URL n'existe pas) j'arrive a inserer dans la base de données mais je n'arrive pas a incrémenter le code_doc.

    merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu peux faire :
    - une requete (AVANT nouvelle insertion) :
    "select MAX(code_doc) AS code_doc_max from stage"
    - recuperer ce code_doc_max dans une variable $code_doc_max;
    - et incrementer (pour l'insertion) avec $code_doc_new = $code_doc_max + 1;

  3. #3
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Bonjour,

    Une clef mysql permet de rendre un champ unique et d'éviter ta boucle.

    Ensuite il ne te reste qu'a faire une sous-requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $sql = "INSERT INTO stage 
           (terme, occure, url,titre,resume,code_doc) 
           VALUES
           ('" . $mot . "', $nb, '" . $code ."','".$champs1_titre."','".$champs1_descr."',( SELECT MAX(code_doc)+1 FROM stage))
           "; 
    ?>
    Bonne soirée
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Points : 58
    Points
    58
    Par défaut
    bonjour,
    jreaux62 cette technique est à prohiber sauf ....

    C'était la technique utilisée au siècle dernier :-) avant que monsieur Oracle n'invente les séquences dans sa version 6 ou 7 et que les autres suivent avec plus de légèreté (auto_increment et cie).
    Pourquoi ? Parce que dans un contexte multi-utilisateurs (et nous y sommes), entre le temps de la requête SELECT MAX() ... et l'INSERT un autre "zozo" a fait la même chose d'où l'incohérence au niveau de la BD.

    Le SAUF : ça marche si et seulement si au moment du SELECT MAX() (ie avant) on verrouille la table. Mais c'est un peu lourd au niveau de l'accès aux données. C'est bien pour cela que les séquences Oracle et les auto_increment MSS, MySQL et cie sont là.
    bonne soirée

  5. #5
    Membre du Club Avatar de hadjiphp
    Inscrit en
    Décembre 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 155
    Points : 43
    Points
    43
    Par défaut
    Bonjour,
    merci pour vous réponse mais le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $sql = "INSERT INTO stage 
           (terme, occure, url,titre,resume,code_doc) 
           VALUES
           ('" . $mot . "', $nb, '" . $code ."','".$champs1_titre."','".$champs1_descr."',( SELECT MAX(code_doc)+1 FROM stage))
           "; 
    ?>
    ça marche pas elle affiche une erreur.

    svp a ce que vous pouyvez m'aider.

    merci d'avance.

  6. #6
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    tu pourrais peut être indiqué l'erreur, non?
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  7. #7
    Membre du Club Avatar de sarah65536
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 59
    Points
    59
    Par défaut
    Comme l'a dit pascalbuguet, le plus simple c'est d'ajouter dans ta table le champs 'code_doc' en auto_increment.
    Et lors de ton insertion, tu supprime ce qui le concerne. Ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $sql = "INSERT INTO stage 
           (terme, occure, url,titre,resume) 
           VALUES
           ('" . $mot . "', $nb, '" . $code ."','".$champs1_titre."','".$champs1_descr."')
           "; 
    ?>

Discussions similaires

  1. [MySQL] 2 champs de formulaire pour un champ dans la base de donnée
    Par shnouf dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/09/2007, 11h19
  2. [MySQL] Probleme insertion d un champ dans ma base !
    Par dekovince dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/04/2007, 15h08
  3. Recherche d'un champ dans une base
    Par vanou dans le forum ASP
    Réponses: 3
    Dernier message: 24/05/2006, 10h31
  4. position du champs dans une base de donnée
    Par eric205 dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/04/2005, 09h22
  5. ASp - recherche d'un champs dans une base.
    Par kmayoyota dans le forum ASP
    Réponses: 5
    Dernier message: 03/12/2004, 15h03

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