Partage
  • Partager sur Facebook
  • Partager sur Twitter

modifier l'auto increment sql depuis php

Sujet résolu
    17 mai 2021 à 15:28:26

    Bonjour, pour résumer ma situation : je suis en train de faire un projet dans lequel je dois pouvoir gérer les inscriptions à des évènements et pour afficher les évènements, j'ai fait une condition sur l'id et sur le nombre de lignes de mon tableau sql, mon problème est le suivant : quand je crée un évènement depuis mon site alors que j'en ai déjà supprimé d'autres, l'id ( un auto increment sql ) devient supérieur à l'ancien ( exemple j'ai supprimé l'event avec l'id 4, j'en crée un autre, le nouvel evenement aura l'id 5 ), j'ai donc cherché comment reset l'auto increment et j'ai trouvé ceci : 

    ALTER TABLE events AUTO_INCREMENT=1

    que j'ai inséré dans le php de la manière suivante à la création de chaque évènement:

    $remettreid = $db -> prepare("ALTER TABLE events AUTO_INCREMENT=:AUTO_INCREMENT");
    $remettreid -> execute(['AUTO_INCREMENT' => $nbrlignes['COUNT(*)'] + 1 ]);

    sachant que nbrlignes est bien sur la variable désignant le nombre de lignes qu'il y a actuellement dans ma bdd et que je veux donc que le prochain id soit égal par exemple à 5 si j'ai déjà 4 lignes correspondant chacune à un évènement; j'obtiens l'erreur suivante :

     

    je comprends bien qu'il y a une erreur de rédaction mais je ne sais pas comment la régler, merci d'avance pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2021 à 15:39:55

      On voit qu'il n'aime pas les quotes ajoutées autour de la valeur, essaie de passer par PDOStatement::bindValue avec PDO::PARAM_INT en 3e paramètre pour faire ton bind.

      Mais tu ne devrais pas toucher à l'auto-incrément, surtout avec le résultat d'un COUNT au lieu d'un MAX : si tu as des trous, ça ne fonctionnera pas !

      -
      Edité par julp 17 mai 2021 à 15:41:55

      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2021 à 15:45:28

        julp a écrit:

        On voit qu'il n'aime pas les quotes ajoutées autour de la valeur, essaie de passer par PDOStatement::bindValue avec PDO::PARAM_INT en 3e paramètre pour faire ton bind.

        Mais tu ne devrais pas toucher à l'auto-incrément, surtout avec le résultat d'un COUNT au lieu d'un MAX : si tu as des trous, ça ne fonctionnera pas !

        -
        Edité par julp il y a moins de 30s


        Comment je peux faire alors pour afficher tous les évènements même avec des id qui partent dans tous les sens ? (= afficher tous les éléments de mon tableau sql ? ) je pourrais faire un SELECT sans WHERE mais je ne vois pas quoi faire ensuite

        -
        Edité par MassdeyYy 17 mai 2021 à 15:45:49

        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2021 à 15:55:40

          Salut

          Il n'est pas nécessaire de corriger l'auto-incrément à chaque suppression, à part faire joli, ça ne sert pas à grand chose sinon te compliquer la tâche. La solution que tu tentes de mettre en place d'ailleurs n'est pas correcte : si tu as 3 lignes, mais que c'est la première qui a été supprimée, tu vas vouloir mettre 3 comme numéro d'auto-incrémentation, alors que celui-ci est déjà présent. Il faudrait donc choisir le maximum et ajouter 1, mais c'est là que tu vois que c'est pas possible de combler les "trous", parce que ça ne fonctionne bien que quand c'est le dernier enregistrement de la table que ça fait ce que tu veux…

          Sinon, l'erreur, tu pourrais nous la fournir sous forme de texte (ce que c'est à la base) ? D'une part il me semble que c'est plus simple à copier-coller du texte qu'insérer une image, d'autre part si vous fournissez du texte en images, on devrait en appliquant la même logique vous fournir les partitions des musiques que vous voulez télécharger…

          Edit

          Le message était affiché comme ayant été posté il y a 20 minutes, mais je n'avais pas les réponses de julp o_O

          -
          Edité par Ymox 17 mai 2021 à 16:52:40

          • Partager sur Facebook
          • Partager sur Twitter
            17 mai 2021 à 16:05:56

            l'erreur en texte : Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe pr�s de ''4'' � la ligne 1 in E:\wamp\www\popup.php:25 Stack trace: #0 E:\wamp\www\popup.php(25): PDOStatement->execute(Array) #1 {main} thrown in E:\wamp\www\popup.php on line 25


            En fait, si je veux changer l'id, c'est parceque mon code pour afficher les évènements est le suivant :

            for($id=1;$id<=$nbrlignes['COUNT(*)'];$id++)
                {
                    $q = $db -> prepare("SELECT * FROM events WHERE id=:id");
                    $q -> execute(['id'=> $id]);
                    $nice = $q -> fetch();
                    
                    echo '<div id=event>';
                    echo '<div id=div2>';
            
                    ?><a href="includes/pagevent.php?Titre=<?php echo $nice['Titre']; ?>" style="font-size:120%; background-color:white; border:none; text-align:center; margin-bottom:-40px" class=nospace> <?php echo '<p id=titre> Titre:'.$nice['Titre']." <p>  "; ?> </a> <?php
                    echo 'Lieu:'.$nice['Lieu']."<br/>";
                    echo 'Date de début:'.$nice['datedebut']."<br/>";
                    echo 'Date de fin:'.$nice['datefin']."<br/>";
                    echo 'Jeux:'.$nice['Jeux']."<br/>";
                    echo 'Description:'.$nice['Descriptio']."<br/>";
                    echo 'Prix:'.$nice['prix']."<br/>";
                    echo 'Nombre de participants:'. $nice['nbr_participants']."<br/><br/><br/><br/>"; 
            
                    if($role == 'Admin')
                    {
                    ?> 
                    <a href="includes/supprimevent.php?Titre=<?php echo $nice['Titre']; ?>" style="font-size: 28px; border:none;"> Supprimer évènement <br/> </a>
                    <?php
                    echo '</div>';
                    echo '</div>';
                    }
                    else
                    {
            
                    }
                }

            et donc ça ne marche que si les ID se suivent, sinon je ne vois peut-être pas comment faire alors que c'est évident, c'est la première fois que j'utilise et php et sql alors c'est envisageable !

            • Partager sur Facebook
            • Partager sur Twitter
              17 mai 2021 à 16:18:31

              Forcément : pourquoi tu boucles sur le contenu de ta table via un for et l'id ?!? Tu fais autant de requêtes (au lieu d'une seule) que tu as de lignes mais si tu as un "trou", ça va être faux ! C'est sûr que si l'approche de départ n'est vraiment pas bonne, tout ce qui va être construit autour ne va être que rustines (et encore je suis gentil)

              Pourquoi tu ne fais pas comme tout le monde en parcourant directement tout le contenu de ta table :

              $q = $db -&gt; query('SELECT * FROM events /* ORDER BY ... */');
              while ($nice = $q -&gt; fetch()) {
                  // ton code HTML (les lignes 7 à 30 du code ci-dessus)
              }
              

              ?

              Ainsi, l'id n'a aucune importance (et ne devrait pas en avoir).

              -
              Edité par julp 17 mai 2021 à 16:29:43

              • Partager sur Facebook
              • Partager sur Twitter
                17 mai 2021 à 17:18:21

                Très bien, c'est donc mes connaissances qui me faisaient défaut, merci pour ta réponse et bonne journée.
                • Partager sur Facebook
                • Partager sur Twitter

                modifier l'auto increment sql depuis php

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown