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 :

generer matricule automatique pour etudiant [MySQL]


Sujet :

PHP & Base de données

  1. #21
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Par défaut
    merci beaucoup de votre aide , pour la création des procédures j ai crée une table matrcule(id,libelle) pour tester ma procédure et j ai crée cette procédure:

    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
     
     
    delimiter $$
    DROP procedure IF EXISTS inscription$$
    CREATE procedure inscription(IN libelle varchar(255))
    begin
      declare y smallint DEFAULT year(current_date);
      declare i mediumint;
      SET autocommit=0;
      start transaction;
        SELECT count(id)+1
        INTO i
        FROM matricule
        WHERE year(current_date)=y;
        INSERT INTO matrcule(libelle)VALUES(concat(y,'-',lpad(i,6,'0'),'-m'));
      end;
    end$$
    delimiter;
    mais pares execution j ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    MySQL a répondu: 
     
    #1064 - 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 'end' at line 13
    la ligne 13 est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     INSERT INTO matrcule(libelle)VALUES(concat(y,'-',lpad(i,6,'0'),'-m'));
    merci d'avance

  2. #22
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    t'as oublié le i de matricule

  3. #23
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Par défaut
    merci bien , mais je ne vois pas la ou j ai laissé le i de matricule merci d'avance de me précisez la ou je laissé le i

  4. #24
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO matricule(libelle)VALUES(concat(y,'-',lpad(i,6,'0'),'-m'));

  5. #25
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Par défaut
    j'avais bien mis le i dans ma requête voir mon code précédent

    merci d'avance

  6. #26
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    non il n'y était pas relis ton post mais j'ai vu ce qui ne doit pas aller: fin de transaction ce fait avec un commit pour valider ou rollback pour annuler

    c'est ma faute, l'habitude des begin... end

    attention à l'espace obligatoire entre la commande delimiteur et le délimiteur choisi...

    je rectifie dans mon post aussi
    Code sql : 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
    delimiter $$
    DROP procedure IF EXISTS inscription$$
    CREATE procedure inscription(IN libelle varchar(255))
    begin
      declare y smallint DEFAULT year(current_date);
      declare i mediumint;
      SET autocommit=0;
      start transaction;
        SELECT count(id)+1
        INTO i
        FROM matricule
        WHERE year(current_date)=y;
        INSERT INTO matricule(libelle)VALUES(concat(y,'-',lpad(i,6,'0'),'-m'));
      commit;
    end$$
    delimiter ;

  7. #27
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Par défaut
    merci beaucoup de votre aide ça m a beaucoup appris et ça fonctionne nickel

  8. #28
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Par défaut
    bonjour , j'ai un problème lorsque j appelle ma procédure dans php

    j'ai essaye de l'appelé de la manière suivante mais ça ne passe pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
      $req=mysql_query( "Call  inscription('','$nom','$prenom','$sexe','$age','$adresse','$email','$phone','$date_creation')");
    et pourtant j'ai fait des test dans un autre formulaire avec un seul champ libelle ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      $req=mysql_query( "Call  inscription('')");

    code de ma procedure


    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
     
     
    delimiter $$
    DROP procedure IF EXISTS inscription$$
     
     
    CREATE procedure inscription(IN matricule  varchar(255) , IN nom  varchar(255),IN  prenom varchar(255),IN  sexe varchar(255),
                                  IN age int(2),IN adresse varchar(255),IN email  varchar(255),IN telephone  int(8),IN  date_inscription date
    							 )
    begin
      declare y smallint DEFAULT year(current_date);
      declare i mediumint;
      SET autocommit=0;
      start transaction;
        SELECT valeur+1
        INTO i
        FROM semaphores
        WHERE nom='inscrits'
        FOR UPDATE;
        INSERT INTO eleve(matricule,nom,prenom,sexe,age,adresse,email,telephone,date_inscription)VALUES(concat(y,'-',lpad(i,6,'0'),'-M'),nom,prenom,sexe,age,adresse,email,telephone,date_inscription);
    UPDATE semaphores
        SET valeur=valeur+1
        WHERE nom='inscrits';
      commit;
    end$$
     
     
    delimiter ;
    merci d'avance

  9. #29
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    déjà pourquoi tu mets matricule en paramètre alors qu'il doit être créé dans la procédure?

    et sinon qu'est ce qui passe pas, s'il y a une erreur mets là, je suis pas un interpréteur mysql

  10. #30
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Par défaut
    voici ma nouvelle procedure

    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
     
     
    delimiter $$
    DROP procedure IF EXISTS inscription$$
     
     
    CREATE procedure inscription(IN nom  varchar(255),IN  prenom varchar(255),IN  sexe varchar(255),
                                  IN age int(2),IN adresse varchar(255),IN email  varchar(255),IN telephone  int(8),IN  date_inscription date
    							 )
    begin
      declare y smallint DEFAULT year(current_date);
      declare i mediumint;
      SET autocommit=0;
      start transaction;
        SELECT valeur+1
        INTO i
        FROM semaphores
        WHERE nom='inscrits'
        FOR UPDATE;
        INSERT INTO eleve(matricule,nom,prenom,sexe,age,adresse,email,telephone,date_inscription)VALUES(concat(y,'-',lpad(i,6,'0'),'-M'),nom,prenom,sexe,age,adresse,email,telephone,date_inscription);
    UPDATE semaphores
        SET valeur=valeur+1
        WHERE nom='inscrits';
      commit;
    end$$
     
     
    delimiter ;

    j essaye de teste ce code dans sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    call inscription('dieng','kalidou','masculin',32,'arafat','dien@gmail.com',47708081,'12/10/2012')
    voici l'erreur que ça me genere

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #1048 - Column 'matricule' cannot be null
    merci d'avance

  11. #31
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    c'est quoi la valeur de i?


    commente l'insert

    concat renvoie null si l'un des paramètres est null

    rajoute, le temps de comprendre ce qui va pas, après le select:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select i,concat(y,'-',lpad(i,6,'0'),'-M');

    comme ça tu peux voir ce que ça fait vraiment

  12. #32
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    c'est quoi la valeur de i?


    commente l'insert

    concat renvoie null si l'un des paramètres est null

    rajoute, le temps de comprendre ce qui va pas, après le select:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select i,concat(y,'-',lpad(i,6,'0'),'-M');

    comme ça tu peux voir ce que ça fait vraiment

    pour mieux comprendre


    j ai creé une table semaphores qui sert de compteur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    DROP TABLE IF EXISTS semaphores;
    CREATE TABLE semaphores(
      id tinyint UNSIGNED AUTO_INCREMENT NOT NULL,
      nom varchar(64) NOT NULL,
      valeur int NOT NULL,
      constraint pk_semaphores PRIMARY KEY(id)
    )engine=innodb AUTO_INCREMENT=1;
    apres j ai inserer cette ligne


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO semaphores(nom,valeur)VALUES('inscrits',0);

    donc la valeur i represente la valeur+1 selectionner dans la table semaphores
    dans notre cas la premiere valeur va etre egale a 1 ainsi de suite


    merci d'avance

  13. #33
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Par défaut
    bonjour , d'apres mes tests le problème vienne de la valeur i car lorsque j ai remplacé par une valeur numérique ça marche , donc ça veut dire que ma procédure n'arrive pas a exécuté la partie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
     SELECT valeur+1
        INTO i
        FROM semaphores
        WHERE nom='inscrits'
    en sachant que j'ai crée une table semaphores

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     
    DROP TABLE IF EXISTS semaphores;
    CREATE TABLE semaphores(
      id tinyint UNSIGNED AUTO_INCREMENT NOT NULL,
      nom varchar(64) NOT NULL,
      valeur int NOT NULL,
      constraint pk_semaphores PRIMARY KEY(id)
    )engine=innodb AUTO_INCREMENT=1;
    et j ai inseré cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    INSERT INTO semaphores(nom,valeur)VALUES('inscrits',0);
    merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/04/2012, 14h04
  2. Réponses: 3
    Dernier message: 25/01/2006, 17h54
  3. [VB.NET] ScrollBar automatique pour Listbox
    Par Aspic dans le forum VB.NET
    Réponses: 6
    Dernier message: 19/12/2005, 13h58
  4. Defilement automatique pour un diaporama
    Par Paniez dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/12/2005, 10h26
  5. Generer un script pour une BDD "*.sql"+"*.bat
    Par subzero82 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/08/2005, 16h47

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