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 :

Supprimer des données (checkbox et bouton "supprimer")


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Supprimer des données (checkbox et bouton "supprimer")
    Bonjour à tous !

    Je suis nouveau et débutant dans le monde du développement WEB et j'ai besoin de vos lumières.

    Je vous explique mon problème. J'ai un projet qui consiste à faire un site internet pour une agence de voyage qui propose divers circuits. Sur une page php, j'arrive à faire ressortir de la BDD, tous les circuits (liés chacun par un checkbox correspondant à l'id (NumCircuit) de ma base).

    Mais après je bloque littéralement. J'aimerai que lorsque j'appuie sur le bouton "Supprimer", il me supprime toute la ligne qui a été coché.

    Voici ma page:


    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <!DOCTYPE html>
    <!-- Page de contact -->
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>Administration</title>
    	<link rel="stylesheet" type="text/css" href="css/styles.css" />
    </head>
    <body>
     
     <div id="page">
            <!-------------------------------------------- header ----------------------------------------------------->
            <div class="header">
     
    			<?php include("menu.php"); ?>
            </div> 
    		<div class="body">
    		  <div id="header"><img  src="image/headercar.jpg"/></div>
                <div class="formetmenu2">
                    <div class="formul2"> 
    				<div class="admin td">
    					<?php
    					include("connectbdd.php");
    					$query='SELECT NumCircuit, NomCircuit, PrixCircuit, DureeCircuit, DescriCircuit FROM circuit';
    					$reponse = mysql_query($query);
    					?>
    					<table>
    						<tr><td></td>
    							<td>Numéro de circuit</td>
    							<td>Nom du circuit</td>
    							<td>Prix du circuit</td>
    							<td>Duree du circuit</td>
    							<td>Description du circuit</td>
    						</tr>
    					<?php
    					while($ligne = mysql_fetch_array($reponse)){
    						echo "<td> <input type='checkbox' name='updel' '".$ligne['NumCircuit']."'</td>";
     
    					?>
     
    							<td><?php echo UTF8_encode ($ligne['NumCircuit']); ?></td>
    							<td><?php echo UTF8_encode ($ligne['NomCircuit']); ?></td>
    							<td><?php echo UTF8_encode ($ligne['PrixCircuit']); ?></td>
    							<td><?php echo UTF8_encode ($ligne['DureeCircuit']); ?></td>
    							<td><?php echo UTF8_encode ($ligne['DescriCircuit']); ?></td>
    							</input>
    						</tr>
     
    					<?php
    					}
    					mysql_close();?>
    					</table>
    					<div class="ams">
    					<input type="submit" name="Ajouter" value="Ajouter un circuit" onclick="window.open('ajoutdecircuit.php')">
    					<input type="submit" name="Modifier" value="Modifier">
    					<input type="submit" name="Supprimer" value="Supprimer">
    					</div>
                    </div>
            	</div>
    		</div>	
     
    		<div class="footer">
     
    		     <?php include("footer.php"); ?>   
     
    		</div>
     </div>		 			
    </body>
    </html>
    La page risque de vous faire peur, mais soyez indulgent, je débute comme je l'ai dis.

    Merci d'avance,

  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
    Je suppose que tu veux dire "supprime toutes les lignes qui ont été cochées" ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Oui j'ai fait la modification merci.

  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
    En utilisant une notation en tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td><input type="checkbox" name="updel['.$ligne['NumCircuit'].']"/></td>';
    Tu recupères un tableau que tu n'as plus qu'a parcourir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($_POST['updel'] as $numcircuit=>$value) {
       $sql = 'DELETE FROM ........ WHERE NumCircuit = "' . mysql_real_escape_string($numcircuit) . '"';
    }

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Entendu, je vais essayé ce que tu me proposes tout de suite.

    Edit: J'ai bien fait comme demandé, cependant il me renvoie à deux erreurs (je pense que les deux sont liées):

    Notice: Undefined index: updel in C:\wamp\www\roady tours\myadminpage.php on line 51
    Pourtant dans mon code je précise bien que le nom de la checkbox est "updel".

    Warning: Invalid argument supplied for foreach() in C:\wamp\www\roady tours\myadminpage.php on line 51
    La deuxieme erreur vient peut être du fait de $value non ? Faut il que je le remplace par $ligne comme je l'ai mis dans mon code ?

    Merci de l'aide !

  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
    Pour debuguer, regarde ce que contient $_POST :

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Ok j'ai réussi à régler la première erreur, en modifiant cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($_POST['updel'] as $numcircuit=>$Value) {
    et en ajoutant un isset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (isset($_POST['updel']) as $numcircuit=>$Value) {
    Cependant il me reste la dernière erreur:

    Warning: Invalid argument supplied for foreach() in C:\wamp\www\roady tours\myadminpage.php on line 51
    J'ai ajouté un var_dump($_POST); comme tu me l'as conseillé, il m'a retourné un "array empty" (voir la miniature ci-dessous).

    Je pense que ça vient du fait qu'il ne reconnait surement pas les $numcircuit et $Value dans le "foreach".
    Mais je ne vois pas à quoi correspond $Value dans ta ligne de code.
    Images attachées Images attachées  

  8. #8
    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
    Tout faux

    Tu n'as mis que la case a cocher, il manque un formulaire dans ton code.

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    J'ai bien attribué:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <form method="post" name="adminform">
    </form>
    Mais l'erreur persiste.

  10. #10
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form method="post" name="adminform">
    et tes checkbox doivent être à l'intérieur.

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Je te remet le code pour que tu puisses y voir plus clair dans ce que je fais.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <form method="post" action="" name="adminform">
    <?php
    include("connectbdd.php");
    $query='SELECT NumCircuit, NomCircuit, PrixCircuit, DureeCircuit, DescriCircuit FROM circuit';
    $reponse = mysql_query($query);
    ?>
    <table>
    	<tr><td></td>
    		<td>Numéro de circuit</td>
    		<td>Nom du circuit</td>
    		<td>Prix du circuit</td>
    		<td>Duree du circuit</td>
    		<td>Description du circuit</td>
    	</tr>
    <?php
    while($ligne = mysql_fetch_array($reponse)){
    	echo '<tr><td><input type="checkbox" value="updel" name="updel['.$ligne['NumCircuit'].']"/></td>';
    ?>
    		<td><?php echo UTF8_encode ($ligne['NumCircuit']); ?></td>
    		<td><?php echo UTF8_encode ($ligne['NomCircuit']); ?></td>
    		<td><?php echo UTF8_encode ($ligne['PrixCircuit']); ?></td>
    		<td><?php echo UTF8_encode ($ligne['DureeCircuit']); ?></td>
    		<td><?php echo UTF8_encode ($ligne['DescriCircuit']); ?></td>
    			</input>
    	</tr>
    <?php
    }
    foreach (isset($_POST['updel']) as $numcircuit=>$value) {
    	$sql = 'DELETE FROM circuit WHERE NumCircuit = "' . mysql_real_escape_string($numcircuit) . '"';
    }
    var_dump($_POST);
    ?>
    </table>
    <div class="ams">
    	<input type="submit" name="Ajouter" value="Ajouter un circuit" onclick="window.open('ajoutdecircuit.php')">
    	<input type="submit" name="Modifier" value="Modifier">
    	<input type="submit" name="Supprimer" value="Supprimer">
    </div>
    </form>
    Les checkbox sont bien à l'intérieur

  12. #12
    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
    Ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (isset($_POST['updel'])
    n'a pas de sens.

    Pour la logique du code, la suppression doit evidemment se faire avant l'affichage.

    Que contient $_POST maintenant que tu as le <form> ?

  13. #13
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    La requête en elle même, ce serait de dire, si checkbox coché, alors lorsque j'appuie sur le bouton "supprimer" tu appliques un "DELETE NumCircuit FROM circuit sur la ligne qui est cochée.
    Cependant comme je t'ai dit, je débute dans le PHP-SQL alors, je ne saisi pas bien toutes les commandes.


    J'ai mis la commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach (array($_POST['updel']) as $numcircuit => $value) {
    	$sql = 'DELETE FROM circuit WHERE NumCircuit = "' . mysql_real_escape_string($numcircuit) . '"';
    }
    Avant l'affichage, cette fois j'ai une autre erreur:

    Undefined index: updel in C:\wamp\www\roady tours\myadminpage.php on line 40
    Il ne reconnait pas la valeur "updel" (elle correspond au nom de la checkbox)

    Et le var_dump affiche toujours un "array empty".

    Merci,

  14. #14
    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
    Ne bidouille pas des syntaxes au hasard.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_POST['updel'])) {
         foreach ($_POST['updel']) as $numcircuit => $value) {
    	$sql = 'DELETE FROM circuit WHERE NumCircuit = "' . mysql_real_escape_string($numcircuit) . '"';
         }
    }
    C'est toutefois normal que tu aies une erreur puisque ton formulaire ne renvoit rien.
    Tu es sur de nous montrer le code complet ?

  15. #15
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Je suis revenu au début, j'ai trop fait de bidouillage à droite à gauche.

    Voici le code actuel:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <!DOCTYPE html>
    <!-- Page de contact -->
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>Administration</title>
    	<link rel="stylesheet" type="text/css" href="css/styles.css" />
    </head>
    <body>
     
     <div id="page">
            <!-------------------------------------------- header ----------------------------------------------------->
            <div class="header">
     
    			<?php include("menu.php"); ?>
            </div> 
    		<div class="body">
    		  <div id="header"><img  src="image/headercar.jpg"/></div>
                <div class="formetmenu2">
                    <div class="formul2"> 
    				<div class="admin td">
    					<form method="post" action="" name="adminform">
    						<?php
    						include("connectbdd.php");
    						$query='SELECT NumCircuit, NomCircuit, PrixCircuit, DureeCircuit, DescriCircuit FROM circuit';
    						$reponse = mysql_query($query);						
    						?>
    						<table>
    							<tr><td></td>
    								<td>Numéro de circuit</td>
    								<td>Nom du circuit</td>
    								<td>Prix du circuit</td>
    								<td>Duree du circuit</td>
    								<td>Description du circuit</td>
    							</tr>
    						<?php
    						while($ligne = mysql_fetch_array($reponse)){
    							echo '<tr><td><input type="checkbox" value="updel" name="updel['.$ligne['NumCircuit'].']"/></td>';
    						?>
     
    								<td><?php echo UTF8_encode ($ligne['NumCircuit']); ?></td>
    								<td><?php echo UTF8_encode ($ligne['NomCircuit']); ?></td>
    								<td><?php echo UTF8_encode ($ligne['PrixCircuit']); ?></td>
    								<td><?php echo UTF8_encode ($ligne['DureeCircuit']); ?></td>
    								<td><?php echo UTF8_encode ($ligne['DescriCircuit']); ?></td>
    								</tr>
     
    						<?php
    						}
    						?>
     
    						</table>
    						<div class="ams">
    						<input type="submit" name="Ajouter" value="Ajouter un circuit" onclick="window.open('ajoutdecircuit.php')">
    						<input type="submit" name="Modifier" value="Modifier">
    						<input type="submit" name="Supprimer" value="Supprimer" onclick="">
    						</div>
    					</form>
                    </div>
            	</div>
    		</div>	
     
    		<div class="footer">
     
    		     <?php include("footer.php"); ?>   
     
    		</div>
     </div>		 			
    </body>
    </html>
    La seule page que tu n'as pas est include("connectbdd.php"); mais elle fonctionne parfaitement vu que je n'ai aucun problème à faire appelle à ma BDD sur le site.
    Sinon effectivement tu as TOUT. Mais je patoge.

    Actuellement la seule chose que fait ma page, c'est afficher la BDD circuit sous forme de tableau. Dans <FORM>, action est volontairement vide. Car pour l'instant je ne lui envoie rien encore.

  16. #16
    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
    Enlève ton action "onclick" sur supprimer.

  17. #17
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    En fait, je devrais faire une requête sur une page à part, qui vérifie si les checkbox sont cochées, et si c'est le cas, qu'il supprime la ligne.

    Ensuite, avec le bouton supprimé, je fais un onclick="requete_de_suppression" non ?

    Mais faire cette requête ça va devoir mélanger du JS et du PHP.

    Edit: J'ai bien enlevé le OnClick mais je n'ai pas édit le post.

  18. #18
    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
    Tu n'as pas besoin de faire la suppression sur une page à part.
    Ce que tu as actuellement (suppression et liste sur la même page) est tout à fait valable.

  19. #19
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Ok, mais il me manque justement, la commande pour vérifier les checkbox et supprimer en appuyant sur ce fameux bouton. Je cherche un peu partout sur Internet, mais les commandes varient énormément d'un sujet à l'autre, voilà pourquoi je viens chercher de l'aide ici.

  20. #20
    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 dernier code que tu nous a montré doit fonctionne une fois le onclick retiré.

Discussions similaires

  1. Remplacer / Supprimer des données dans un fichier txt
    Par PedroBD dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2006, 14h33
  2. [MySQL] supprimer des données dans la base
    Par Commodore dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/02/2006, 03h43
  3. Supprimer des données dans un xml
    Par pingoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 49
    Dernier message: 12/08/2004, 17h49

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