PHP probleme avec une clé primaire

Résolu/Fermé
Flipmode - 19 mars 2008 à 10:19
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 19 mai 2008 à 11:21
Bonjour,

Je suis débutant en PHP.

Je dois insérer des données dans une table de ma base de données MySQL. Dans ma page PHP, j'ai créé une requête SQL "insert into ..." qui fonctionne très bien.
Le problème c'est que dans cette table la clé primaire ne peut pas être incrémentée automatiquement. Ce que j'aimerais c'est lorsque j'insère une nouvelle ligne dans ma table, la clé primaire de ma nouvelle ligne soit égale a la clé primaire de la dernière ligne présente dans ma table +1

Est ce que c'est possible de faire ça? Si oui comment?

J'aimerais savoir si quelqu'un a deja une fonction PHP ou un script PHP pour réaliser ça

Merci d'avance pour votre aide et vos explications

Flipmode
A voir également:

11 réponses

Utilisateur anonyme
19 mars 2008 à 15:11
Les 2 liens ci-dessous valent mieux que de longs discours ;-) :

https://www.php.net/mysql_fetch_array

https://www.php.net/mysql_fetch_row

Dans un cas le select te retourne plusieurs lignes (donc tu fais une boucle) --> mysql_fetch_array
Dans l'autre le select ne te ramène qu'une ligne (pas de boucle) --> mysql_fetch_row
1
Utilisateur anonyme
19 mars 2008 à 10:36
Pourquoi la clé primaire ne peut pas être incrémentée automatiquement, c'est une obligation ou c'est parce que tu ne sais pas faire ?

Exemple de table avec Auto incrément :

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
 );

INSERT INTO animals (name) VALUES 
    ('dog'),('cat'),('penguin'),
    ('lax'),('whale'),('ostrich')

+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | lax     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+


Si tu ne peux pas modifier ta table alors il ne te reste qu'a faire une requête sur ta table en récupérant le MAX(COLONNE) et ensuite tu insères avec le résultat du SELECT + 1.
0
Merci pour ta réponse.

Je sais incrémenter automatiquement la clé primaire d'une table. C'est une obligation car la table peut est modifiée a partir d'autres tables... je ne vais pas tout expliquer dans le détails car ça serait trop long et trop compliqué. Mais dans tous les cas, je ne peux pas utiliser une clé primaire auto-incrémentée.

Je vais essayer de faire ce que tu m'as dit :
Si tu ne peux pas modifier ta table alors il ne te reste qu'a faire une requête sur ta table en récupérant le MAX(COLONNE) et ensuite tu insères avec le résultat du SELECT + 1.

Et si je n'y arrive pas, je laisserai un post ici

Merci pour ton aide

Flipmode
0
J'ai testé le INSERT INTO table VALUES ((SELECT MAX(id) + 1 FROM table), valeur1, valeur2, ...) et ça ne marche pas donc je vais devoir faire ça en 2 requêtes

Mais je galère un peu :
$sql = "SELECT int_product_id FROM tb_product ORDR BY int_product_id DESC LIMIT 1";
$result_sql = mysql_query($sql);
$row = mysql_fetch_array($result_sql);
$max_id = $row[0];
$add = "INSERT INTO tb_product (int_product_id,var_product_name,) VALUES ('$max_id + 1','$name')";
....


Il m'insère bien une nouvelle ligne dans ma table mais avec l'id=0 :(
Toutes les nouvelles lignes que j'insere ont int_product_id=0
Le $max_id + 1 dans ma requete SQL ne marche pas!
J'ai essaye de faire $max_id = $row[0] +1; mais toutes les nouvelles lignes ont int_product_id=1

Merci pour votre aide

Flipmode
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
19 mars 2008 à 11:34
$query = "SELECT MAX(int_product_id) FROM tb_product";
$result = mysql_query($query) or die ("Exécution de la requête impossible");
$row = mysql_fetch_row($result);
echo $row[0];

Cette requête doit être effectuée à chaque fois avant insertion.
0
Un grand merci pour ton aide

Mon problème est résolu :)

Voici le code que j'ai utilisé:
$max_id=0;
$query = "SELECT MAX(int_product_id) FROM tb_product";
$result = mysql_query($query) or die ("Exécution de la requête impossible");
$row = mysql_fetch_row($result);
$max_id = $row[0] + 1;
$add = "INSERT INTO tb_product (int_product_id,var_product_name,) VALUES ('$max_id','$name')";


Flipmode
0
Utilisateur anonyme
19 mars 2008 à 11:56
Nikel ;-)
0
Dernière question :
C'est quoi la différence entre $row = mysql_fetch_row($result); et $row = mysql_fetch_array($result);

Merci

Flipmode
0
Bonjour

Dans un cas le select te retourne plusieurs lignes (donc tu fais une boucle) --> mysql_fetch_array
Dans l'autre le select ne te ramène qu'une ligne (pas de boucle) --> mysql_fetch_row

Si j'ose m'en mêler.. le choix entre mysql_fetch_array et mysql_fetch_row n' a *aucun* rapport avec le fait que select retourne une ou plusieurs lignes. Effectivement, il vaut mieux aller voir les liens indiqués.
0
Ok merci pour vos explications et pour vos liens
0
Bonjour

Je suis debutant en php, si vous pourriez me donne un exemple de codes qui permettent

d'inserer les donnees dans une table a partir d'un formulaire. j'utilise easyPH pour apprendre le php mais je n'arrive pas

a inserer avec un formulaire.si vous pouvez me donner un ex.avec un formulaire contenant plus de 4 textbox et un bouton pour evoyer
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
19 mai 2008 à 11:21
Bonjour ,

Merci de poster ton message dans un nouveau sujet.
0