PHP probleme avec une clé primaire

Résolu
Flipmode -  
kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   -
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

11 réponses

  1. Utilisateur anonyme
     
    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
  2. Flipmode
     
    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
  3. Flipmode
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Utilisateur anonyme
     
    $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
  6. Flipmode
     
    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
  7. Flipmode
     
    Dernière question :
    C'est quoi la différence entre $row = mysql_fetch_row($result); et $row = mysql_fetch_array($result);

    Merci

    Flipmode
    0
  8. le père
     
    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
  9. Flipmode
     
    Ok merci pour vos explications et pour vos liens
    0
  10. Tanguy
     
    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
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      Bonjour ,

      Merci de poster ton message dans un nouveau sujet.
      0