(PHP)Définir la valeur d'ID à une base mySQL
Graig083
-
tito23 Messages postés 305 Date d'inscription Statut Membre Dernière intervention -
tito23 Messages postés 305 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Voilà mon problème...
Je voudrais mettre en place un formulaire d'adhésion en ligne pour notre association (htlm/php), relié à une base de données mySQL. A chaque nouvelle entrée une ID auto incrémentée (clé primaire) est générée. Jusque là j'ai déjà fait, le système fonctionne.
Mais je voudrais que cette ID ait une valeur spécifique suivant les information saisies tel que :
- IF la valeur du champs6 est "option1" alors la valeur de l'ID incrémenté doit être comprise entre 1 et 50
- ELSEIF la valeur du champs6 est "option2" alors la valeur de l'ID incrémenté doit être compris entre 51 et 100
- ELSE la valeur de l'ID incrémenté doit être au delà de 101
Voici le code de la page PHP envoyant les données dans la base :
$sql = "INSERT INTO *** VALUES('$id','$nom','$prenom','$sexe'...)";
mysql_query($sql) or die('Erreur lors de la connexion à la base de donnée !'.$sql.' '.mysql_error());
$id = mysql_insert_id();
Merci d'avance de votre aide
Voilà mon problème...
Je voudrais mettre en place un formulaire d'adhésion en ligne pour notre association (htlm/php), relié à une base de données mySQL. A chaque nouvelle entrée une ID auto incrémentée (clé primaire) est générée. Jusque là j'ai déjà fait, le système fonctionne.
Mais je voudrais que cette ID ait une valeur spécifique suivant les information saisies tel que :
- IF la valeur du champs6 est "option1" alors la valeur de l'ID incrémenté doit être comprise entre 1 et 50
- ELSEIF la valeur du champs6 est "option2" alors la valeur de l'ID incrémenté doit être compris entre 51 et 100
- ELSE la valeur de l'ID incrémenté doit être au delà de 101
Voici le code de la page PHP envoyant les données dans la base :
$sql = "INSERT INTO *** VALUES('$id','$nom','$prenom','$sexe'...)";
mysql_query($sql) or die('Erreur lors de la connexion à la base de donnée !'.$sql.' '.mysql_error());
$id = mysql_insert_id();
Merci d'avance de votre aide
A voir également:
- (PHP)Définir la valeur d'ID à une base mySQL
- Base de registre - Guide
- Définir google comme page d'accueil - Guide
- Id telephone - Guide
- Attribuer une valeur à une cellule texte excel ✓ - Forum Excel
- Https //id.sonyentertainmentnetwork.com/id/management/ ✓ - Forum PS4
8 réponses
non on ne peux pas faire ça sur un id auto incrémenté
tu peux mettre un type int pour l'id et décider toi même du numéro de l'id.
mais a quoi est ce que ça te sert ce genre de bidouillage ?
tu peux mettre un type int pour l'id et décider toi même du numéro de l'id.
mais a quoi est ce que ça te sert ce genre de bidouillage ?
Bonjour Vordano et merci de ta réponse.
En fait nous attribuons depuis toujours un numéro d'adhérent qui nous sert ensuite au classement de documents en interne. C'est un système que nous faisions jusqu'à présent en manuel que je souhaiterais conserver car la logistique est bien rodée. C'est pour ça que je pensais utiliser l'ID auto-incrémentée mais je peux tout a fait utiliser un int, ca m'est égal tant que je peux respecter les conditions dictées.
Peux tu me dire quel serait le code pour "forcer" le int que je vais créer et qu'il soit dans un ordre croissant ?
En fait nous attribuons depuis toujours un numéro d'adhérent qui nous sert ensuite au classement de documents en interne. C'est un système que nous faisions jusqu'à présent en manuel que je souhaiterais conserver car la logistique est bien rodée. C'est pour ça que je pensais utiliser l'ID auto-incrémentée mais je peux tout a fait utiliser un int, ca m'est égal tant que je peux respecter les conditions dictées.
Peux tu me dire quel serait le code pour "forcer" le int que je vais créer et qu'il soit dans un ordre croissant ?
dans le cas où la valeur du champs6 est "option2" et le dernier numéro est 100 comment tu prévois gérer ça?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
test ceci
if($_POST['champ6''] == 'option1') {$req =mysql_query("select max(id) from *** where id between 1 and 49); $res =mysql_fetch_array($req); $max = $res[0]; if(mysql_nums_rows($req) == 0) $id =1; else $id =$max +1; mysql_query("INSERT INTO *** VALUES('$id','$nom','$prenom','$sexe'...)"); } else if($_POST['champ6''] == 'option2') {$req =mysql_query("select max(id) from *** where id between 50 and 99); $res =mysql_fetch_array($req); $max = $res[0]; if(mysql_nums_rows($req) == 0) $id =50; else $id =$max +1; mysql_query("INSERT INTO *** VALUES('$id','$nom','$prenom','$sexe'...)"); } else if($_POST['champ6'] == 'option3') {$req =mysql_query("select max(id) from *** where id > 99); $res =mysql_fetch_array($req); $max = $res[0]; if(mysql_nums_rows($req) == 0) $id =100; else $id =$max +1; mysql_query("INSERT INTO *** VALUES('$id','$nom','$prenom','$sexe'...)"); }
Merci tito pour ton travail !
Malheureusement ça ne marche pas...
Il m'a semblé qu'il manqué des " après chque where id between ... and ...
(le code s'affichait bizarrement) ??
Mais le problème semble venir des conditions
if(mysql_nums_rows($req) == 0)
$id = ...
else
$id = $max +1;
J'ai un msg syntax error, unexpected T_ELSE
Malheureusement ça ne marche pas...
Il m'a semblé qu'il manqué des " après chque where id between ... and ...
(le code s'affichait bizarrement) ??
Mais le problème semble venir des conditions
if(mysql_nums_rows($req) == 0)
$id = ...
else
$id = $max +1;
J'ai un msg syntax error, unexpected T_ELSE
Bonjour si vous faites ceci:
- IF la valeur du champs6 est "option1" alors la valeur de l'ID incrémenté doit être comprise entre 1 et 50
- ELSEIF la valeur du champs6 est "option2" alors la valeur de l'ID incrémenté doit être compris entre 51 et 100
- ELSE la valeur de l'ID incrémenté doit être au delà de 101
Votre analyse est mal faite, que se passe il quand il y a plus de 50 valeurs pour le champ6 qui vaut option 1? Vous ne pouvez plus utiliser la base?
numéro d'adhérent
Dans ce cas rajoutez un numéro d'adhérent qui ne sera pas identifiant.
En fait nous attribuons depuis toujours un numéro d'adhérent qui nous sert ensuite au classement de documents en interne. C'est un système que nous faisions jusqu'à présent en manuel que je souhaiterais conserver car la logistique est bien rodée.
Donc il devrait être dans votre analyse et conception du modèle logique. Soit vous le gardez car il est pertinent soit vous ne le gardez pas car il sert à rien. On peut voir que c'est une valeur calculable en fonction su champ 6 donc suivant l'analyse merise il n'as pas lieu d'être. Utilisez directement le champ 6(bizarre comme nom de champ et pas évocateur) pour ce classement(il suffit lors de l'affichage de faire un test pour savoir lequel des 3 cas correspond à la valeur du champ 6) et d'afficher selon ce test : moins de 50, entre 51 et 100, plus de 100.
Ce que vous faites est simplement vous compliquer la vie, risquer des erreurs(donc l'invalidité de toute la base), rallonger le temps de développement et provoquer des lenteurs de traitement par le biais de redondance. D'où l'intérêt d'avoir une conception bien faite.
- IF la valeur du champs6 est "option1" alors la valeur de l'ID incrémenté doit être comprise entre 1 et 50
- ELSEIF la valeur du champs6 est "option2" alors la valeur de l'ID incrémenté doit être compris entre 51 et 100
- ELSE la valeur de l'ID incrémenté doit être au delà de 101
Votre analyse est mal faite, que se passe il quand il y a plus de 50 valeurs pour le champ6 qui vaut option 1? Vous ne pouvez plus utiliser la base?
numéro d'adhérent
Dans ce cas rajoutez un numéro d'adhérent qui ne sera pas identifiant.
En fait nous attribuons depuis toujours un numéro d'adhérent qui nous sert ensuite au classement de documents en interne. C'est un système que nous faisions jusqu'à présent en manuel que je souhaiterais conserver car la logistique est bien rodée.
Donc il devrait être dans votre analyse et conception du modèle logique. Soit vous le gardez car il est pertinent soit vous ne le gardez pas car il sert à rien. On peut voir que c'est une valeur calculable en fonction su champ 6 donc suivant l'analyse merise il n'as pas lieu d'être. Utilisez directement le champ 6(bizarre comme nom de champ et pas évocateur) pour ce classement(il suffit lors de l'affichage de faire un test pour savoir lequel des 3 cas correspond à la valeur du champ 6) et d'afficher selon ce test : moins de 50, entre 51 et 100, plus de 100.
Ce que vous faites est simplement vous compliquer la vie, risquer des erreurs(donc l'invalidité de toute la base), rallonger le temps de développement et provoquer des lenteurs de traitement par le biais de redondance. D'où l'intérêt d'avoir une conception bien faite.
Je suis tout a fait d'accord avec vous sur le fait que je me complique la vie ! :-)
S'il est plus simple de rajouter un champs "numéro d'adhérent" et de ne pas utiliser le champs id pour appliquer ma requête if je ne demande que ça ! Mais là non plus je ne sais pas comment paramétrer les conditions pour que le numéro d'adhérent soit compris entre 1 et 50 si le champs6 (son vrai nom est "activité") est option1, etc.
Pour ce qui est du fait qu'au delà de 50 on ne peut plus utiliser la base c'était pour ne pas me compliquer encore plus sachant que je controle la base quotidiennement et que si on arrive a la limite des 50 je supprimerai l'option dans mon formulaire html.
S'il est plus simple de rajouter un champs "numéro d'adhérent" et de ne pas utiliser le champs id pour appliquer ma requête if je ne demande que ça ! Mais là non plus je ne sais pas comment paramétrer les conditions pour que le numéro d'adhérent soit compris entre 1 et 50 si le champs6 (son vrai nom est "activité") est option1, etc.
Pour ce qui est du fait qu'au delà de 50 on ne peut plus utiliser la base c'était pour ne pas me compliquer encore plus sachant que je controle la base quotidiennement et que si on arrive a la limite des 50 je supprimerai l'option dans mon formulaire html.
J'ai bien essayé de "tripatouiller" ton code (pour le comprendre avant tout) et j'ai enfin réussi à ce qu'il n'y ait plus de message d'erreur (l'entrée est bien saisie dans la base) mais il ne tient absolument pas compte des conditions if... :-(
Voilà le code tel que je l'ai modifié :
mysql_connect('localhost','util','mdp');
mysql_select_db('base');
// verif doublons
$sql = "SELECT id FROM *** WHERE nom='$nom' AND prenom='$prenom'";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$res = mysql_num_rows($req);
if($res!=0)
{
echo 'Entrée déjà existante';
}
else
{
if ($_POST["champs6"] == 'option1')
{
$req = mysql_query("SELECT max(id) FROM *** WHERE id BETWEEN 1 AND 49");
$res = mysql_fetch_array($req);
$max = $res[0];
if (mysql_num_rows($req) == 0)
$id = 1;
else
$id =$max +1;
$sql = "INSERT INTO *** VALUES('$id','$nom'...)";
mysql_query($sql) or die('Erreur lors de la connexion à la base de donnée !'.$sql.' '.mysql_error());
}
else if ($_POST["champs6"] == 'option2')
{
$req =mysql_query("SELECT max(id) FROM *** WHERE id BETWEEN 51 AND 99");
$res =mysql_fetch_array($req);
$max = $res[0];
if (mysql_num_rows($req) == 0)
$id = 51;
else
$id =$max +1;
$sql = "INSERT INTO *** VALUES('$id','$nom'...)";
mysql_query($sql) or die('Erreur lors de la connexion à la base de donnée !'.$sql.' '.mysql_error());
}
else if ($_POST["champs6"] == 'option3')
{
$req =mysql_query("SELECT max(id) FROM *** WHERE id > 100");
$res =mysql_fetch_array($req);
$max = $res[0];
if(mysql_num_rows($req) == 0)
$id =101;
else
$id =$max +1;
$sql = "INSERT INTO *** VALUES('$id','$nom'...)";
mysql_query($sql) or die('Erreur lors de la connexion à la base de donnée !'.$sql.' '.mysql_error());
}
}
mysql_close();
?>
Voilà le code tel que je l'ai modifié :
mysql_connect('localhost','util','mdp');
mysql_select_db('base');
// verif doublons
$sql = "SELECT id FROM *** WHERE nom='$nom' AND prenom='$prenom'";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$res = mysql_num_rows($req);
if($res!=0)
{
echo 'Entrée déjà existante';
}
else
{
if ($_POST["champs6"] == 'option1')
{
$req = mysql_query("SELECT max(id) FROM *** WHERE id BETWEEN 1 AND 49");
$res = mysql_fetch_array($req);
$max = $res[0];
if (mysql_num_rows($req) == 0)
$id = 1;
else
$id =$max +1;
$sql = "INSERT INTO *** VALUES('$id','$nom'...)";
mysql_query($sql) or die('Erreur lors de la connexion à la base de donnée !'.$sql.' '.mysql_error());
}
else if ($_POST["champs6"] == 'option2')
{
$req =mysql_query("SELECT max(id) FROM *** WHERE id BETWEEN 51 AND 99");
$res =mysql_fetch_array($req);
$max = $res[0];
if (mysql_num_rows($req) == 0)
$id = 51;
else
$id =$max +1;
$sql = "INSERT INTO *** VALUES('$id','$nom'...)";
mysql_query($sql) or die('Erreur lors de la connexion à la base de donnée !'.$sql.' '.mysql_error());
}
else if ($_POST["champs6"] == 'option3')
{
$req =mysql_query("SELECT max(id) FROM *** WHERE id > 100");
$res =mysql_fetch_array($req);
$max = $res[0];
if(mysql_num_rows($req) == 0)
$id =101;
else
$id =$max +1;
$sql = "INSERT INTO *** VALUES('$id','$nom'...)";
mysql_query($sql) or die('Erreur lors de la connexion à la base de donnée !'.$sql.' '.mysql_error());
}
}
mysql_close();
?>