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'enregistrement sur deux tables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Par défaut Suppression d'enregistrement sur deux tables
    Bonjour,

    Après avoir fais une refonte de monprojet et des tables dans mysql me voila confronté à un petit problème.
    C'est la suppréssion des enregistrement dans deux table
    Je gère toutes les factures dans une table et dans une autre table les relances concernant chaque facture

    voici la structure de mes tables :

    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
     
     
    CREATE TABLE IF NOT EXISTS `facture` (
      `id_numero` varchar(7) NOT NULL,
      `facture` varchar(14) NOT NULL,
      `intitule` varchar(60) NOT NULL,
      `montant` double NOT NULL,
      `session` tinytext NOT NULL,
      `date_fact` varchar(20) NOT NULL,
      `date_echeance` varchar(20) NOT NULL,
      `type_fact` varchar(15) NOT NULL,
      `annee` varchar(5) NOT NULL,
      PRIMARY KEY (`facture`),
      UNIQUE KEY `facture` (`facture`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
     
     
    CREATE TABLE IF NOT EXISTS `relance` (
      `facture` varchar(14) NOT NULL DEFAULT '',
      `relance` varchar(3) NOT NULL,
      `l_01` date NOT NULL,
      `l_02` date NOT NULL,
      `l_03` date NOT NULL,
      `l_04` date NOT NULL,
      PRIMARY KEY (`facture`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    Le code de traitement que j'utilise pour la suppréssion des enregistrements

    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
     
    include('../inc/inc_connexion.php');
     
    if (isset($_POST['check']) AND (isset($_POST['check']) != 0))
     
    	{
     
    foreach ($_GET['check'] as $facture) 
    		{
     
    			//ne fonctionne pas
    		//$sql="DELETE facture FROM relance, facture WHERE relance.facture ='$facture' AND facture.facture ='$facture'";
     
    	$sql1 = "DELETE from facture where facture == '$facture'";
    	$sql2 = "DELETE from relance where facture == '$facture'";
     
    						//ne fonctionne pas
                        // $sql = "DELETE facture FROM facture,relance WHERE relance.facture AND facture.facture = '$facture'";
     
                      $req = mysql_query($sql1,$sql2);
     
    				  	echo $req;
    		}
     
    	}	
     
    ?>

    Le code de ma page servant a faire la sélection des ligne à supprimer
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
     
    <?php
    session_start ();
    include ('../admin/haut.php');
    ?>
     
    <h3><center> Recherche des dûs d'un client</center></h3>
     
    <form method="POST" action="" name="formulaire">
     
    Numéro du client : <input type ="text" name= "numero" size="10">
       <input type="submit" name="submit" value="Envoyer" />
       </form>
    <br>
     
    <h3><center>Détail des factures dues par le client</center></h3>
     
     
    <?php
    include('../inc/inc_connexion.php');
    include('suppression.php');
     
    if(!empty($_POST['numero']))
    {
    $id_numero=$_POST['numero'];
     
    $req_fact="Select *
    From relance
     Left Join facture  On relance.facture = facture.facture
     Left Join SOCIETE  On relance.id_numero = societe.id_numero
    WHERE facture.id_numero LIKE '".$id_numero."'";
     
    //*******************************************************************************************//
    //  Récupération de la liste des facture du client (via une requête sur ma table facture     //
    //*******************************************************************************************//
     
     
    $ligne = "<table BORDER=1 BORDERCOLOR=#CCCCCC BGCOLOR=#fffccc CELLSPACING=0 CELLPADDING=1 WIDTH=98% ALIGN=left font-family:Verdana size=10px>
    			<td bgcolor='#669999'><b><u>Numero</u></b></td>
    			<td bgcolor='#669999'><b><u>Societe</u></b></td>
    			<td bgcolor='#669999'><b><u>Facture</u></b></td>
    			<td bgcolor='#669999'><b><u>Libelle</u></b></td>		
    			<td bgcolor='#669999'><b><u>Montant</u></b></td>
    			
    			<td bgcolor='#669999'><b><u>Date echeance</u></b></td>
    			<td bgcolor='#669999'><b><u>Relance</u></b></td>
    			<td bgcolor='#669999'><b><u>L 01</u></b></td>
    			<td bgcolor='#669999'><b><u>L 02</u></b></td>
    			<td bgcolor='#669999'><b><u>L 03</u></b></td>
    			<td bgcolor='#669999'><b><u>L 04</u></b></td>
    			<td bgcolor='#CC0033'><b><u>Suppr.</u></b></td></tr>";
     
     
     
    $resultat = mysql_query($req_fact) or die ('Erreur '.$req_fact.' '.mysql_error());
     
     
     
    $total = 0;	
    $mont = 0;
     
     
    	while($dus = mysql_fetch_array($resultat)){
     
    		$id = $dus['id_numero'];
    		$societe= addslashes($dus['societe']);
    		$facture = addslashes($dus['facture']);
    		$intitule = addslashes($dus['intitule']);
    		$montant = $dus['montant'];
    		$date_fact = addslashes($dus['date_fact']);
    		$date_echeance = addslashes($dus['date_echeance']);
    		$relance = addslashes($dus['relance']);
    		$l_01 = addslashes($dus['l_01']);
    		$l_02 = addslashes($dus['l_02']);
    		$l_03 = addslashes($dus['l_03']);
    		$l_04 = addslashes($dus['l_04']);				
    		$annee = addslashes($dus['annee']);
     
     
    				$mont = addslashes($dus['montant']);
     
    					$total += $mont;
     
    				$ligne .= "<tr>
    						<td><a href='../vues/fiche_pdv.php?numero=$id' tarPOST='_self'>".$id."</a></td>
    						<td>".$societe."</td>
    						<td>".$facture."</td>
    						<td>".$intitule."</td>
    						<td align='right'>".$montant."</td>
    						
    						<td align='center'>".$date_echeance."</td>
    						<td align='center'>".$relance."</td>
    						<td align='center'>".$l_01."</td>
    						<td align='center'>".$l_02."</td>
    						<td align='center'>".$l_03."</td>
    						<td align='center'>".$l_04."</td>					
    <td align='center'><form method='GET' action=''><input type='checkbox' name='check[]' value=".$dus['facture']."></td></tr>"; 
    	}
    $ligne .= "<tr><td colspan='4'>Total des dus du client N° $id_numero </td><td align='center'>".$total."</td>
    <td colspan='10' align='right'><input type='submit' value='delete'></form></td></tr>";	
     
    echo $ligne;
     
     mysql_free_result($resultat);
     }
     
    else
    {
     
    }
    ?>
    Je vous remercie de votre aide

    Runcafre91

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Pourquoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = mysql_query($sql1,$sql2);
    Alors que c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $req = mysql_query($sql1);
    $req = mysql_query($sql2);
    $req récuppère true ou false

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Par défaut
    Re,

    Merci à de votre réponse j'ai pu résoudre le problème

    ci-joint le code final

    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
     
     
    <?php
     
    include('../inc/inc_connexion.php');
     
    if (isset($_GET['check']) AND (isset($_GET['check']) != 0))
     
    	{
     
    foreach ($_GET['check'] as $facture) 
    		{
    						$sql1 = "DELETE facture FROM facture WHERE facture  = '$facture'";
    						$sql2 = "DELETE facture FROM relance WHERE facture  = '$facture'";
     
     
                     $req = mysql_query($sql1);
    				 $req = mysql_query($sql2);
    		}
     
    	}	
     
    ?>
    Bonne journée

    Runcafre91


    Re j'ai été trop rapide sur ce coup, je me suis apercu que l'enregistrement se n'est supprimer que d'an une table au lieux des deux.

    Je vois pas d'ou cela pourrais venir


    Meci de l'aide que vous pourriez m'apporter

    Runcafre91

  4. #4
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Pour continuer,

    $facture est bien présent dans les deux tables pour toutes les données du foreach ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour,

    Pour continuer,

    $facture est bien présent dans les deux tables pour toutes les données du foreach ?
    bonjour,

    J'ai bien les facture dans les deux tables, lors de ma requete j'ai pas de message d'erreur la suppression se passe bien au niveau de la requete mais lors que je vérifie en base il est supprimer que dans la première table et non la deuxieme

    Merci de votre aide

    Runcafre91

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Une définition de clé étrangère ne permettrait-elle pas de réaliser automatiquement cette suppression ?

    Sinon il faut ne rien mettre entre vos DELETE et FROM. C'est là que ça pose problème, surtout avec la seconde.

    PS : le formulaire a été repassé en GET ? Parce qu'il y avait des incohérences dans le message initial avec un mélange GET/POST.

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Par défaut
    Bonjour,

    Merci pour votre réponse, j'ai modifié mon formulaire en gardant que la methode POST, j'ai toujour le même problème de suppression
    j'ai réuni les deux scripts sur une seul page pour etre plus plus simple et diminué le nombre de pages


    ci-joint le nouveau script

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
     
    <?php
    session_start ();
    echo "Utilisateur : ";
    echo $_SESSION['pseudo'];
    echo'<br>';
    ini_set ("error_reporting", "E_ALL & ~E_NOTICE");
    ?>
     
    <a href='../index.php'>Retour à l'accueil</a>
    <h3><center> Mise à jour des compte client</center></h3>
     
    <form method="POST" action="" name="formulaire">
     
    Numéro du client : <input type ="text" name= "numero" size="10">
       <input type="submit" name="submit" value="Envoyer" />
       </form>
    <br>
     
     
    <?php
    include('../inc/inc_connexion.php');
     
     
    if(!empty($_POST['numero']))
    {
    $id_numero=$_POST['numero'];
     
    $req_fact="Select *
    From facture
    Left Join SOCIETE  On facture.id_numero = societe.id_numero
    WHERE facture.id_numero LIKE '".$id_numero."'";
     
    //*******************************************************************************************//
    //  Récupération de la liste des facture du client (via une requête sur ma table facture     //
    //*******************************************************************************************//
     
     
    $ligne = "<table BORDER=1 BORDERCOLOR=#CCCCCC BGCOLOR=#fffccc CELLSPACING=0 CELLPADDING=1 WIDTH=98% ALIGN=left font-family:Verdana size=10px>
    			<td bgcolor='#669999'><b><u>Numero</u></b></td>
    			<td bgcolor='#669999'><b><u>Societe</u></b></td>
    			<td bgcolor='#669999'><b><u>Facture</u></b></td>
    			<td bgcolor='#669999'><b><u>Libelle</u></b></td>		
    			<td bgcolor='#669999'><b><u>Montant</u></b></td>
    			<td bgcolor='#669999'><b><u>Date echeance</u></b></td>
    			<td bgcolor='#CC0033'><b><u>Suppr.</u></b></td></tr>";		
     
     
    $resultat = mysql_query($req_fact) or die ('Erreur '.$req_fact.' '.mysql_error());
     
     
    $total = 0;	
    $mont = 0;
     
     
    	while($dus = mysql_fetch_array($resultat)){
     
    		$id = $dus['id_numero'];
    		$societe= addslashes($dus['societe']);
    		$facture = addslashes($dus['f_facture']);
    		$intitule = addslashes($dus['intitule']);
    		$montant = $dus['montant'];
    		$date_fact = addslashes($dus['date_fact']);
    		$date_echeance = addslashes($dus['date_echeance']);				
    		$annee = addslashes($dus['annee']);
     
     
    				$mont = addslashes($dus['montant']);
     
    					$total += $mont;
     
    				$ligne .= "<tr>
    						<td><a href='../vues/fiche_pdv.php?numero=$id'>".$id."</a></td>
    						<td>".$societe."</td>
    						<td>".$facture."</td>
    						<td>".$intitule."</td>
    						<td align='right'>".$montant."</td>
    						<td align='center'>".$date_echeance."</td>					
    <td align='center'><form method='GET' action=''><input type='checkbox' name='check[]' value=".$dus['f_facture']."></td></tr>"; 
    	}
    $ligne .= "<tr><td colspan='4'>Total des dus du client N° $id_numero </td><td align='center'>".$total."</td>
    <td colspan='10' align='right'><input type='submit' value='delete'></form></td></tr>";	
     
    echo $ligne;
     
     mysql_free_result($resultat);
     }
    ?>
     
     
     
    <?php
     //*****************************************************************************
     //* TRAIEMENT DE LA SUPPRESSION SUR LES DEUX TABLES *
     //*****************************************************************************
     
    include('../inc/inc_connexion.php');
     
    if (isset($_POST['check']) AND (isset($_POST['check']) != 0))
     
    	{
     
    foreach ($_POST['check'] as $f_facture) 
    		{
     
    						$sql = ('DELETE FROM facture WHERE f_facture  ='.$f_facture.'');
    						$sql2 = ('DELETE FROM relance WHERE f_facture  ='.$f_facture.'');
     
    echo $sql;
    echo "<br>";
    echo $sql2;
                     		$req = mysql_query($sql);
    						$req2 = mysql_query($sql2);
    		}
     
    	}	
     
    ?>
    La je sais pas trop d'ou vienne l'erreur

    Merci de votre aide

    Runcafre91

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Ça ne va pas là : votre formulaire va utiliser la méthode GET pour envoyer les données, vous ne pouvez donc pas faire référence à celles-ci (check) par $_POST donc. Un peu de cohérence

    Par ailleurs, ce formulaire ne devrait-il pas être global à vos différentes lignes et non en avoir un pour chacune d'elle ? Parce qu'en l'état, vous n'aurez qu'au plus une checkbox de cochée pour le formulaire où le bouton submit sera cliqué.

    Enfin, votre "identifiant" facture étant en varchar, il y a donc logiquement besoin de quotes dans vos requêtes pour indiquer sa valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #$f_facture = mysql_real_escape_string($f_facture);
    $sql = 'DELETE FROM facture WHERE f_facture = "' . $f_facture . '"';
    $sql2 = 'DELETE FROM relance WHERE f_facture = "' . $f_facture . '"';
    PS : les addslashes à l'affichage, surtout pour générer un formulaire, il vaudrait mieux éviter. Ça ne sert à rien et ça risque d'être plus problématique qu'autre chose - avec magic_quotes_gpc à on des antislashs seront de nouveau ajoutés à ceux d'addslashes

  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Par défaut
    Bonjour,

    Merci de votre aide j'ai pu resoudre le problème
    et cela fonctionne bien la suppression se fait dans les deux table

    Runcafre91

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/07/2012, 14h52
  2. [AC-2000] Suppression ligne avec conditions sur deux tables
    Par Loufink dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 09/07/2009, 11h38
  3. Réponses: 2
    Dernier message: 08/06/2006, 06h29
  4. Réponses: 3
    Dernier message: 01/12/2005, 10h17
  5. Réponses: 9
    Dernier message: 21/11/2005, 18h51

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