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 :

[SQL] Suppression d'une donnée dans une lise déroulante


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut [SQL] Suppression d'une donnée dans une lise déroulante
    Bonjour,

    Je souhaite un partir d'un formulaire qui reprend dans une liste déroulante des données récuprés dans une base que l'utilisateur puisse supprimer l'une de ces données
    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
    27
    28
    29
    <form name="style" method="post" action="suppression_rubrique.php">
    <table width="849">
      	<tr>
    		<td align="center">&nbsp;</td>
    		<td width="548" colspan="2" align="center"><div align="left" class="Style5">Supprimez une rubrique </div></td>
    	</tr>			  	
    	<tr>
    		<td width="289" align="left"><strong>Nom de la rubrique :</strong></td>
    		<td colspan="2" align="left"><? include("config.php");
     
    							$req ="select nom_style FROM style order by num_style;";
    							$res=mysql_query($req);
    							echo'<select name="style">';
    							while($row=mysql_fetch_row($res))
    							{
    								echo "<option value='stylesupp'>$row[0]</option>";
    							}
    							echo "</select>";
    							?></td>
    	</tr>
    	<tr>
    		<td height="39" align="center">&nbsp;</td>
    		<td width="420" align="center" colspan="2"><div align="left"><input type="submit" name="Submit" value="Valider"></div></td>
    	</tr>	
    	<tr>
    		<td colspan="3"><hr></td>				
    	</tr>
    </table>
    </form>
    Cà c'est mon formulaire qui récupère les données dans la liste, l'utilisateur choisi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?
     
    	require("config.php");
     
    	$req2 = "delete from style where nom_style='".$_POST['stylesupp']."'";
    	$verif2 = mysql_query($req2);
     
    	include("liens_internet.php");		
    ?>
    Et çà c'est la page qui doit effectuer la suppression. La redirection se fait bien, mais aucune suppression n'est réalisé.
    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 332
    Points
    332
    Par défaut
    Ton nom style existe t'il dans ta base ? Je veux dire pas de problème de majuscule ou autre ?

  3. #3
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    oui il existe bien sous cette forme : nom_style

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 332
    Points
    332
    Par défaut
    Oui j'ai bien compris - pourrais tu mettre le code de ta requête et vérifié que tu n'as pas majuscule/minuscule qui pourrait faire que le test échoue ?

  5. #5
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    normalement tu as tout

    la requete qui récupère les données dans liste déroulante (1er code)
    puis la requête qui est censé faire la suppression dans la base (2ème code)
    Que veut tu de plus ?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 332
    Points
    332
    Par défaut
    la requête SQL généré par ton code 8)

  7. #7
    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
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je t'ai répondu sur le chan mais voici :
    Tes balises "option" doivent toutes avoir une "value" différente
    Ton SQL devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT num_style, nom_style FROM style ORDER BY num_style;
    Puis dans le while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<option value='$row[0]'>$row[1]</option>";
    Dans suppression_rubrique.php, tu auras une variable $_POST['style'] qui aura pour valeur l'identifiant du style à supprimer (num_style de ta table de la BDD).

    Cela dit, je te recommade d'utiliser mysql_fetch_assoc ou mysql_fetch_array plutôt que mysql_fetch_row.
    Cela te donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                         $req ="SELECT num_style, nom_style FROM style ORDER BY num_style;";
                         $res=mysql_query($req);
                         echo'<select name="style">';
                         while($row=mysql_fetch_assoc($res))
                         {
                            echo '<option value="'.$row['num_style'].'">'.$row['nom_style'].'</option>';
                         }
                         echo "</select>";
                         ?></td>

  8. #8
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    ok désormais certaines chose se supprime mais pas tout. Je voudrais que toute la ligne correspondant à cette donnée soit supprimé. 9à me supprime le nom mais pas le numéro comment çà se fait ?

  9. #9
    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
    Points : 29 985
    Points
    29 985
    Par défaut
    Eh bien, cela dépend du SQL que tu exécutes... Je ne pourrai pas beaucoup t'aider tant que tu ne me l'auras pas montré :/
    J'imagine que tu fais UPDATE au lieu de DELETE mais ça reste une supposition.

    Je suppose que le SQL devrait ressembler à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query('DELETE FROM style WHERE num_style='.intval($_POST['style']));;
    (en supposant que num_style est une valeur entière)

  10. #10
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?
     
       require("config.php");
     
       $req2 = "delete from style where nom_style='".$_POST['stylesupp']."'";
       $verif2 = mysql_query($req2);
     
       include("liens_internet.php");      
    ?>
    Voilà l'endroit où je suis supposé faire ma suppression dans ma base de donnée. Comme je le disais elle me supprime bien le nom_style, mais pas le num_style. Pourquoi ?

  11. #11
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <form name="style" method="post" action="validation_rubrique.php">
    <table width="849">
      	<tr>
    		<td align="center">&nbsp;</td>
    		<td width="548" colspan="2" align="center"><div align="left" class="Style5">Supprimez une rubrique </div></td>
    	</tr>			  	
    	<tr>
    		<td width="289" align="left"><strong>Nom de la rubrique :</strong></td>
    		<td colspan="2" align="left"><? include("config.php");
     
    							$req ="select num_style, nom_style FROM style order by num_style;";
    							$res=mysql_query($req);
    							echo'<select name="stylesupp">';
    							while($row=mysql_fetch_assoc($res))
    							 {
    								echo '<option value="'.$row['num_style'].'">'.$row['nom_style'].'</option>';
    							 } 
    							echo "</select>";
    							?></td>
    	</tr>
    	<tr>
    		<td height="39" align="center">&nbsp;</td>
    		<td width="420" align="center" colspan="2"><div align="left"><input type="submit" name="Submit3" value="Valider"></div></td>
    	</tr>	
    	<tr>
    		<td colspan="3"><hr></td>				
    	</tr>
    </table>
    </form>

  12. #12
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Et de cette façon ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="style" method="post" action="suppression_rubrique.php?nom_style=<?$stylesupp?>">
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  13. #13
    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
    Points : 29 985
    Points
    29 985
    Par défaut
    Alain
    Je ne pense pas que ta proposition soit adéquate. En outre, évite l'utilisation des balises courtes <?=...?> et préfère-leur les balises longues <?php echo ...; ?>
    C'est certes plus long à écrire mais c'est également plus adapté. Imagine que tu aies aussi un autre langage à parser : ton tag <? porterait alors à confusion.
    Dernière chose : la syntaxe <?$stylesupp?> est incorrecte car il manque le signe égal : <?=$stylesupp?>. Question de propreté de code, je te recommande les balises longues et le point virgule : <?php echo $stylesupp; ?>.

    Leloup
    Il te faut choisir un nom de select et ne plus en changer !
    Tu avais mis <select name="style"> dans ton premier exemple, maintenant tu mets <select name="stylesupp"> !
    Il faut bien sûr faire évoluer le code PHP en même temps pour construire ton SQL de suppression...

    En outre, puisque tu disposes d'un identifiant dans ta table (num_style), je te recommande vivement de l'utiliser pour identifier tes tuples. Si tu ne le fais pas, alors il ne sert à rien et tu te retrouves avec un comportement certainement erratique, comme c'est le cas actuellement.

    La requête proposée précédemment était donc correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req2 = 'DELETE FROM style WHERE num_style='.intval($_POST['stylesupp']);
    $verif2 = mysql_query($req2);

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. [WD16] Lecture donnée d'une base dans une valeur d'une autre base
    Par gef13 dans le forum WinDev
    Réponses: 2
    Dernier message: 16/11/2011, 09h05
  3. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. script SQL qui réinsère des Données d'une BD dans une autre BD.
    Par kamaldev dans le forum Administration
    Réponses: 1
    Dernier message: 19/04/2007, 14h01

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