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

Langage PHP Discussion :

Mise à jour sans effacer le contenu existant


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut Mise à jour sans effacer le contenu existant
    Bonjour,
    je voulais savoir si il est possible de faire un UPDATE sans que le contenu du champs soit effacé, que les données soit ajoutées aux précédentes

    est ce que cela à a voir avec l'incrémentation

    merci de votre aide

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    L'UPDATE met à jour les données, et efface donc les anciennes données.
    Il faut mettre en place des mécanismes particuliers pour conserver les anciennes données.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous pouvez référencer la valeur courante dans un update, ce qui vous permet effectivement de "conserver" les anciennes valeurs.

    Exemple avec une chaîne de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE MaTable
    Set MaColonne = CONCAT ( MaColonne , 'A' )

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Cette solution ne va fonctionner qu'avec les chaînes de caractères, et risque rapidement de faire exploser la longueur des chaînes.
    Il faudrait mettre un séparateur en plus, pour ensuite séparer les différentes valeurs les unes des autres...
    Non, ce n'est pas une solution adéquate.
    Il vaut mieux chercher du côté des fonctions type "audit trail".

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci pour vos infos

    je penses que la piste audit trail est surdimensionné pour moi , je ne maitrise pas du tout les fonctions mysql

    mais merci encore

    en fait je voulais faire un affichage des commentaires des internautes

    j'ai changé mon fusil d'épaule et fait appel a un fichier texte fabriqué à la volé qui est ensuite afficher dans la page..

    il me creer bien le fichier mais avec l'id du dernier enregistrement


    voila le code de la page qui affiche les news et les commentaire apres l'envoie via un 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
    <?php require_once('Connections/database.php'); ?>
    <?php
    $maxRows_actuBourse = 10;
    $pageNum_actuBourse = 0;
    if (isset($_GET['pageNum_actuBourse'])) {
      $pageNum_actuBourse = $_GET['pageNum_actuBourse'];
    }
    $startRow_actuBourse = $pageNum_actuBourse * $maxRows_actuBourse;
     
    mysql_select_db($database_liremessage, $liremessage);
    $query_actuBourse = "SELECT * FROM actu_bourse";
    $query_limit_actuBourse = sprintf("%s LIMIT %d, %d", $query_actuBourse, $startRow_actuBourse, $maxRows_actuBourse);
    $actuBourse = mysql_query($query_limit_actuBourse, $liremessage) or die(mysql_error());
    $row_actuBourse = mysql_fetch_assoc($actuBourse);
     
    if (isset($_GET['totalRows_actuBourse'])) {
      $totalRows_actuBourse = $_GET['totalRows_actuBourse'];
    } else {
      $all_actuBourse = mysql_query($query_actuBourse);
      $totalRows_actuBourse = mysql_num_rows($all_actuBourse);
    }
    $totalPages_actuBourse = ceil($totalRows_actuBourse/$maxRows_actuBourse)-1;
    ?>
    <?php  // creer un fichier texte pour les commentaires
    $quand = date("d M Y H:i:s"); //Temps
    $fp = fopen( $row_actuBourse['id_actu_bourse'].".log","a+"); //Ouverture ou création du fichier
    fputs($fp, "| <a href='mailto:$email'> $pseudo </a>  $commentaires<p>");
    fclose($fp);//Ecriture et fermeture du fichier
    ?>
     
     <?php // affiche les commentaires selon l'id de la table
    require ($row_actuBourse['id_actu_bourse'].".log"); ?>
    je pense que c'est dans la requette mysql que ça coince ou il manque une variable

    merci à vous

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Fais un echo() de ta requête et essaie de l'exécuter directement dans MySQL.
    Quel est alors le message d'erreur ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *
    FROM actu_bourse
    il m'affiche tous les enregistrement de la table ( ça va de 4 à 6 )

    dans le script il me creer un fichier 4.log meme si je clique sur par exemple la partie qui concerne l'enregistrement 5 ou 6

    si je met un echo comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $row_actuBourse['id_actu_bourse']; ?>
    il m'affiche bien 4, 5 et 6 la valeur des id

    c'est dans la fabrication du fichier texte que ça va pas, il creer un fichier texte avec comme nom la valeur du premier id de la table

    j'ai séparer le script de creation de fichier texte ce qui donne

    un fichier formulaire pour envoyer les commentaires qui va sur le fichier enreg.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <form method="POST" action="enreg.php">
     
    <p>Entrez votre adresse e-mail : <input type="text" size="20"
    name="email"><br>
    Entrez votre pseudo : <input type="text" size="20" name="pseudo"></p><br>
    Donnez vos commentaires : 
    <p><textarea name="commentaires" rows="7" cols="50"></textarea></p>
    <input type="submit" value="Valider">
    </form>
    le fichier qui creer le fichier de log a partir du 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
    <?php require_once('Connections/database.php'); ?>
    <?php
    mysql_select_db($database_liremessage, $liremessage);
    $query_commentActu = "SELECT * FROM actu_bourse";
    $commentActu = mysql_query($query_commentActu, $liremessage) or die(mysql_error());
    $row_commentActu = mysql_fetch_assoc($commentActu);
    $totalRows_commentActu = mysql_num_rows($commentActu);
    ?>
    <?php
    $quand = date("d M Y H:i:s"); //Temps
    $fp = fopen( $row_commentActu['id_actu_bourse'].".log","a+"); //Ouverture ou création du fichier
    fputs($fp, "| <a href='mailto:$email'> $pseudo </a>  $commentaires<p>");
    fclose($fp);//Ecriture et fermeture du fichier
    ?>
    <HTML><HEAD>
    <script language='JavaScript'>
    var url = "actu.php"; <!-- Redirection du visiteur -->
    window.location.replace(url);
    </script></HEAD>
    <BODY>
     
    </BODY>
    </HTML>
    <?php
    mysql_free_result($commentActu);
    ?>
    et le fichier pour afficher les news et les commentaires

    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
    <?php require_once('Connections/database.php'); ?>
    <?php
    $maxRows_actuBourse = 10;
    $pageNum_actuBourse = 0;
    if (isset($_GET['pageNum_actuBourse'])) {
      $pageNum_actuBourse = $_GET['pageNum_actuBourse'];
    }
    $startRow_actuBourse = $pageNum_actuBourse * $maxRows_actuBourse;
     
    mysql_select_db($database_liremessage, $liremessage);
    $query_actuBourse = "SELECT * FROM actu_bourse ORDER BY id_actu_bourse ASC";
    $query_limit_actuBourse = sprintf("%s LIMIT %d, %d", $query_actuBourse, $startRow_actuBourse, $maxRows_actuBourse);
    $actuBourse = mysql_query($query_limit_actuBourse, $liremessage) or die(mysql_error());
    $row_actuBourse = mysql_fetch_assoc($actuBourse);
     
    if (isset($_GET['totalRows_actuBourse'])) {
      $totalRows_actuBourse = $_GET['totalRows_actuBourse'];
    } else {
      $all_actuBourse = mysql_query($query_actuBourse);
      $totalRows_actuBourse = mysql_num_rows($all_actuBourse);
    }
    $totalPages_actuBourse = ceil($totalRows_actuBourse/$maxRows_actuBourse)-1;
    ?>
     
     
    <html >
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
     
    <link href="actu_bourse.css" rel="stylesheet" type="text/css" />
    </head>
     
    <body>
    <?php do { ?>
      <table width="600" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td width="11">&nbsp;</td>
          <td width="589" align="left" valign="top" class="titre_actu_gras"> &nbsp;<?php echo $row_actuBourse['date_actu_bourse']; ?><?php echo $row_actuBourse['titre_actu_bourse']; ?></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td align="left" valign="top"><br />
            <span class="texte_actu"><?php echo $row_actuBourse['texte_actu_bourse']; ?></span></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td ><table width="600" border="0" cellpadding="0" cellspacing="0" class="traiHautBas">
            <tr>
              <td class="titre_actu_gras2" width="421" align="left" valign="top">Vos r&eacute;actions</td>
              <td width="179"><a href="form.php" class="titre_actu">R&eacute;agissez</a> / <a href="#" class="titre_actu">Imprimer</a></td>
            </tr>
            <tr>
              <td class="texte_actu" align="left" valign="top">
    		  <?php // affiche les commentaires selon l'id de la table
    require ($row_actuBourse['id_actu_bourse'].".log");
    ?>		  </td>
              <td></td>
            </tr>
          </table></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td class="texte_actu"></td>
        </tr>
      </table>
      <?php } while ($row_actuBourse = mysql_fetch_assoc($actuBourse)); ?>
    </body>
    </html>
    <?php
    mysql_free_result($actuBourse);
    ?>
    mais donc il ne creer qu' un fichier nommé 4.log et toutes les news sont affiché dans l'enregistrement numéro 4


    voila la table ( le champ comment_actu_bourse ne sert à rien )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE `actu_bourse` (
      `id_actu_bourse` int(11) NOT NULL auto_increment,
      `titre_actu_bourse` varchar(250) NOT NULL,
      `texte_actu_bourse` longtext NOT NULL,
      `lien_actu_bourse` varchar(250) NOT NULL,
      `date_actu_bourse` varchar(250) NOT NULL,
      `comment_actu_bourse` longtext NOT NULL,
      PRIMARY KEY  (`id_actu_bourse`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
     
    --

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    je penses qu'il faut mettre en variable la valeur de l'id et l'incorporer dans la requette...bon ça bouillonne dans ma tête mais c'est le brouillard..

Discussions similaires

  1. Mise à jour sans lier les tables
    Par Eva71 dans le forum Modélisation
    Réponses: 2
    Dernier message: 16/07/2007, 14h28
  2. Réponses: 1
    Dernier message: 02/07/2007, 08h44
  3. Editer sans changer le contenu existant
    Par Flavien44 dans le forum Modélisation
    Réponses: 2
    Dernier message: 12/06/2007, 12h49
  4. Réponses: 2
    Dernier message: 25/09/2006, 17h24
  5. Réponses: 4
    Dernier message: 02/05/2006, 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