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 :

Réinsertion des précédentes informations


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Par défaut Réinsertion des précédentes informations
    Bonjour,
    J'ai un drôle de problème : Sur une première page, qu'on pourra appeler page mère, j'ai un formulaire qui insert des données dans une bdd. L'insertion se fait par la page elle-même ($_SERVER['PHP_SELF']). Toujours sur cette même page, un peu plus bas, dans un tableau, s'affichent les données précédemment envoyées par le formulaire. A côté de chaque information, est donnée la possibilité de modifier et de supprimer celle-ci, dans une pop-up respective. Une fois que les données ont été modifiées/ supprimées, l'utilisateur peut cliquer sur un lien fermant la fenêtre, mais qui rafraichit également la page mère via une fonction java-script. Et j'ai systématiquement dans une fenêtre dévoilée par le navigateur le message suivant
    'Pour afficher cette page, les informations précédemment transmises par Firefox doivent être renvoyées. Ceci répètera toute action entreprise précédemment'.
    Et là se trouve le problème : si je valide l'opération, la page mère se réaffiche effectivement, mais présente aussi dans le tableau les anciennes informations... C'est à dire que j'ai bien les données modifiées de montrées, mais j'ai aussi une nouvelle ligne dans le tableau avec les précédentes informations d'affectées. Concrètement, dans la table de la bdd, j'ai bien une ligne d'enregistrement modifiée, avec le même identifiant, mais aussi une avec un nouveau identifiant, mais contenant les précédentes données...
    Ce que je comprends d'autant moins, c'est pourquoi la requête d'insertion est à chaque fois déclenchée si je valide le message d'avertissement du navigateur, et créée un nouvel enregistrement... Dans le code, elle ne peut que s'exécuter si l'utilisateur valide le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(isset($_POST['btn'])){
    $insert= "INSERT INTO commandes (designation, quantite, section, idUser) VALUES ('$prod','$qt','$sections','$idUser')";
    ...
    }?>
    J'avoue être un peu perdu...
    Maintenant, si je supprime la fonction java-script de rafraichissement, que je ferme seulement la pop-up, et que j'effectue un 'F5' sur la page mère, je n'ai plus de problème... Les informations modifiées sont bien affichées, et sans nouvel enregistrement.
    Merci pour votre aide...

  2. #2
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Houla...

    SELECT, INSERT, UPDATE, DELETE dans la même page?

    Et si tu fragmentais un peu le tout ?

    Ton code est lisible? Compréhensible? On s'y retrouve aisément?

    Si oui, tu peux le poster ici et nous verrons...
    Si ce n'est pas le cas, je te conseille fortement de le reprendre et d'individualiser tes modules sur des pages différentes...

    Au moins le temps d'avoir quelque chose qui tourne.
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Par défaut re:
    Non, Deallyra, les fonctions ne sont pas toutes sur la même page, mais réparties sur différents fichiers, que je vais essayer de vous décrire. Je ne donne pas non plus la totalité du code (pour une plus rapide et meilleure lecture), mais seulement les principaux éléments.
    Je commence par la page 'mère', sur laquelle j'ai en premier un formulaire d'insertion de donnée:
    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
    <form name="commandes" method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
    <table width="50%" cellpadding="5">
      <tr>
        <td bgcolor="#99CCFF">
          <div align="center">
            <select name="cat" size="1" id="cat" onchange="document.forms['commandes'].submit()"/>
     
            <option selected="selected"></option>
            <?php while($data = mysql_fetch_array($requete)) { 
    			echo '<option value="'.$data['idCat'].'">'.$data['categorie'].'</option>';
    		} ?>
              </select>
            </div></td>
        <td bgcolor="#99CCFF"><div align="center">
          <select name="produits" size="1" id="produits">
            <option selected="selected"></option>
            <?php for($i = 0; $i < $nb_prod; $i++){
    			echo '<option value="'.$produits[$i].'">'.$produits[$i].' - '.$conditionnement[$i].'</option>';
    		} ?>
          </select>
        </div></td>
        <td bgcolor="#99CCFF"><div align="center">
          <input name="qt" type="text" id="qt" size="2" />
        </div></td>
        <td bgcolor="#99CCFF"><div align="center">
          <select name="sections" size="1" id="sections">
            <option selected="selected"></option>
            <?php while($data = mysql_fetch_array($requete1)) { 
    			echo '<option value="'.$data['section'].'">'.$data['section'].'</option>';
    		} ?>
          </select>
        </div></td>
        <td bgcolor="#99CCFF"><div align="center">
          <input type="submit" name="btn" id="btn" value="ok" />
        </div></td>
      </tr>
    </table>
    </form>
     
    //Ensuite le traitement des variables du formulaire
    $cat = isset($_POST['cat']) ? $_POST['cat']:null;
    $prod = isset($_POST['produits']) ? $_POST['produits']:null;
    $qt = isset($_POST['qt']) ? $_POST['qt']:null;
    $sections = isset($_POST['sections']) ? $_POST['sections']:null;
     
    //et la requête d'insertion
    if(isset($_POST['btn'])){
    	$insert= "INSERT INTO commandes (designation, quantite, section, idUser) VALUES ('$prod','$qt','$sections','$idUser')";
    	$requete3 = mysql_query($insert) or die('Erreur SQL! Nous avons un problème avec la base de données.<br>'.$update.'<br>'.mysql_error());
    }?>
    Toujours sur cette même page, j'ai ensuite un tableau html dans lequel j'affiche les données provenant d'une table 'commandes', elle-même alimentée par le formulaire ci-dessus. L'affichage se fera en fonction de la personne qui ce sera authentifiée sur une autre 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
    /requêtes pour récupérer les commandes de la personne
    $select = "SELECT * FROM commandes WHERE idUser=".$_SESSION['idUser']." ORDER BY designation";
    $requete = mysql_query($select) or die('Erreur SQL! Nous avons un problème avec la base de données. Il sera résolu dans peu de temps <br>'.$select.'<br>'.mysql_error());
     
    //Et affichage des résultats dans un tableau
    if (mysql_num_rows($requete)>0){
    	echo '<table width="50%" cellpadding="5">';
    	echo '<tr><td colspan="5" bgcolor="#99CCFF">Votre commande</td></tr>';
    	echo '<tr><td bgcolor="#CCCCCC"><div align="center">Produits</div></td>';
    ...
    while($data = mysql_fetch_array($requete)) {
    		echo '<tr><td bgcolor="#F4F4F4"><div align="center">'.$data['designation'].'</div></td>';
    		echo '<td bgcolor="#F4F4F4"><div align="center">'.$data['quantite'].'</div></td>';
    ...
    //A côté de chaque produit, deux liens sont proposés respectivement pour l'édition du produit, et pour sa suppression, ouvrant une pop-up (mais je n'en donne qu'un seul ici, l'autre étant pareil à celui-ci)
    echo '<td bgcolor="#F4F4F4"><div align="center"><a href=\'javascript: popupCent("editCom.php?idCom='.html($data['idCom']).'","",700,200,"menubar=no,scrollbars=no,statusbar=no")\'><img src="../img/b_edit.png" alt="Modifier" width="16" height="16" border="0"/></a></div></td>';
    Voilà pour la page mère. Pour le fichier d'édition (editCom.php) ouvert dans un popup:
    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
    //traitement de la var envoyée par url
    $idCom = isset($_GET['idCom']) && is_numeric($_GET['idCom']) ? intval($_GET['idCom']) : null;
     
    //requête pour récupérer les informations suivant l'id de commande et qui seront affichée au préalable dans le formulaire de modification
    $select = "SELECT * FROM commandes WHERE idCom ='".$idCom."'";
    $requete = mysql_query($select) or die('Erreur SQL! Nous avons un problème avec la base de données. Il sera résolu dans peu de temps <br>'.$select.'<br>'.mysql_error());
    if($requete != 0){
    	$data = mysql_fetch_array($requete);
    }
    else{
    	$message = 'Désolé, mais nous ne pouvons pas afficher les informations concernant ce produit';
    }
     
    //Traitement des var du formulaire
    $produit = isset($_POST['prod']) && !empty($_POST['prod']) ? $_POST['prod']:null;
    $quantite = isset($_POST['qt']) && !empty($_POST['qt']) ? $_POST['qt']:null;
    etc.
    $user = $_SESSION['idUser'];
     
    //Requête de modification
    /requête de modification
    if(isset($_POST['btnModif'])){
    	$update= 'UPDATE commandes SET designation="'.$produit.'", quantite="'.$quantite.'", section="'.$section.'", idUser="'.$user.'" WHERE idCom=\''.$com.'\';';
    ...
    }
     
    //Chose importante avant le formulaire, la fonction java-script qui va permettre le rafraichissement de la page mère
    <script language="javascript" type="text/javascript">
    function refreshPage(){
    window.opener.location.reload();
    }
    </script>
     
    //le formulaire de modification:
    <form id="form1" name="form1" method="post" action="editCom.php">
    ...
    <td bgcolor="#F4F4F4"><div align="center">
          <input name="prod" type="text" id="prod" value="<?php echo $data['designation']; ?>" size="40" />
          </div></td>
        <td bgcolor="#F4F4F4"><div align="center">
          <input name="qt" type="text" id="qt" size="3" value="<?php echo $data['quantite']; ?>"/>
        </div></td>
    ...
    <input type="submit" name="btnModif" id="btnModif" value="Envoyer" />
    </form>
     
    //Et enfin la fermeture de la fenêtre, qui pose souci, et qui déclenche le message d'avertissement du navigateur:
    <p align="center"><a href="javascript:refreshPage();window.close();">Fermer la fenêtre.</a></p>
    merci bien,

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/08/2013, 09h42
  2. chargement des fausses informations lors de selection d'un item de listview
    Par sabrineisimm dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 08/09/2011, 11h36
  3. [Vxi3] Infoview : affichage des précédentes valeurs de planification
    Par Frank Holstein dans le forum Deski
    Réponses: 2
    Dernier message: 10/12/2010, 10h34
  4. Réponses: 1
    Dernier message: 27/03/2008, 12h24

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