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 :

Multi requête MySQL avec la PDO PHP


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut Multi requête MySQL avec la PDO PHP
    Bonjour à tous,
    je bloque actuellement sur un programme php.

    Le but de ce programme est de gérer les associations d'une commune. Chaque association a une ou des activités. Je suis actuellement en train de travailler sur la suppression des activités.
    J'ai créé un formulaire de suppression, il me permet de choisir dans une liste l'activité à supprimer entre celles présentent dans la bdd.
    La suppression s'effectue bien mais je cherche à faire un code plus performant qui me permettent lors de la suppression de l'activité si l'association possède d'autres activités. Si l'activité qu'on souhaite supprimer et la seule activité gérer par l'association on supprime l'association en question et c'est là que je bloque...
    Je ne vois pas comment faire en pratique, théoriquement il faudrait que je compte le nombre de champ 'ASSOCIATION' ayant la même ID dans la table "activite" afin de voir si l'association possède d'autre activités. Si c'est le cas, on supprime que l'activité sinon on supprime l'activité et l'association correspondante.

    Je ne vois pas comment réaliser une requête SQL, récupérer le résultat et le réutiliser dans une seconde requête...

    Voici mon code pour le formulaire:

    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
     
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Supprimer une activité</title>
    		<link rel="stylesheet" type="text/css" href="stylepage.css"> <!-- Lien vers le css -->
    		<script language="Javascript">
    		function Demande_verification()
    		{
    			msg = "Voulez-vous vraiment supprimer cette activité ? \n Attention la suppression d'une activité supprime aussi les activités qui lui sont liées";
    			return confirm(msg);
    		}
    		</script>
    	</head>
    	<body>
    		<?php 
    		include 'connectionbdd.php'; // permet la connection à la base de données grâce au fichier connectionbdd.php
    		?>	
    		<h1> Supprimer une activité </h1>
     
    		<form action="traitementsupprimactivite.php" method="post" onSubmit="return Demande_verification()">
     
    			<label for="LIBELLE"> Nom de l'activité : </label> 
    			<select name="LIBELLE" id="LIBELLE">
    				<option> </option>
    					<?php
    						$reponse = $bdd->query('SELECT * FROM activite');
     
    						while ($donnees = $reponse->fetch())
    						{
    							?>
    							<option value="<?php echo $donnees['ID']; ?>"> <?php echo $donnees['ID'] ." ". $donnees['LIBELLE']; ?> </option>
    							<?php
    						}
    					?>
    			</select> </br></br>
    			<input type= "submit" value= "Supprimer"> </br>
     
    		</form>
    	</body>
    </html>
    Et le code de la page de traitement :

    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
     
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Page protégée par mot de passe</title>
    		<link rel="stylesheet" type="text/css" href="stylepage.css"> <!-- Lien vers le css -->  
        </head>
    	<body>
    		<?php
    		include 'connectionbdd.php'; // permet la connection à la base de données grâce au fichier connectionbdd.php
     
    		$testnom_activite = !empty($_POST['LIBELLE']) ? $_POST['LIBELLE'] : NULL; // On regarde si le champ est rempli
    		$id_activite = $_POST['LIBELLE'];
     
     
     
    		if ($testnom_activite!=NULL)
    		{
    			$req = $bdd->prepare('DELETE FROM activite WHERE ID = :id');
    			$req->execute(array(
    			'id' => $id_activite
    			));
    			$message = "L'activité a bien été supprimé.";
    		}
    		else 
    		{
    			$message = "Vous n'avez pas choisi l'activité à supprimer ou l'activité choisi est inexistante";
    			include 'supreactivite.php';
    		}
    		echo $message;
    		?>
    	</body>
    </html>

  2. #2
    Membre régulier Avatar de monaka
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 64
    Points : 107
    Points
    107
    Par défaut
    salut, désolé pour les précédents posts, j'ai maintenant lu ton code, tu as une table activité donc j'imagines qu tu plusieurs champs activite dans ta table association

    le principe est simple
    donc quand tu vides un champ d'une ligne association, vérifie juste que les autres champs activités ne sont pas nulls, s'ils sont tous nulls eh bien tu supprimes la ligne donc l'association

    petit bricolage,pour le principe


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $req = $bdd->prepare('select id, acivité1,acivité2 .... from association');
    			$req->execute();
     $ligne = $req->fetchAll();
     
     
    			));
     foreach ($ligne as $rows)
       if((!$rows['acivité1'] ) AND (!$rows['acivité2'] )   )
     
                 {
                  DELETE FROM association WHERE id =$rows['id']'
     
                 }
    La rigueur vient toujours à bout de l'obstacle.
    Les détails font la perfection, et la perfection n'est pas un détail.

    J'avais une charrette tirée par des chevaux, mais j'ai acheté une voiture avec un moteur.
    Est-ce que je dois tout le temps rouler avec le moteur, ou est-ce que je peux atteler mes chevaux à la voiture de temps en temps ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    En notant le message sur le forum des idées me sont venues
    Je me suis servi de fetchColumn afin de récupérer des variables de type String :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $test = $bdd->prepare('SELECT ASSOCIATION FROM activite WHERE ID = :id'); 
    $test->execute(array('id' => $id_activite));
    $donnees = $test->fetchColumn(); // $donnees = id de l'association
     
    $test2 = $bdd->prepare('SELECT COUNT(ASSOCIATION) FROM activite WHERE ASSOCIATION = :id');
    $test2->execute(array('id' => $donnees));
    $donnees2 = $test2->fetchColumn(); // $donnees2 = nombre d'activité gérer par l'association
    Et j'ai réalisé une petite condition if :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if($donnees2<=1) // Si l'association a une seule activité maximum
    {
    	$req = $bdd->prepare('DELETE FROM activite WHERE ID = :id'); // Supprime l'activité
    	$req->execute(array('id' => $id_activite));
     
    	$req2 = $bdd->prepare('DELETE FROM association WHERE ID = :id'); // Supprime l'association
    	$req2->execute(array('id' => $donnees));
     
    	$message = "L'activité a bien été supprimé ainsi que l'association liée à elle.";
    }
    Désolé, si vous avez perdu votre temps pour essayer de m'aider
    J'ai été un peu trop rapide avant de poster mon post (ça m'a quand même permis de trouver la solution).

    N'hésitez pas à répondre à ce sujet si vous pensez que mon code puisse être simplifié, je le met en résolu dans l'après-midi.
    SMVE

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par monaka Voir le message
    salut, comment t'y prend tu pour vider un champ activité d'une ligne
    Salut Monaka comme tu as pu le voir dans mon dernier message j'ai réussi à trouver la solution à mon problème.
    Cependant pour répondre à ta question, je ne vide pas le champ (sinon j'aurai modifié la valeur du champ ciblé par NULL je pense), je le supprime juste.

  5. #5
    Membre régulier Avatar de monaka
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 64
    Points : 107
    Points
    107
    Par défaut
    pas de soucis, vu que je me suis un peu aussi embrouillé
    N'hésitez pas à répondre à ce sujet si vous pensez que mon code puisse être simplifié
    tant qu' a bien faire
    pour ta table activité ce serait plus beau de mettre id_association au lieu de association

    if($donnees2<=1) // Si l'association a une seule activité maximum
    et les autres cas alors?

    avec ton propre code et après suppression d'une activité la vérification serait ainsi


    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
     
    $test = $bdd->prepare('SELECT ASSOCIATION FROM activite WHERE ID = :id'); 
    $test->execute(array('id' => $id_activite));
    $donnees = $test->fetchColumn(); // $donnees = id de l'association
     
    $test2 = $bdd->prepare('SELECT COUNT(ASSOCIATION) FROM activite WHERE ASSOCIATION = :id');
    $test2->execute(array('id' =>$donnees ));
    $donnees2 = $test2->fetchColumn(); // $donnees2 = nombre d'activité gérer par l'association
       if($donnees2<1) // Si l'association n'a pas d’activité
    {
     
     
    	$req2 = $bdd->prepare('DELETE FROM association WHERE ID = :id'); // Supprime l'association
    	$req2->execute(array('id' => $donnees));
     
    	$message = "L'activité a bien été supprimé ainsi que l'association liée à elle.";
    }
    La rigueur vient toujours à bout de l'obstacle.
    Les détails font la perfection, et la perfection n'est pas un détail.

    J'avais une charrette tirée par des chevaux, mais j'ai acheté une voiture avec un moteur.
    Est-ce que je dois tout le temps rouler avec le moteur, ou est-ce que je peux atteler mes chevaux à la voiture de temps en temps ?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    La page de traitement ressemble en réalité plus à ça :
    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
     
     
    <?php
    include 'connectionbdd.php'; // permet la connection à la base de données grâce au fichier connectionbdd.php
     
    $testnom_activite = !empty($_POST['LIBELLE']) ? $_POST['LIBELLE'] : NULL; // On regarde si le champ est rempli
    $id_activite = $_POST['LIBELLE']; // Donne l'ID de l'activité à supprimer
     
    $test = $bdd->prepare('SELECT ASSOCIATION FROM activite WHERE ID = :id'); 
    $test->execute(array('id' => $id_activite));
    $donnees = $test->fetchColumn(); // $donnees = id de l'association
     
    $test2 = $bdd->prepare('SELECT COUNT(ASSOCIATION) FROM activite WHERE ASSOCIATION = :id');
    $test2->execute(array('id' => $donnees));
    $donnees2 = $test2->fetchColumn(); // $donnees2 = nombre d'activité gérer par l'association
     
    if ($testnom_activite==NULL) 
    {
    	$message = "Vous n'avez pas choisi l'activité à supprimer ou l'activité choisi est inéxistante";
    			include 'supreactivite.php';
    }
    else
    {
    	if($donnees2<=1) // Si l'association a une seule activité maximum
            {
    	        $req = $bdd->prepare('DELETE FROM activite WHERE ID = :id'); // Supprime l'activité
    		$req->execute(array('id' => $id_activite));
     
    		$req2 = $bdd->prepare('DELETE FROM association WHERE ID = :id'); // Supprime l'association
    		$req2->execute(array('id' => $donnees));
     
    		$message = "L'activité a bien été supprimé ainsi que l'association liée à elle.";
    	}
    	else // Sinon on supprime que l'activité
    	{
    		$req = $bdd->prepare('DELETE FROM activite WHERE ID = :id');
    		$req->execute(array('id' => $id_activite));
    		$message = "L'activité a bien été supprimé.";
    	}
    }
    echo $message;
     
    ?>
    J'ai évité de mettre le code complet pour se focaliser vraiment sur le problème.

    Oui, ça serait bien de changer le nom du champ ASSOCIATION qui devrait être ID_ASSOCIATION j'vais y penser

    Merci de ton aide, j'passe le sujet en résolu.

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

Discussions similaires

  1. unexpected character : erreur à l'exécution d'une requête MySQL avec PHP
    Par sub_zero dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 02/02/2015, 18h22
  2. [MySQL] Mettre des conditions dans une requête mysql avec pdo
    Par shima5 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/10/2010, 21h11
  3. [MySQL] requête mysql avec php
    Par affreuxzozo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/04/2009, 17h02
  4. [MySQL] requêtes mysql avec php
    Par youness78 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/07/2007, 16h37
  5. [BDD] Comment Executer Une SP Mysql avec ADODB depuis PHP
    Par audreyc dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 30/03/2006, 12h17

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