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 :

Requete de mise a jour sur deux table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    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
    Points : 103
    Points
    103
    Par défaut Requete de mise a jour sur deux table
    Bonjour,

    J'ai créer récement un projet, et du coup j'ai du refaire une refonte de celui-ci car il y avait un petit problème de mise a jour et de stockage des données.
    Auparavant je gérais le tout dans une seule table mais maintenant je dois les gérer dans deux table ci dessous 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
    28
     
     
     
    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 fonctionnement est le suivant

    A partir d'une page je sélectionne un numéro qui m'envoie sur une autre page avec un formulaire de mise à jour.

    La table des relances se remplit au fur et a mesure des des relances c'est à dire lorsque je sélectionne un facture pour la première fois je dois copier le numero de celle-ci dans ma table relance et grace à un udapte je fais la mise à jour.

    Voici le code de ma première 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
    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
     
     
    <?php
     
    include('../inc/inc_connexion.php');
     
    $id= $_GET['numero'];
    echo "<br>";
    echo("$id");
    echo "<br>";
     
     
    $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>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 facture</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='#669999'><b><u>Annee</u></b></td>";
     
     
     
     
    if(isset($_GET["numero"]))
     
     {
    $req = "SELECT * FROM facture WHERE id_numero = ".$id." ORDER BY facture";
    }
    else 
    {
    $req = "SELECT * FROM facture WHERE id_numero = ".$id." ORDER BY facture";
    }
     
    // Envoi de la requête et récupération des résultats
    $res=mysql_query($req)or die(mysql_error()."\n".$req);
     
    $total = 0;	
    $mont = 0;
     
     
    if(mysql_query($req))
    	{
    	while($dus = mysql_fetch_array($res))
    		{
    		$id = $dus['id_numero'];
     
    		$facture = $dus['facture'];
    		$intitule = $dus['intitule'];
    		$montant = $dus['montant'];
    		$date_fact = $dus['date_fact'];
    		$date_echeance = $dus['date_echeance'];
    		$relance = $dus['relance'];
    		$l_01 = $dus['l_01'];
    		$l_03 = $dus['l_02'];
    		$l_02 = $dus['l_03'];
    		$l_04 = $dus['l_04'];				
    		$annee = $dus['annee'];
     
     
    				$mont = addslashes($dus['montant']);
     
    					$total += $mont;
     
    		{
     
    			$ligne .= "<tr>
    						<td>".$id."</td>
    						<td><a href='../modele/relance_01.php?num=$facture' target='_PARENT'>".$facture."</a></td>
    						<td>".$intitule."</td>
    						<td align='right'>".$montant."</td>
    						<td align='center'>".$date_fact."</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'>".$annee."</td></tr>"; 
    			}
    		}
     
     
    $ligne .= "<tr><td colspan='3'>Total des dus du client N° $id </td><td align='right'>".$total."</td>";		
    echo $ligne;
     
    }
    mysql_free_result($res);
     
    ?>
    Copie de ma requete pour mise à jour des relance

    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
     
     
    <?php
     
    $num= $_GET['num'];
     
    $var=$num;
     
    include ('../inc/inc_connexion.php');
     
    $sql ="SELECT id_numero, facture 
    FROM facture
    INNER JOIN relance ON facture.facture = relance.facture
    WHERE   relance = '$var'";
     
    	//$reponse = mysql_query("SELECT * FROM facture WHERE id_numero= '$var' ORDER BY facture"); 
    	//$reponse = mysql_query("SELECT * FROM relance WHERE id_numero= '$var' ORDER BY facture");
     
     
    while ($donnees = mysql_fetch_array($sql) )
    { 
    ?>
    	 <HR></HR>
    <form method="GET" action="relance_02.php">
     
    	 <label>Numéro du client : <input type ="text" name= "numero" value="<?php echo $donnees['id_numero']; ?>" size="5">
     
    	   Facture : <input type ="text" name= "facture" value="<?php echo $donnees['facture']; ?>" size="10">
     
          Relance n° : <input type="text" name="relance" value="<?php echo $donnees['relance']; ?>" size="6"> </label><br>
     
    	  <label>Relance N°1 : <input type="text" name="l_01" value="<?php echo $donnees['l_01']; ?>" size="6"></label>
     
    	  <label>Relance N°2 : <input type="text" name="l_02" value="<?php echo $donnees['l_02']; ?>" size="6"></label>
     
    	  <label>Relance N°3 : <input type="text" name="l_03" value="<?php echo $donnees['l_03']; ?>" size="6"></label>
     
    	  <label>Relance N°4 : <input type="text" name="l_04" value="<?php echo $donnees['l_04']; ?>" size="6"></label>	
     
    	  <label>Annee : <input type="text" name="annee" value="<?php echo $donnees['annee']; ?>" size="5"></label>
     
    	<input type="submit" name="Modifier" value="actualiser">
    </form>
    <?php
    include ('trait_udapte.php');
    }
    ?>
    Pour l'instant je n'ai pas encore finaliser le traitment.

    Le problème qui se pose c'est que j'ai rien au niveau de l'affichage (faut-il inclure une condition dans le cas ou la facture n'existe pas dans la table relance)

    Merci de votre aide

    Espérant avoir été claire sur mon problème

    Runcafre91

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Cette structure est améliorable !

    1) L'identifiant de la facture (colonne id-numero' ?) devrait être de type entier auto-incrémenté et constituer la clé primaire. Une clé primaire de type VARCHAR(14) est une mauvaise clé.

    Et il eût été plus signifiant d'appeler cette colonne 'id_facture'.

    2) La relance dépend de la facture.
    Je crois comprendre que les colonnes l_01 à l_04 sont les dates de relance et qu'il n'y a au plus qu'une ligne de la table 'relance' pour chaque facture ?

    Je serais plutôt parti du MCD suivant :
    relance -(1,1)----correspondre----0,n- facture

    Ce qui fait qu'il n'y aurait eu qu'une seule colonne de date de relance :
    relance (id_facture, id_relance, date_relance)

    Cela évite le bonhomme NULL pour une majorité des cas de relance dans les colonnes l_02 à l_04.

    Comme vous avez eu la bonne idée d'utiliser le moteur InnoDB, profitez donc de l'avantage des contraintes de clés étrangères.

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

Discussions similaires

  1. [PDO] mise a jour de deux tables avec PDO
    Par Invité dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/10/2011, 01h44
  2. [MySQL] mise a jour sur une table avec MD5
    Par Invité dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/11/2010, 11h58
  3. [MySQL] mise a jour de deux tables mysql
    Par Invité dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/09/2010, 11h29
  4. Plantage SQL Server sur requete de mise a jour
    Par Laurent_75000 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/09/2005, 10h00
  5. Requete sur deux tables
    Par ReaseT dans le forum ASP
    Réponses: 13
    Dernier message: 07/02/2005, 16h18

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