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

PHP & Base de données Discussion :

Changer la position d'affichage [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Par défaut Changer la position d'affichage
    Bonjour,

    J'ai créé un formulaire pour saisir des actus. Cette actus comporte une position à l'affichage que l'on choisi dans le formulaire.
    D'une je ne veux pas qu'il y ai 2 fois la même position d'affichage.
    Pour ce faire j'aimerais que quand la personne saisisse son numéro d'affichage par exemple 6.
    Que celui qui été 6 devienne 7, le 7 devienne 8...Et que ceux avant le 6 ne bouge pas.
    Comment pourrais-je procéder ? Il y a sûrement une histoire incrémentation a +1...
    Si quelqu'un pouvais m'expliquer le bout de code.

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 109
    Par défaut
    Comment concerves-tu la position de chacun ? Dans une base de donnee ?

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Quelque chose dans ce style ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'UPDATE `table`
            SET `position` = `position` + 1
            WHERE `position` >='. $_POST['position'];

    [Edit] C'est un cas particulier que j'ai donné ici mais il est assez facile de l'adapter.

  4. #4
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Par défaut
    oui
    dans le formulaire j'ai une liste déroulante où il choisisse la position.
    Puis dans le formulaire de modification la donnée revient dans un input.
    Pour qu'il n'y ai pas de fois la même position je pourrais mettre le champ en unique mais je préfererais le principe d'incrémentation.

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Il y a moyen que tu partes de ce que je t'ai proposé pour trouver la solution finale ?

    En gros, il faut que tu vérifies l'écart entre l'ancienne position (SELECT) et la nouvelle (une soustraction), puis que tu fasses un UPDATE de ces champs-là (WHERE position BETWEEN a AND b).

  6. #6
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Par défaut
    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
    $req3="update actus set pos_actus=pos_actus+1 where pos_actus >= '".$_POST['num_ordre']."'";
    		$res3=mysql_query($req3);
     
     
    	$req2="select titre_actus FROM actus where titre_actus='".$_POST['txt_titre']."';";
    	$res2=mysql_query($req2);
    	$resultat2=mysql_fetch_row($res2);
    	if($_POST['txt_titre']==$resultat2[0])
    	{
    		include("admin.php");		
    	}
    	else
    	{
    		$req = "insert into actus values('',  '".$_POST['txt_titre']."', '".$repDef."', '".$_POST['elm2']."', '".$_POST['txt_url']."', '".$_POST['num_ordre']."')";
    		$verif = mysql_query($req);
     
    		include("admin.php");
    	}
    Voilà mon bout de code la 1ère partie doit incrémenter à +1 toute les positions égal ou supérieur et la 2ème partie est l'insertion des données de la nouvelle actus dans la base.
    Admettons que j'ai des actus positionnée en 1, 2, 3.
    Je créé un nouvelle actus en 1.
    Les autres devrait reculé d'un rang et devenir 2, 3, 4.
    Mais elles deviennent 3, 4, 5. Et celle que je vien d'insérer devient 2. J'ai l'impression qu'il fait l'incrémentation après l'insertion (puisque celle que je viens de créer en 1 et déjà mis en 2) pourtant dans mon code l'incrémentation se fait avant.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 109
    Par défaut
    Si dans ta table le champ "pos_actus" est un numeric, il ne faut pas mettre de ' avant et apres.
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $req3="update actus set pos_actus=pos_actus+1 where pos_actus >= ".$_POST['num_ordre'];
     
    $res3=mysql_query($req3);
    Et pareil pour l'INSERT

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    C'est sûr, si tu lui demandes "+1" dans ton UPDATE, il va pas décrémenter :/

    Je veux bien te donner la structure, si tu rames tellement (quoique cela devrait être ton boulot), mais tu devras faire l'implémentation toi-même.

    Pour l'exemple :
    • news du matin en position 1
    • news du midi en position 2
    • news du soir en position 3

    La démo :
    • Mettons que tu ajoutes une news : il faut regarder en quelle position elle arrive et incrémenter de 1 toutes les positions à partir de cette position. Exemple : tu ajoutes une "news urgente" en position 1, alors tu dois faire UPDATE +1 de toutes les news à partir de la position 1 jusqu'à la dernière.
    • Mettons que tu modifies la position d'une news : tu devras déterminer dans quel sens tu as modifié la position (vers le haut ou vers le bas) puis faire UPDATE +1 des positions inférieures ou UPDATE -1 des positions supérieures.
      Exemple : tu changes la "news urgente" en "news pas si urgente" de position 4. Tu regardes à quelle position elle est, tu détermines la différence avec la nouvelle position, ça donne -3 (ce qui signifie "vers le bas" puisque -3 < 0) donc tu fais UPDATE table SET position = position-1 WHERE position > 1 AND position <= 4.


    Voilà, je m'arrête ici.

  9. #9
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req3="update actus set pos_actus=pos_actus+1 where pos_actus >=" .$_POST['num_ordre'].;
    		$res3=mysql_query($req3);
    J'ai donc écrit ceci il me met ce message d'erreur :
    Parse error: parse error, unexpected ';'

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 109
    Par défaut
    Pas . entre ] et ;

  11. #11
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Par défaut
    Parse error: parse error, unexpected T_VARIABLE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req3="update actus set pos_actus=pos_actus+1 where pos_actus >=" $_POST['num_ordre'];
    		$res3=mysql_query($req3);

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 41
    Par défaut ^^
    tient copy ça :)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
     
    $req3="update actus set pos_actus=pos_actus+1 where pos_actus >='.$_POST[num_ordre].'";
     
    $res3=mysql_query($req3);

  13. #13
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Par défaut
    çà ne marche pas mieux il les a tous incrémenter de +2 encore

  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Ouaip, le principe est surtout de comprendre ce qu'on fait...
    Sincèrement, je t'ai plus que mâché le travail, tu n'as essentiellement plus qu'à mettre tes noms de champs et tes variables dans le code que je t'ai proposé.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 41
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $req3="update actus set pos_actus=pos_actus+1 where pos_actus ='.$_POST[num_ordre].'";
     
    $res3=mysql_query($req3);

  16. #16
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Par défaut
    ronio tu n'as rien changé a part mettre = à la place de >=

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 109
    Par défaut
    Citation Envoyé par leloup84
    Parse error: parse error, unexpected T_VARIABLE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req3="update actus set pos_actus=pos_actus+1 where pos_actus >=" $_POST['num_ordre'];
    		$res3=mysql_query($req3);

    Mais l'erreur est due a la non concatenantion de la chaine sting "req2" avec ta variable $_POST['num_ordre'] !!
    Met un . entre les deux !! et si "pos_actus" est numerique tu ne met pas de ' si c'est un string tu en met !!!
    ca donne ca ! (Fais un copie colle pour pas te tromper.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req3="update actus set pos_actus=pos_actus+1 where pos_actus >=".$_POST['num_ordre'];

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 109
    Par défaut
    Et puis j'espere que c'est un numerique, parceque incrementer une string ca n'a aucun sens.

  19. #19
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Par défaut
    Ok çà marche pour l'ajout.
    Pour l'ajout il y a juste a incrémenter les positions qui sont égale ou supérieur à la position défini dans le formulaire.

    Maintenant la personne peut modifier ce formulaire et donc modifier la position. Elle peut la remonter vers le haut (passer de 4 en 1) ou vers le bas (de 4 en 8) par exemple.

    Est ce que vous sauriez comment effectuer cette opération ?

  20. #20
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 109
    Par défaut
    Lis la proposition de Kirkis en page une .. il y a deja pense avant que tu ne pose la question ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VB.NET/C#.NET] Changer la Position de la Mouse
    Par ThanosT dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/04/2006, 22h56
  2. Réponses: 3
    Dernier message: 25/04/2006, 12h19
  3. Changer la position de la souris
    Par Mehdi Feki dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/04/2006, 08h35
  4. changer la position d'un élement
    Par ouquoi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/03/2006, 14h17
  5. [MFC]Changer la position du élement du menu
    Par annedjomo dans le forum MFC
    Réponses: 1
    Dernier message: 02/09/2005, 06h20

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