Php. incrementer un nombre dans un champ varchar
Résolu
appo26
-
appo26 -
appo26 -
salut a tous.
dans mon application j'ai une table tb_eleve avec le champ id de type varchar mais non auto-increment, pour realiser ce champ, je prend une partie du nom et du prenom de l'eleve pour former son id, mais cela peut arriver qu'on ait deux eleves avec le meme nom et prenom, ce qui donnerait deux eleves avec le meme id dans la table eleve(les id doivent etre uniques), pour eviter cela, je dois avoir un chiffre qui s'incremente a chaque nouvelle insertion. par exemple pour un eleve qui s'appelle julien pierre, son id doit etre JULPI-01, xxxxx-02, xxxxx-03.... ainsi de suite. voici mon bout de code:
<?php
//session_start();
//require_once("connection.php");
//connection au serveur
$cnx = mysql_connect( "localhost", "root", "" ) ;
//sélection de la base de données:
$db = mysql_select_db( "ecole" ) ;
//$password = md5($password);
//récupération des valeurs des champs:
$annee = $_POST['annee'];
$mois = $_POST['mois'];
$jour = $_POST['jour'];
$date = $annee.'-'.$mois.'-'.$jour;
$codeeleve = $_POST["codeeleve"] ;
$nom = $_POST["nom"] ;
$prenom = $_POST["prenom"] ;
$sexe = $_POST["sexe"] ;
$datenaissance = $_POST["datenaissance"];
$classe = $_POST["classe"] ;
$anneeacademique = $_POST["anneeacademique"] ;
$persresp = $_POST["persresp"] ;
$lienparental = $_POST["lienparental"] ;
$adresse = $_POST["adresse"] ;
$telephone = $_POST["telephone"] ;
$name=strtoupper(substr($nom, 0 ,3));
$fname=strtoupper(substr($prenom,0 ,2));
$codeeleve="$name$fname";
//création de la requête SQL:
$sql = "INSERT INTO tb_eleve (Code_Eleve, Nom, Prenom, Sexe, Date_Naissance, Classe, Annee_Academique, Pers_Resp,Lien_Parental, Adresse, Telephone)
VALUES ('$codeeleve','$nom', '$prenom', '$sexe', '$annee-$mois-$jour','$classe','$anneeacademique','$persresp','$lienparental','$adresse','$telephone') " ;
merci!
dans mon application j'ai une table tb_eleve avec le champ id de type varchar mais non auto-increment, pour realiser ce champ, je prend une partie du nom et du prenom de l'eleve pour former son id, mais cela peut arriver qu'on ait deux eleves avec le meme nom et prenom, ce qui donnerait deux eleves avec le meme id dans la table eleve(les id doivent etre uniques), pour eviter cela, je dois avoir un chiffre qui s'incremente a chaque nouvelle insertion. par exemple pour un eleve qui s'appelle julien pierre, son id doit etre JULPI-01, xxxxx-02, xxxxx-03.... ainsi de suite. voici mon bout de code:
<?php
//session_start();
//require_once("connection.php");
//connection au serveur
$cnx = mysql_connect( "localhost", "root", "" ) ;
//sélection de la base de données:
$db = mysql_select_db( "ecole" ) ;
//$password = md5($password);
//récupération des valeurs des champs:
$annee = $_POST['annee'];
$mois = $_POST['mois'];
$jour = $_POST['jour'];
$date = $annee.'-'.$mois.'-'.$jour;
$codeeleve = $_POST["codeeleve"] ;
$nom = $_POST["nom"] ;
$prenom = $_POST["prenom"] ;
$sexe = $_POST["sexe"] ;
$datenaissance = $_POST["datenaissance"];
$classe = $_POST["classe"] ;
$anneeacademique = $_POST["anneeacademique"] ;
$persresp = $_POST["persresp"] ;
$lienparental = $_POST["lienparental"] ;
$adresse = $_POST["adresse"] ;
$telephone = $_POST["telephone"] ;
$name=strtoupper(substr($nom, 0 ,3));
$fname=strtoupper(substr($prenom,0 ,2));
$codeeleve="$name$fname";
//création de la requête SQL:
$sql = "INSERT INTO tb_eleve (Code_Eleve, Nom, Prenom, Sexe, Date_Naissance, Classe, Annee_Academique, Pers_Resp,Lien_Parental, Adresse, Telephone)
VALUES ('$codeeleve','$nom', '$prenom', '$sexe', '$annee-$mois-$jour','$classe','$anneeacademique','$persresp','$lienparental','$adresse','$telephone') " ;
merci!
A voir également:
- Varchar php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Varchar(64) ✓ - Forum Programmation
- Retour à la ligne php ✓ - Forum PHP
- Retour a la ligne avec Echo comment faire ? - Forum Webmastering
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Je suggère, au moment d'attribuer un nouveau id, de rechercher combien d'enregistrements ont de la table ont un id qui commence par les mêmes 6 caractères ("JULPI-" dans ton exemple).
Tu additionnes 1 à ce nombre, tu le convertis en deux caractères, et tu obtiens ainsi ton id.
Tu additionnes 1 à ce nombre, tu le convertis en deux caractères, et tu obtiens ainsi ton id.
appo26
un exemple de ta part me ferait du bien yg_be, tu peux bien stp?
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Exemple non testé, à ajouter juste après
$codeeleve="$name$fname";
$sql = "SELECT count(*) as nbr FROM tb_eleve WHERE left(Code_Eleve,5) = " . $codeeleve ; $requete = mysql_query( $sql, $cnx ) ; $result = mysql_fetch_object ($requete); $codeeleve=$codeeleve.vsprintf("-%'02d",array($result->nbr +1));
merci yg_be, ca a marche mais comme je le souhaitais. je voulais xxxx-01 pour la premiere insertion, xxxx-02 pour la deuxieme, xxxx-03 pour la troisieme et ainsi de suite. dans cette partie de code que tu m'as propose, ca marche parfaitement pour des eleves qui auraient le meme nom. par exemple pour deux eleves qui s'appellent julien pierre, on aura un premier id JULPI-01 et JULPI-02, par contre pour un autre eleve qui est gaston joseph par exemple, son id sera GASJO-01, il devrait etre GAS-JO-03. j'espre que vous comprendrez ce que je veux dire.
Bonjour,
Si ton but est d'incrémenter à chaque insertion en BDD .... pourquoi alors avoir retiré ton champ auto-increment ??
Sachant que pour constiter ta clé... il te suffisait ensuite simplement d'utiliser tes deux champs : ID (autoincrementé) + ton champ code_eleve
Par exemple :
NB: Le code étant une chaine de caractères et non pas juste un nombre... tu dois mettre des quotes autour de ta variable dans ton where.
NB²: Lorsque tu postes du code sur le forum, merci d'utiliser LES BALISES DE CODE (voir ici les explications : balises de code )
Cordialement,
Jordane
Si ton but est d'incrémenter à chaque insertion en BDD .... pourquoi alors avoir retiré ton champ auto-increment ??
Sachant que pour constiter ta clé... il te suffisait ensuite simplement d'utiliser tes deux champs : ID (autoincrementé) + ton champ code_eleve
Par exemple :
SELECT concat(E.Code_Eleve,"-",E.id) as CODE FROM tb_eleve E WHERE concat(E.Code_Eleve,"-",E.id) = ' $codeeleve'
NB: Le code étant une chaine de caractères et non pas juste un nombre... tu dois mettre des quotes autour de ta variable dans ton where.
NB²: Lorsque tu postes du code sur le forum, merci d'utiliser LES BALISES DE CODE (voir ici les explications : balises de code )
Cordialement,
Jordane