PHP probleme avec une clé primaire

Résolu
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. 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
    1. 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
      1. 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
        1. $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
          1. 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
            1. Dernière question :
              C'est quoi la différence entre $row = mysql_fetch_row($result); et $row = mysql_fetch_array($result);

              Merci

              Flipmode
              0
              1. 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
                1. Ok merci pour vos explications et pour vos liens
                  0
                  1. 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. Modérateur
                      Bonjour ,

                      Merci de poster ton message dans un nouveau sujet.
                      0

                  Discussions similaires

                  cle wifi pour tv

                  5 réponses