IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème avec auto inc


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    null
    Inscrit en
    Août 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Août 2013
    Messages : 22
    Points : 9
    Points
    9
    Par défaut Problème avec auto inc
    Bonjour,

    J'ai un problème, il me semblait qu'il était possible de réinitialiser l'auto-inc via une commande php mais je n'y arrive pas.
    Pourquoi je cherche à faire ça ?
    Je gère l'enregistrement du nom de photos via une base de données, le problème c'est que je me sers de l'id pour diverses raison via des calculs simple pour retrouver l'id suivant/précédent. Et c'est la que ça pose problème par la suite.

    J'ai donc besoin d'une requête qui me réinitialise l'auto inc quand une photo est supprimer.

    Voila la ligne que j'utilise, n'ayant jamais utilisé cette commande via php (uniquement directement dans la console de la bdd) j'ai peut être fait une erreur qui fait qu'elle ne se déclenche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db -> exec('ALTER TABLE photos AUTO_INCREMENT=0');

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est une mauvaise idée de manipuler l'id des éléments dans une base relationnelle.
    Au pire, tu peux avoir une colonne en plus pour gérer ton classement.
    Mais en général avoir des trous n'est pas un obstacle puisque c'est un phénomène normal dans une table.
    Par exemple si j'ai un trou en 16 et 25, les 10 id après 16 c'est WHERE id > 16 LIMIT 10 et ça marche même avec des trous.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    null
    Inscrit en
    Août 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Août 2013
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Ta proposition est très bien, mais ça alourdi le code, je vais essayer un truc.

    Je me sers de l'id avec un calcul ultra simple puisque j’ôte ou j'ajoute 1 à l'id de la photo pour passer à la précédente ou à la suivante.
    Je précise que c'est la première fois que je veux faire ça, et que j'essais par moi même avant de suivre des tutos quand vraiment je n'y arrive pas.


    donc en gros ca doit faire :

    id_photo-1 (précedente) / id_photo (affichée) / id_photo+1 (suivante)

    Tu comprend mieux pourquoi je dois avoir des id qui se suivent, sinon l'affichage ne colle plus. Imaginons que les id des photos sont (1,3,4,5) si je suis sur la photo 3 et que je veux voir la 1, la page essais d'afficher la 2 quand on clic sur précédent au lieu d'afficher la 1.

    Si c'est vraiment trop risqué, sachant que la suppression de photo ne peut se faire que via le panneau admin, je suis ouvert à toute proposition me permettant de résoudre se problème ^^

    EDIT : J'ai oublié de préciser que lorsque que l'on clique sur une photo listée, ça déclenche une fonction JS qui me permet, via AJAX, de récupérer la photo et de l'affichée dans une fenêtre incrustée à la page principale.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    "Alourdir le code" n’exagère pas, c'est une ligne à écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sign = ($_GET['action'] === 'next') ? '>' : '<';
    $sql = 'SELECT tescolonnes FROM tatable WHERE id ' . $sign . (int)$_GET['id'];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="photo.php?id=' . $id . '&action=previous">Précédente</a><a href="photo.php?id=' . $id . '&action=next">Suivante</a>

  5. #5
    Futur Membre du Club
    Homme Profil pro
    null
    Inscrit en
    Août 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Août 2013
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    J'ai déjà pensais à cette technique avant d'écrire sur le forum, elle fonctionne au poil lorsque je change de page, mais là ce n'est pas le cas.
    Le problème est que je ne recharge/change pas ma page, la liste des photos est sur photos.php et lors du clic sur l'une d'elle j'affiche une sorte de popup incrusté dans la page photos.php via AJAX pour afficher la photo concerné, et c'est à droite/gauche de celle-ci que j'affiche le lien photo suivante/précédente.

    Je n'arrive pas à voir comment faire avec ta solution sachant que j'utilise AJAX pour l'afficher, à moins de créer une autre fonction JS/AJAX quasi identique mais prenant en compte le changement d'image/id.

    De toutes façon, la j'en ai plein la tête, et ça aide pas à réfléchir, je me remettrais dessus demain, à tête reposé les idées sont plus clair ^^ !

    Merci de ton aide.

    Pour te dire à quel point le code est basique :

    bon pour l'affichage c'est juste une connexion à la BDD donc pas besoin de tout te mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo $cliche['id']-1>0?'<div id="prec" onClick="photo(\''.($cliche['id']-1).',\')">< Photo précédente</div>':'';
    echo'<div id="photoPop"><img src="img/photographies/'.$cliche['photo'].'" alt="'.$cliche['prise'].'" /></div>';
    echo $cliche['id']<$_SESSION['count']?'<div id="suiv" onClick="photo(\''.($cliche['id']+1).'\')">Photo suivante ></div>':'';
    Et la partie JS qui appel le code (entier) dont je t'ai mis un extrait ci-dessus et qui l'affiche en incruste sur photos.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    function photo(cliche){
        var photo = document.getElementById('affPhoto'),
             popUp = document.getElementById('pop');
     
        popUp.style.display = "block";    
        photo.innerHTML     = "Chargement en cours ...";
     
        httpRequest.onreadystatechange = function(){
            if(httpRequest.readyState == 4){
                if(httpRequest.status === 200){
                    var tmp = httpRequest.responseText;
     
                    photo.innerHTML = tmp;
                }else{
                    photo.innerHTML = 'Impossible de contacter le serveur';
                }
            }
        }
        httpRequest.open('POST', 'photoPhp.php', true);
        var data = new FormData();
        data.append('id', cliche);
        httpRequest.send(data);
    }
    Surtout si tu vois des erreurs dans le JS n'hésite pas à me corriger, ça m'évitera de faire les mêmes erreurs plus tard.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le principe ne change pas si tu passes par de l'Ajax, dans photoPhp.php tu as une requête qui recupère la photo en fonction de l'id.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    null
    Inscrit en
    Août 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Août 2013
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Comme je le pensais, à tête reposé ça va tout de suite mieux ^^.

    Pour tester j'ai passé directement les conditions sql, mais je modifierai ça plus tard coté php avec une vérification de ce qui est reçu en $_POST pour plus de sécurité, je voudrais pas qu'un p'tit malin modifie la partie JS sur sa machine pour me coller une injection :s.

    Le JS pour récupérer les variables cliche (l'id de la photo) et actPage qui correspond à (=,<,> pour le test) dans les liens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function photo(cliche,actPage){
        var photo = document.getElementById('affPhoto'),
            popUp = document.getElementById('pop'),
            idP   = new FormData(),
            actP  = new FormData();
     
        idP  = cliche;
        actP = actPage;
        popUp.style.display = "block";    
        photo.innerHTML     = "Chargement en cours ...";
     
        httpRequest.onreadystatechange = function(){
            if(httpRequest.readyState == 4){
                if(httpRequest.status === 200){
                    var tmp = httpRequest.responseText;
     
                    photo.innerHTML = tmp;
                }else{
                    photo.innerHTML = 'Impossible de contacter le serveur';
                }
            }
        }
        httpRequest.open('POST', 'photoPhp.php', true);
        httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        httpRequest.send("id="+idP+"&page="+actP);
    }
    Le code fonctionne a peu prêt, juste des problèmes basiques à régler, du style les photos défilent pas dans le bon ordre, mais la ça ne me posera pas de problème normalement .

    Voilou, je te remercie pour ton aide, la solution était, en fait, toute simple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [phpMyAdmin] Re: problème avec config.inc.php
    Par electinfo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 25/01/2010, 01h06
  2. Problème avec auto jointure
    Par freud dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/10/2008, 00h28
  3. Problème avec height: auto;
    Par webrider dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 25/07/2007, 17h16
  4. Problème avec Overflow:auto sur Firefox.
    Par psychoBob dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 23/05/2006, 16h46
  5. [EJB2.1 Entity] [CMP] [MySQL] Problème avec clé primaire en auto increment
    Par tery dans le forum Java EE
    Réponses: 6
    Dernier message: 16/07/2004, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo