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 :

Changer les identifiants d'une liste de sélection après suppression d'un élément [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Changer les identifiants d'une liste de sélection après suppression d'un élément
    Bonjour tout le monde,

    J'ai une liste de sélection.

    Dans cette liste, je permets à certains administrateurs de supprimer des valeurs.

    Le problème est que quand je supprime une valeur, j'ai un blanc dans la liste déroulante car j'ai un for qui va de 1 à n (n valant le nombre d'éléments).

    Si j'ai :

    1,2,3,4,5 et que je supprime le 4, mon n vaudra 4 j'aurai donc 1,2,3,4 pour le for et dans ma liste 1,2,3,5.

    L'ID 5 n'étant pas trouvé, j'ai une ligne blanche.

    Je dois donc reconstruire la lise de sélection dans la base de données en modifiant les ID.

    Pour cela, j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $i=1
    	while($row = mysql_fetch_array($query_select)) 
    	{
    		$sql_update = "UPDATE manips SET ID = ".$i;
    		echo $sql_update;
    		$query_sql_update = mysql_query($sql_update);
    		//création de la liste déroulante des étudiants non clôturés
    		$return .=$row["ID"].':"'.$row["nom_manip"].'",';
    		$i++;
    	}
    l'écho m'informe ce message d'erreur :

    <br />
    <b>Parse error</b>: parse error in <b>C:\wamp\www\APK\AJAX\Supprimer_manip.php</b> on line <b>23</b><br />
    La ligne 23 correspond à celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while($row = mysql_fetch_array($query_select))
    Deux questions :

    1) n'y aurait-il pas une solution plus "simple" pour reconstruire les id ?
    2) si la réponse à la question 1 est négative, sauriez-vous svp me dire où j'ai fait une erreur ?

    Voici le code de la génération de la liste de sélection pour être complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for($o=1; $o<=$count_manips;$o++)
    				{
    					$sql_manips = 'SELECT * FROM manips WHERE ID = '.$o;
    					echo $sql_manips;
    					$query_manips = mysql_query($sql_manips);
    					$nombre_manips = mysql_num_rows($query_manips);
    					$res_manips = mysql_fetch_array($query_manips);
    					echo '<OPTION VALUE="'.$res_manips['nom_manip'].'">'.$res_manips['nom_manip'].'</OPTION>';
    				}
    Merci d'avance.

    beegees

  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
    Les Ids dans une base de données n'ont aucune raison d'être consécutif.
    Tu imagines la charge que represente la ré-indexation de toute une table ?

    Ta construction de liste devrait ressembler à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql_manips = 'SELECT id_manip, nom_manip FROM manips'
    while ($res_manips = mysql_fetch_array($query_manips)) {
    echo '<OPTION VALUE="'.$res_manips['id_manip'].'">'.$res_manips['nom_manip'].'</OPTION>';
    }
    Ce que tu faisais (une requete par ligne) est une monstruosité.

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Les Ids dans une base de données n'ont aucune raison d'être consécutif.
    Tu imagines la charge que represente la ré-indexation de toute une table ?

    Ta construction de liste devrait ressembler à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql_manips = 'SELECT id_manip, nom_manip FROM manips'
    while ($res_manips = mysql_fetch_array($query_manips)) {
    echo '<OPTION VALUE="'.$res_manips['id_manip'].'">'.$res_manips['nom_manip'].'</OPTION>';
    }
    Ce que tu faisais (une requete par ligne) est une monstruosité.
    Salut grand Maître ,

    J'ai suivi ton conseil.

    Cela m'a pris un peu de temps car j'ai dû modifier mon code mais maintenant, plus de bug.

    Merci à toi et bon fin de WE.

    beegees

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/07/2012, 15h46
  2. Réponses: 8
    Dernier message: 01/04/2011, 14h39
  3. [MySQL] Organiser les valeurs de 2 tables dans une liste de sélection
    Par domdas dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/08/2006, 08h51
  4. Réponses: 2
    Dernier message: 05/06/2006, 17h51

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