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 :

Suppression d'une ligne dans une table sql [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Septembre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Septembre 2014
    Messages : 101
    Points : 52
    Points
    52
    Par défaut Suppression d'une ligne dans une table sql
    Bonjour,
    J'ai créé un formulaire checkbox. Les checkbox sélectionnées doivent être supprimée de la base de données dans laquelle elles sont enregistrées. Pour cela, j'ai écris un bout de code php mais ca ne fonctionne pas (je coche mes cases, je valide, je suis redirigée comme demandé. Aucun message d'erreur et aucune suppression dans la base).

    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
     
    <?php
    // On vérifie que le formulaire vient d'être envoié.
    if (!isset($_POST['submit'])) {
    }
    // On regarde si nos variables ne sont pas vides.
    elseif ((isset($_POST['submit'])) && (!empty($_POST['supstage']))) {
     
    // On supprime la sélection.
    $idstage = htmlspecialchars($donnees['idstage']);
    $bdd = new PDO('mysql:host=..........;dbname=..........;', '..........', '............');
    $req = $bdd->prepare('DELETE FROM stages WHERE idstage = '.$idstage.'');
    $req->execute(array(
    'idstage' => $idstage));
     
    //Redirection et rafraichissement de la page
    		$delai=1; 
    		$url='stages.php';
    		header("Refresh: $delai;url=$url");
     
    $req->closeCursor();
     
    }
    else {
    echo"<script>alert('Veuillez cocher au moins un stage');</script>";
    }
    ?>
    Merciiiiiiii!!!!!

  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
    D'ou vient $donnees ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Septembre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Septembre 2014
    Messages : 101
    Points : 52
    Points
    52
    Par défaut
    C'est l'identifiant enregistré dans ma base de données. Chaque stage se trouvant enregistré dans la base de données a son propre identifiant. C'est avec cette donnée que je reconnais le stage choisi donc le stage qui doit être supprimé de la base de données.

  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
    Il est défini ou par rapport au script que tu nous montres et qu'est ce qu'il vient faire la puisqu'on parle d'un formulaire ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Septembre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Septembre 2014
    Messages : 101
    Points : 52
    Points
    52
    Par défaut
    Voici mon formulaire: $donnees sur la ligne 10.

    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
     
    <form action="stage.php" method="post">
     
    <?php
    // Poste de l'ensemble des stages.
    $bdd = new PDO('mysql:host=;dbname=', '', '');
    $reponse = $bdd->query('SELECT idstage, titrestage, DATE_FORMAT(datestage, \'%d/%m/%Y\') AS datestage_fr FROM stages ORDER BY idstage DESC LIMIT 0, 20');
    while ($donnees = $reponse->fetch()) {
    echo '<h4 class="suppression">
          <input type="checkbox" value="' . htmlspecialchars($donnees['idstage']) . '" name="supstage[]">
          <div class="supdate">' . htmlspecialchars($donnees['datestage_fr']) . '</div>
          <div class="suptitre">' . htmlspecialchars($donnees['titrestage']) . '</div>
          </h4>';
    }
    $reponse->closeCursor();
    ?>
     
    <br>
    <input type="submit" value="supprimer" name="submit">
    <input type="reset" value="Annuler">
    </form>

  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 champs qui contient c'est les id a supprimer c'est "supstage" si tu ne l'utilises pas dans ton traitement c'est normal que ça ne fonctionne pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Avatar de Kyuudan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 100
    Points : 308
    Points
    308
    Billets dans le blog
    1
    Par défaut
    Salut !

    Je ne comprend pas comment tu fonctionnes dans ton traitement.

    Tiens si ça peut t'aider :

    formulaire php avec checkbox ->
    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
     
    <?php
    if($dossier = opendir('../URL/'))
    {
    	while(false !== ($fichier = readdir($dossier)))
    	{
    		$rest = substr($fichier, 0, 4);
    		if($rest == "Quiz" || $rest == "quiz")
    		{
    			if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
    			{
    				$nb_fichier++;
    				echo '<form method="post" action="">
    					<TD class="tg-qgr3" width=2%><input type="checkbox" name="checkQuiz[]" value='.$fichier.' \/></TD> // C'est cette partie qui t'intéresse
    					<TD class="tg-qgr3" width=33% ><a href="../URL/'.$fichier.'">'.$fichier.'</a></TD>
    					</TR><TR>
    			
    				';
    			}
    		}
    	}
    	closedir($dossier);
    }
    else echo 'Le dossier n\'a pas pu être ouvert';
    ?>
     
    <div class="Delete">
    <button type="submit" class="btn btn-danger" name="Delete" value="Delete"><span class="glyphicon glyphicon-remove-sign"></span> Delete</button>  <!-- Mon bouton de type submit -->
    </div>
    </form>
    Et voilà le traitement de ma checkbox "checkQuiz" ->
    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
     
    <?php
    if(isset($_POST['Delete']))
    {
    	if(!empty($_POST['checkQuiz']))
    	{
    	foreach($_POST['checkQuiz'] as $valeur)
    	{
                $chemin = "../URL/$valeur"; 
    $result = recursive_rmdir($chemin,$follow);
     
    		try {
    		    $sql = "DELETE FROM ...";
    		    $bdd->exec($sql);
    		}
    		catch (Exception $e) {
    		die('Erreur : '.$e->getMessage());
    		}
     
    		try {
    		    $sql2 = "DELETE FROM ...";
    		    $bdd->exec($sql2);
    		}
    		catch (Exception $e) {
    			die('Erreur : '.$e->getMessage());
    		}
    			//Refresh la page pour supprimer de l'affichage le dossier supprimé
    			echo"<meta http-equiv='refresh' content='1;URL=...'>";
    		}
    		}else echo'<br/><br/>
    		<div class="col-lg-5">
    		</div>
    		<div class="alert alert-danger alert-dismissable col-lg-2">
    		<button type="button" class="close" data-dismiss="alert">&times;</button>
    		<strong>Error !</strong> 0 Quiz selected !
    		</div>
    		<div class="col-lg-5">
    		</div><br/><br/><br/><br/>
    		';
    ?>
    En espérant t'avoir aidé !

    Cordialement,
    «Soyez la mesure de la qualité. De nombreuses personnes n’ont pas l’habitude d’un environnement où ce qui est attendu, c’est l’excellence.» Steve Jobs

    Pense à mettre un !

    de mettre vos sujets en une fois que vous avez la réponse à votre question !

  8. #8
    Membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Septembre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Septembre 2014
    Messages : 101
    Points : 52
    Points
    52
    Par défaut
    J'ai transformé ma requête comme ça, mais j'ai toujours exactement le mm résultat : pas de message d'erreur mais aucune ligne de supprimé dans ma base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $req = $bdd->prepare('DELETE FROM stages WHERE idstage = '.$_POST['supstage'].'');
    $req->execute(array(
    'idstage' => $_POST['supstage']));

  9. #9
    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
    $_POST['supstage'] est un tableau, il faut le parcourir.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre averti
    Avatar de Kyuudan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 100
    Points : 308
    Points
    308
    Billets dans le blog
    1
    Par défaut
    Il te faut utiliser un foreach pour supprimer le contenu du tableau !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    foreach($_POST['supstage'] as $valeur) {
    $req = "DELETE FROM stages WHERE idstage = '.$valeur.' ";
    $bdd->exec($req);
    }
    ?>
    «Soyez la mesure de la qualité. De nombreuses personnes n’ont pas l’habitude d’un environnement où ce qui est attendu, c’est l’excellence.» Steve Jobs

    Pense à mettre un !

    de mettre vos sujets en une fois que vous avez la réponse à votre question !

  11. #11
    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
    Plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $sth = $bdd->prepare("DELETE FROM stages WHERE idstage = :idstage");
    foreach($_POST['supstage'] as $valeur) {
         $bdd->execute(array(':idstage'=>$valeur));
    }
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre averti
    Avatar de Kyuudan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 100
    Points : 308
    Points
    308
    Billets dans le blog
    1
    Par défaut
    C'est vrai que ça me semble mieux.
    Quel est l’intérêt de sortir la requête du foreach ? Et le prepare est-il vraiment utile ?
    «Soyez la mesure de la qualité. De nombreuses personnes n’ont pas l’habitude d’un environnement où ce qui est attendu, c’est l’excellence.» Steve Jobs

    Pense à mettre un !

    de mettre vos sujets en une fois que vous avez la réponse à votre question !

  13. #13
    Membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Septembre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Septembre 2014
    Messages : 101
    Points : 52
    Points
    52
    Par défaut
    Aaaaaaaah, merci, ca marche!!!

  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
    Quel est l’intérêt de sortir la requête du foreach ? Et le prepare est-il vraiment utile ?
    La requête est sortie puisqu'il s'agit d'une requête préparée.
    La préparation est essentielle, sinon les injections SQL sont possibles.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Récupérer une information d'une ligne dans une table
    Par Lebas dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/04/2013, 10h24
  2. Colorer une ligne dans une image d'une interface
    Par yasmine2013 dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 27/05/2012, 22h32
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  5. Réponses: 3
    Dernier message: 29/01/2008, 12h08

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