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 :

perte de données d'un formulaire d'un page à une autre indépendamment des $_GET et $_POST [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut perte de données d'un formulaire d'un page à une autre indépendamment des $_GET et $_POST
    Bonjour à tous !

    Voilà je suis tout nouveau sur le forum bien que je viens de me rendre compte que j'y suis inscrit depuis un petit moment.

    Je suis également un novice en développement.

    Voilà je suis entrain de développer dans le cadre d'un stage un logiciel. J'utilise les langages HTML/CSS, PHP et Javascript/AJAX.

    Voilà j'ai un formulaire de recherche qui me permet d'afficher une liste de demandes en fonction d'un ou plusieurs critères choisis. Le formulaire est une page PHP (recherche_demande.php) et le tableau contenant la liste de résultats est une autre page PHP (liste_recherche.php). Les données saisies dans mon formulaire (recherche_demande.php) sont renvoyées à la page de résultats (liste_recherche.php) par le biais d'une fonction Javascript.

    Avec AJAX j'affiche le formulaire et le tableau dans la même page visuellement.

    Jusque là tout fonctionnement bien.

    J'ai voulu rajouter sur chacune des rubriques du tableau de résultats des petits flèches, haut et bas, qui permettent de trier les données de manière croissante ou décroissante.

    Voilà mon souci, lorsque je clique dessus il m'affiche mon tableau de résultats (sans le formulaire de recherche) mais vide sans les données. Je perds les données. J'ai pourtant fait un RefreshIt sur le fichier en lui même. Mais je perds les données saisi dans le formulaire et récupérées par le biais de ma fonction javascript. En quelque sorte il me fait un "effacement de toutes les données".

    Voici un exemple de rubrique avec les flèches de tri :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <th>ID
                <br/>
                <a href=\"#\" onClick=\"refreshIt('content', 'liste_recherche.php?tri=asc&choix_rubrique=id_demande')\"><img src= \"core/images/s_asc.png\" alt=\"tri croissant\" /></a>
                <a href=\"#\" onClick=\"refreshIt('content', 'liste_recherche.php?tri=desc&choix_rubrique=id_demande')\"><img src= \"core/images/s_desc.png\" alt=\"tri décroissant\" /></a></th>
    tri prend la valeur asc pour un tri croissant et desc pour un tri décroissant. choix_rubrique contient le nom du champ de ma table dans la base de données sur lequel le tri est effectué.

    Voilà voilou pour un début. Désolé si je ne suis pas très clair dans mes explications. N'hésitez pas à me demander plus de précisions.

    Merci d'avances pour vos réponses !

    Tartenpion

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 194
    Par défaut
    Bonjour,

    Au niveau de tes liens, on ne vois pas de passage de données en GET (autre que ton tri ou ta rubrique), si tu le fait en POST, il serait possible de voir un peu de code ?
    Si tu n'as pas de passage en POST non plus, ca expliquerai le fait que ton tableau soit vide.

    Yasen77

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Merci d'utilisé balise code .
    essaye de mettre var_dum(ta variable) avec exit; pour voir le résultat.
    faut aussi ajouté if isset ta variable { instruction...} else.....
    aussi on voix pas ta requête !!!! essaye la sur phpadmin pour le résultat retourné.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    voici une discussion qui pourrait te mettre sur une bonne piste.
    L'idée est d'enregistrer les critères de recherche dans de variables de SESSION.
    Auquel cas il n'est plus utile de TOUT renvoyer à chaque fois, mais juste le(s) critère(s) à modifier.

    Voici comment je m'y prends :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    // 1/ INITIALISATION
    if(!isset($_SESSION['recherche'])){	$_SESSION['recherche']	= array(); } // on crée
    // VALEURS PAR DEFAUT
    if(!isset($_SESSION['recherche']['nbreParPage'])){	$_SESSION['recherche']['nbreParPage'] = 25;	} // Nombre par page
    if(!isset($_SESSION['recherche']['numPage'])){		$_SESSION['recherche']['numPage'] = 1;	} // Page 1
    // [...]
    // ---------------------
    // 2/ RECUPERATION depuis le formulaire
    if(isset($_POST['nbreParPage'])) {	$_SESSION['recherche']['nbreParPage'] 	= intval($_POST['nbreParPage']); }
    if(isset($_POST['numPage'])) {		$_SESSION['recherche']['numPage'] 	= intval($_POST['numPage']); }
    // [...]
    // ---------------------
    A toi de voir ce qui est récupéré/récupérable en POST et/ou GET.
    Voili voilou aussi.

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    recoucou !

    Tout d'abord merci pour vos réponses !

    Pour les balises codes, désolé, je viens de trouver. Pas de souci je les utiliserai à l'avenir.

    Désolé je me rends compte que je ne vous ai pas donné beaucoup d'éléments. Je vais vous en donner plus mais j'espère que ce ne sera pas indigeste.

    dans mon formulaire (recherche_demande.php) le formulaire où j'entre les différentes données, j'ai plusieurs champs text de saisi ou des listes déroulantes.

    Voici un exemple de champs de saisie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <tr>
          <td><strong>id de la demande : </strong>&nbsp;&nbsp;&nbsp;</td>
          <td><input type=\"text\" id=\"id\" name=\"id\" size=\"10\"></td>
          </tr>";
    et un exemple de liste déroulante. Les données je les récupère de ma base de données :

    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
    echo "<tr>
         <td><strong>état de la demande : </strong>&nbsp;&nbsp;&nbsp;</td>
         <td><select name=\"etat\" id=\"etat\" onchange='lien_list_deroul()'>
         <option value='0'>-------</option>";
     
    $tableau_id = liste_etatDemande();
     
    //Variable qui ajoutera l'attribut selected de la liste déroulante
    $selected = '';
     
    //Parcours du tableau
     
        foreach ($tableau_id as $value)
        {
            $inf = detail_etatDemande($value);
     
            // Affichage de la ligne
     
             echo '<option value="'.$value.'">'.$inf['eta_valeur'].'</option>';
     
            //Remise à zéro de $selected
            $selected='';
        }
    echo "</select></td>";
    echo "</tr>";
    Ensuite avec le bouton Ok du formulaire, je fais appel à une fonction javascript qui me récupère les différentes données saisies.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td>".$f1->simpleButton('Ok', 'recherche_demande()', 'buttons2')."</td>
    Voici la fonction javascript :

    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
    function recherche_demande()
    {
        getXhr(); // Appel de la fonction en question définie plus haut
        xhr.onreadystatechange = function()
        { // Appeler la fonction en question dans le cas où le "readyState" change
            if(xhr.readyState == 4 && xhr.status == 200)
            { // Le "readyState" change. Les valeurs indiquées correspondent dans le cas où quelque chose est renvoyé de la page.
    }   
        }
     
        var pro_data = ""; // Création d'une variable de type tableau qui est vide.
     
        if (document.getElementById("id").value != "")
        {
            var id_demande = document.getElementById("id").value;
            var val_id = "id";
            pro_data += ""+val_id+"="+id_demande+"&";
        }
     
        if (document.getElementById("date_demande").value != "")
        {
            var date_demande = document.getElementById("date_demande").value;
            var val_date = "date";
            pro_data += ""+val_date+"="+date_demande+"&";
        }
     
        if (document.getElementById("etat").value != false)
        {
            var etat_demande = document.getElementById('etat').options[document.getElementById('etat').selectedIndex].value;
            var val_etat = "etat";
            pro_data += ""+val_etat+"="+etat_demande+"&";
        }
     
        if (document.getElementById("setat")&& document.getElementById("setat").value != "")
        {
            try
            {
            var sous_etat_demande = document.getElementById('setat').options[document.getElementById('setat').selectedIndex].value;
            var val_sous_etat = "sous_etat";
            pro_data += ""+val_sous_etat+"="+sous_etat_demande+"&";
            }
            catch(err)
            {
     
            }
        }
     
        if (document.getElementById("type_materiel").value != false)
        {
            var materiel_demande = document.getElementById('type_materiel').options[document.getElementById('type_materiel').selectedIndex].value;
            var val_materiel = "materiel";
            pro_data += ""+val_materiel+"="+materiel_demande+"";
        }
     
        if (document.getElementById("service_juridique").value != "")
        {
            var id_service = document.getElementById("service_juridique").value;
            var val_id_service = "service";
            pro_data += ""+val_id_service+"="+id_service+"&";
        }
     
         refreshIt("res","liste_recherche.php",pro_data); // On envoie ensuite vers la page php indiquée avec toutes les valeurs que contient la variable "pro_data".
    }
    Ensuite j'arrive sur la page PHP de résultat (liste_recherche.php)

    Dans ce fichier je teste les champs qui contiennent des données. Si c'est le cas je les intègre à ma requête que je construis "sur mesure" si je puis dire.

    Par exemple pour l'id :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($_POST['id']){
        if(!$premier_critere) $select .= " AND "; else $premier_critere = false;
        $select .= "demande.id_demande=".$_POST['id'];
    }
    Une fois que j'ai testé tous les champs j'utilise ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql_recherche = "SELECT * FROM demande WHERE ".$select." AND demande.jur_id = ".$id_juridiction;
     
    $res_demande = mysql_query($sql_recherche);
    A la fin j'utilise un while pour parcourir toutes les données et les afficher :

    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
    $i = 0;
    while($affiche_requete = mysql_fetch_assoc($res_demande))
    {
        echo "<tr".bgc_tr($i).">
            <td><a href=\"#\" onClick=\"refreshIt('content', 'detail_recherche.php?id_demande=".$affiche_requete['id_demande']."')\"><b>[".$affiche_requete['id_demande']."]</b></a></td>
            <td>".$affiche_requete['raison']."</td>
            <td>".$affiche_requete['pourquoi']."</td>
            <td>".detail_etatDemande_intitule($affiche_requete['etat_demande'])."</td>
            <td>".detail_sousetatDemande_intitule($affiche_requete['setat_demande'])."</td>
            <td>".$affiche_requete['date_demande']."</td>
            <td>".$affiche_requete['date_reponse']."</td>
            <td>".$affiche_requete['date_traitement']."</td>
            <td>".$affiche_requete['service']."</td>
            </tr>";
        $i++;
    }
    Mais il est vrai que je ne récupère pas les différents $_POST dans mes liens concernant les flèches. L'erreur vient peut-être de là.

    mon code sur les flèches de tri :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <th>ID
                <br/>
                <a href=\"#\" onClick=\"refreshIt('content', 'liste_recherche.php?tri=asc&choix_rubrique=id_demande')\"><img src= \"core/images/s_asc.png\" alt=\"tri croissant\" /></a>
                <a href=\"#\" onClick=\"refreshIt('content', 'liste_recherche.php?tri=desc&choix_rubrique=id_demande')\"><img src= \"core/images/s_desc.png\" alt=\"tri décroissant\" /></a></th>
    Désolé, je me rends compte que le fait que je vous détaille tout peut peut-être donner l'impression que je pense que vous ne comprenez pas grand chose.

    Ce n'est pas du tout le cas. Le novice et celui qui ne comprends pas grand chose c'est bien moi.

    Mais si vous voulez, si je me permets de vous donner beaucoup d'éléments et d'expliquer des choses qui peuvent paraître évidentes c'est pour vous donner le maximum d'éléments pour essayer de trouver le problème. Je me rends compte que je ne vous avais pas donner grand chose lors de mon message précédent.

    Désolé c'est mes débuts sur ce forum. peut-être qu'à l'avenir (lorsque je maîtriserai mieux le code et comment l'expliquer) j'arriverais à faire la synthèse et à trouver un juste milieu entre le trop peu et le trop.

    En tout cas merci pour vos réponses !

    jreaux62 je vais regarder le bout de code que tu me donnes ainsi que le lien vers une autre discussion.

  6. #6
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Bonjour à tous !

    De nouveau merci pour votre aide !

    J'ai regardé mon script et je ne suis pas sûr mais je pense savoir d'où vient mon problème.

    Je vais essayer de tout expliquer et ensuite je vous pose mes questions.

    Voilà, suite à ma fonction javascript où je récupère les données de mon formulaire je pointe ensuite vers le fichier liste_recherche.php et je récupère les données grâce à des $_POST. J'ai crée des variables qui récupèrent les différents $_POST.

    Une petite précision, j'ai tenté de remplacer les $_POST par les $_GET et d'afficher le résultat et là cela ne fonctionne plus, je suis obligé de garder les $_POST.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $monpostid = $_POST['id'];
    $monpostdate = $_POST['date'];
    $monpostetat = $_POST['etat'];
    $monpostsetat = $_POST['setat'];
    $monpostmateriel = $_POST['materiel'];
    $monpostservice = $_POST['service'];
    Ensuite si les variables ne sont pas vides je constitue sur mesure ma requête.

    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
    if($monpostid)
    {
        if(!$premier_critere) $select .= " AND "; else $premier_critere = false;
        $select .= "demande.id_demande=".$_POST['id'];
    }
     
    if($monpostdate)
    {
        if(!$premier_critere) $select .= " AND "; else $premier_critere = false;
        $select .= "demande.date_demande LIKE'".$date_base."'";
    }
     
    if($monpostetat)
    {
        if(!$premier_critere) $select .= " AND "; else $premier_critere = false;
        $select .= "demande.etat_demande=".$_POST['etat'];
    }
     
    if($monpostsetat)
    {
        if(!$premier_critere) $select .= " AND "; else $premier_critere = false;
        $select .= "demande.setat_demande=".$_POST['setat'];
    }
     
    if($monpostmateriel)
    {
        if(!$premier_critere) $select .= " AND "; else $premier_critere = false;
        $select .= "demande.type_materiel='".$_POST['materiel']."'";
    }
     
    if($monpostservice)
    {
        if(!$premier_critere) $select .= " AND "; else $premier_critere = false;
        $select .= "demande.service='".utf8_decode($_POST['service'])."'";
    }
    et ma requête SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql_recherche = "SELECT * FROM demande WHERE ".$select." AND demande.jur_id = ".$id_juridiction;
     
    $res_demande = mysql_query($sql_recherche);
    Enfin avec le while, je parcours tous les résultats possibles et je les affiche.

    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
    $i = 0;
    while($affiche_requete = mysql_fetch_assoc($res_demande))
    {
        echo "<tr".bgc_tr($i).">
            <td><a href=\"#\" onClick=\"refreshIt('content', 'detail_recherche.php?id_demande=".$affiche_requete['id_demande']."')\"><b>[".$affiche_requete['id_demande']."]</b></a></td>
            <td>".$affiche_requete['raison']."</td>
            <td>".$affiche_requete['pourquoi']."</td>
            <td>".detail_etatDemande_intitule($affiche_requete['etat_demande'])."</td>
            <td>".detail_sousetatDemande_intitule($affiche_requete['setat_demande'])."</td>
            <td>".$affiche_requete['date_demande']."</td>
            <td>".$affiche_requete['date_reponse']."</td>
            <td>".$affiche_requete['date_traitement']."</td>
            <td>".$affiche_requete['service']."</td>
            </tr>";
        $i++;
    }
    Lorsque j'arrive sur cette page après être passé par la fonction javascript tout fonctionne bien et il m'affiche bien les données appropriées.

    Cependant lorsque je clique sur les flèches de tri, il me perd toutes les données.

    Je crois savoir pourquoi. Car lorsque je clique dessus, il me regénère bien la page en question mais toutes les données qui ne sont pas issues de la page, inévitablement, il me les perd. Notamment tous les $_POST puisque je récupérais les valeurs depuis la fonction javascript. Ils deviennent donc tous vides et du coup ma requête SQL ne peut pas s'exécuter et je ne peux plus la parcourir dans le while pour afficher les différents résultats.

    Alors j'ai essayé de stocker les différents $_POST dans des variables que j'ai mis en paramètre dans les liens de mes flèches de tri.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a href=\"#\" onClick=\"refreshIt('content', 'liste_recherche.php?tri=asc&choix_rubrique=id_demande&monpostid=$monpostid')\"><img src= \"core/images/s_asc.png\" alt=\"tri croissant\" /></a>
                <a href=\"#\" onClick=\"refreshIt('content', 'liste_recherche.php?tri=desc&choix_rubrique=id_demande&monpostid=$monpostid')\"><img src= \"core/images/s_desc.png\" alt=\"tri décroissant\" /></a></th>
    Mais le souci, si je ne me trompe pas, c'est que dans une URL on ne peut passer que des variables de type $_GET et non pas $_POST.

    Voilà ma question, est-ce qu'il est possible de convertir un $_POST en $_GET et si oui est-ce que vous pouvez m'aiguillez sur comment faire?

    Et une autre ch'ite question si jamais je fais fausse route, si ce n'est pas ça est-ce que vous voulez bien me dire selon vous d'où pourrait venir l'erreur?

    jreaux62 j'ai regardé ton script où tu testes si les variables de sessions existent. J'ai vais tester en dernier recours mais je ne suis pas sûr que cela résolve mon problème. Mais merci beaucoup pour votre aide en tout cas.

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

Discussions similaires

  1. Perte de données sur retour formulaire
    Par Benzz dans le forum Langage
    Réponses: 7
    Dernier message: 09/03/2008, 12h10
  2. Perte de donnée d'un formulaire sur firefox
    Par oliv421 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/10/2007, 20h21
  3. Réponses: 14
    Dernier message: 15/05/2007, 14h51
  4. Réponses: 2
    Dernier message: 21/03/2007, 10h02
  5. Rediriger des données d'un formulaire vers deux pages différentes
    Par griese dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/12/2006, 11h30

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