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 :

Mise à jour de la base de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Par défaut Mise à jour de la base de données
    Bonjour,

    Actuellement j'ai un soucis avec la mise à jour, quand je veux effectuer une mise à jour, ça change tt le contenu de ma BDD :/
    C'est un petit code qui me permet une gestion de présence journalière.


    Code accueil.php (formulaire d'ajout/update)
    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
    <?php
    $query_users = "SELECT * FROM utilisateurs,agent WHERE utilisateurs.nservice = '1' AND agent.nservice = '1'"; // Tri la table agent sur le champs Nservice
    $users = mysql_query($query_users, $dbprotect) or die(mysql_error());
    $indice = 0;
    ?>
    <form action="crea.php" method="post">
    Entrez la Date <input type="button" value="Calendrier" onClick="displayCalendar(document.forms[0].date,'yyyy/mm/dd',this)">
     <input readonly type="text" name="date" value="">
    <?php
     
        while( $result = mysql_fetch_object( $users ) )
        {
    ?>
    <table width="495" border="1">
      <tr>
        <td>Agent:</td>
        <td><input type="text" size="20" name="agent<?php echo $indice;?>" value="<?php echo ($result->nom);?> <?php echo ($result->prenom);?>"> <select name="etat<?php echo $indice;?>">
    <option>Pr&eacute;sent</option>
    <option>Cong&egrave;s Annuels</option>
    <option>Cong&egrave;s Exceptionnel</option>
    <option>Mission</option>
    <option>R&eacute;cup&eacute;ration</option>
    </select></td>
     </tr>
    <input type="hidden" name="nchrono<?php echo $indice;?>" value="<?php echo ($result->nchrono);?>">
    <input type="hidden" name="login<?php echo $indice;?>" value="<?php echo ($result->login);?>">
    <input type="hidden" name="lservice<?php echo $indice;?>" value="<?php echo ($result->lservice);?>">
    <?php
    $indice++;
    }
    ?>
    <input type="hidden" name="numIndice" value="<?php echo $indice;?>"/>
    </table>
    <input type="submit" value="valider" name="valider">
    <input type="submit" value="Mise &agrave; jour" name="maj">
    </form>
    crea.php (ajout du contenu de mon formulaire dans ma bdd)
    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
    <?php
        if(isset($_POST['valider']))
    {
     
    		$indice = $_POST['numIndice'];
    		$valider = $_POST['valider'];
    		$date = $_POST['date'];
     
    			function user_exists($date)
    			{
    				$sql = 'SELECT `date` FROM presence_informatique WHERE date = \'' . addslashes($date) . '\' LIMIT 1';
    				$res = mysql_query($sql) or die ($sql.'<br />'.mysql_error());
    				return (mysql_num_rows($res) == 1);
    			}
     
     
    			if (user_exists($date))
    			{
    				echo('La date que vous avez saisie est d&eacute;j&agrave; enregistrer!<br />');
    				echo('Si vous souhaitez &eacute;craser le contenu pr&eacute;c&eacute;dent veuillez cliquer sur le lien "<a href="update.php">suivant</a>"<br />');
    			}
    			else
    			{
    					if ( $indice > 0 ) {
    						for ( $i=0; $i < $indice; $i++ )
    					{
    						$lservice=$_POST['lservice'.$i];
    						$agent=$_POST['agent'.$i];
    						$nchrono=$_POST['nchrono'.$i];
    						$etat=$_POST['etat'.$i];
    						$login=$_POST['login'.$i];
     
    						$requete ="INSERT INTO presence_informatique (id,lservice,date,agent,nchrono,etat,login) values ('','$lservice','$date','$agent','$nchrono','$etat','$login')";
     
    						mysql_query($requete);
    					}
    				mysql_close();
    				echo "La date &agrave; bien &eacute;t&eacute; prise en charge pour les ".$indice." agent ";
    			}
    		}
    }
    else
    echo "Merci de bien remplir le formulaire";
    ?>
    Code d'update
    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
    <?php
        if(isset($_POST['maj']))
    {
     
    		$indice = $_POST['numIndice'];
    		$valider = $_POST['valider'];
    		$date = $_POST['date'];
     
      					if ( $indice > 0 ) {
    						for ( $i=0; $i < $indice; $i++ )
    					{
    						$lservice=$_POST['lservice'.$i];
    						$agent=$_POST['agent'.$i];
    						$nchrono=$_POST['nchrono'.$i];
    						$etat=$_POST['etat'.$i];
    						$login=$_POST['login'.$i];
    						$requete ="UPDATE presence_informatique SET 
    													date='$date',
    													lservice='$lservice',
    													agent='$agent',
    													nchrono='$nchrono',
    													etat='$etat',
    													login='$login'";
    						mysql_query($requete);
    					}
    										}
    						echo "Mise &agrave; jour effectu&eacute;<br>";
     
    }
    else
    echo "La mise &agrave jour &agrave; rencontr&eacute un probl&egrave;me<br>";
    ?>
    En faite quand je fais une mise à jour çà remplace tte ma bdd. J'aimerai tout simplement que quand on clic sur le bouton Mise à jour du formulaire ça fait une mise à jour que de la date voulu.


    J'espère avoir été assez clair
    Merci d'avance

  2. #2
    Membre confirmé Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Par défaut
    C'est tout à fait normal, lis bien ta requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $requete ="UPDATE presence_informatique SET
    date='$date',
    lservice='$lservice',
    agent='$agent',
    nchrono='$nchrono',
    etat='$etat',
    login='$login'";
    Pour la modification se fasse sur un enregistrement précis de ta table il faut préciser lequel.
    Pour ça rajoute une clause WHERE sur l'ID de l'enregistrement concerné.

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Par défaut
    Exact

    Si je suis ton raisonnement je dois mettre ceci:

    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
    	<?php
        if(isset($_POST['valider']))
    {
     
    		$indice = $_POST['numIndice'];
    		$valider = $_POST['valider'];
    		$date = $_POST['date'];
     
      					if ( $indice > 0 ) {
    						for ( $i=0; $i < $indice; $i++ )
    					{
    						$lservice=$_POST['lservice'.$i];
    						$agent=$_POST['agent'.$i];
    						$nchrono=$_POST['nchrono'.$i];
    						$etat=$_POST['etat'.$i];
    						$login=$_POST['login'.$i];
    						$requete ="UPDATE presence_informatique SET 
    													date='$date',
    													lservice='$lservice',
    													agent='$agent',
    													nchrono='$nchrono',
    													etat='$etat',
    													login='$login'
    													WHERE date=".$date."";
    						mysql_query($requete);
    					}
    										}
    						echo "Mise &agrave; jour effectu&eacute;<br>";
     
    }
    else
    echo "La mise &agrave jour &agrave; rencontr&eacute un probl&egrave;me<br>";
    ?>
    Puisque je veux modifier par rapport à la date.
    Mais bien sur pour le moment aucune mise à jour se fait

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Août 2007
    Messages : 109
    Par défaut
    la question est quels sont les élements que tu cherche à mettre à jour.

    Seulement la date ?

    la requete update se positionne par rapport à un ou plusieurs enregistrement correspondant à ta clause where.

    Par exemple, tu cherches à mettre à jour la date d'une ernegsitrement
    tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE MaTable SET MonchampDate = Date WHERE MontChampID = ID
     
    ou bien
     
    UPDATE MaTable SET MonchampDate = Date WHERE MonChampService = Service
    le premier update ne met à jour qu'un enregistrement
    Le deuwiement tous les enregistrement du service

  5. #5
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Par défaut
    J'aimerai mettre à jour tous les utilisateurs par rapport à la date sélectionné.

    Si il y 5 utilisateurs, le fait de mettre dans le champs date la même date que celle de la BDD ça mettra à jour toute les personnes.


    Suis-je bien clair?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Août 2007
    Messages : 109
    Par défaut
    - Tu ne dois pas mettre à jour tous les champs, seulement ceux nécessaires

    - tu te sert des autres pour filtrer ta requête donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $requete ="UPDATE presence_informatique SET
    date='$date'
    WHERE lservice='$lservice' 
    AND agent='$agent' 
    AND nchrono='$nchrono' 
    AND etat='$etat'
     AND	login='$login'

  7. #7
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Par défaut
    avec ta proposition je vais juste mettre à jour le champs date et pas le reste.



    [MAJ] J'ai fait encore quelque test rien a faire :/

  8. #8
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Par défaut
    En faite pour être exact je veux juste modifier le champs "etat" car c'est le seul champs qui peut changer dans les mise à jour

    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
    	<?php
        if(isset($_POST['valider']))
    {
    $indice = $_POST['numIndice'];
    $valider = $_POST['valider'];
    $date = $_POST['date'];
     
      		if ( $indice > 0 ) {
    		for ( $i=0; $i < $indice; $i++ )
    	{
    	$lservice=$_POST['lservice'.$i];
    	$agent=$_POST['agent'.$i];
    	$nchrono=$_POST['nchrono'.$i];
    	$etat=$_POST['etat'.$i];
    	$login=$_POST['login'.$i];
    	$requete ="UPDATE presence_informatique SET etat = '$etat' WHERE date = ".$date."";
    		mysql_query($requete);
    	}
    			}
    echo "Mise &agrave; jour effectu&eacute;<br>";
     
    }
    else
    echo "La mise &agrave jour &agrave; rencontr&eacute un probl&egrave;me<br>";
    ?>

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Par défaut
    Salut,
    Tu veux modifier l'état mais de quel utilisateur? Pour pointer vers le bon enregistrement à modifier il faut corriger la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete ="UPDATE presence_informatique SET etat = '$etat' WHERE date = ".$date."";
    pointe vers tout les enregistrements qui ont la date = $date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete ="UPDATE presence_informatique SET etat = '$etat' WHERE date = ".$date." AND agent=".$agent."";
    pointe vers tout les enregistrements qui ont la date = $date pour l'agent = $agent (en principe dont 1 seul enregistrement).

  10. #10
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Par défaut
    Bein je peux pas dire quel agent va être modifier.

    Car sur ma page accueil.php il peut y avoir 2 ou 8 agents tout dépend quel personne se log sur le programme

    En fait il y a un login et ce login permet d'accéder au agent que la personne a en charge donc ça peut-être 2, 5, 8, 12 etc ...
    Et sur chaque agent il y a un état "présent" "malade" "congès".
    Si un chef de service se trompe, il mets la date ou il y a l'erreur, ensuite il choisi l'état puis il fait "mise a jour" et hop hop hop c'est bon pour la BDD

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Par défaut Re
    On est d'accord que le responsable de service ne met pas à jour le même état pour tout les agents qu'il a en charge.

    Il faut donc que tu prévoit dans le formulaire de MAJ de choisir l'agent à mettre à jour, alors le responsable devra lancer la mise à jour pour chacun des agents.

  12. #12
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Par défaut
    n'est-il pas possible de garder le formulaire de "accueil.php" pour faire les mise à jour?

  13. #13
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Par défaut
    en faite c'est un soucis de "" je devais mettre des ''

    $requete ="UPDATE presence_informatique SET etat = '$etat' WHERE date = '$date' AND agent='$agent'";



    merci à tous de votre aide

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

Discussions similaires

  1. [C#] [MySQL] Mise à jour de la base de donnée
    Par dev01 dans le forum Windows Forms
    Réponses: 12
    Dernier message: 01/08/2007, 09h15
  2. Réponses: 2
    Dernier message: 30/03/2007, 21h11
  3. [MySQL] Problème de mise à jour de la base de données
    Par Osiris22 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 17/01/2006, 16h08
  4. probleme de virgule dans la mise à jour d'une base de donnée
    Par KAF dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 24/12/2005, 02h18
  5. mise à jour d'une base de données
    Par flo83 dans le forum ASP
    Réponses: 6
    Dernier message: 12/06/2005, 20h27

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