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 :

transmission $_POST pour affichage page par page [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Points : 92
    Points
    92
    Par défaut transmission $_POST pour affichage page par page
    Bonjour,
    Depuis plusieurs jours j'essaie de mettre en place l'affichage page par page du résultat d'une requête suite à l'envoi d'un formulaire de recherche (POST).
    Je me suis basée sur 2 tutos très différents afin de bien comprendre cette mise en place.

    Pour les 2 tutos, tout se passe bien pour la 1ère page mais rien ne s'affiche sur la 2nde.
    Après 1000 tests je crois que le problème vient du fait que mes $_POST sont vides à partir de la 2nde page. Peut-être un souci avec les ouvertures/fermetures de mes instructions ?
    J'ai vu que beaucoup de personnes avaient ce problème. J'ai étudié le forum, notamment les discussions suivies par jreaux62 et ericd69. Rien à faire, rien ne correspond vraiment. PS : je ne souhaite pas passer par des sessions.
    Je me permets, SVP, de vous soumettre mon code afin que vous puissiez JUSTE me dire où se situe le problème.
    Ce code mélange PHP/HTML, il est tiré de celui d'A. Hérault, c'est juste pour tester, je le rectifierai ensuite.
    Un grand merci par avance si vous aviez le temps, très bonne journée.
    Evelyne31

    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
    <html>
    <body>
     
    <?php
    //Connexion à la base de données
    mysql_connect(...);
    mysql_select_db(...);
     
    $messagesParPage=2; //Nous allons afficher 5 messages par page.
     
    if (isset($_POST["recherche"]) )
    {
    	if (isset($_POST["mot_recherche"])
    	&& isset($_POST["type_recherche"]) )
    	{
    	$mot_recherche = $_POST["mot_recherche"];
    	$type_recherche = $_POST["type_recherche"];
     
    		if ($_POST['type_recherche'] == 'nomDepartement')
    		{
    //Une connexion SQL doit être ouverte avant cette ligne...
    $retour_total=mysql_query
    	('SELECT count(ID_gite) AS total FROM GITE g
    			JOIN DEPARTEMENT d ON g.ID_departement = d.ID_departement
        		JOIN COMMUNE c ON g.ID_commune = c.ID_commune
        		WHERE nomDepartement = \''.$mot_recherche.'\' ') or die (mysql_error()); //Nous récupérons le contenu de la requête dans  		
    $donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
    $total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
     
    //Nous allons maintenant compter le nombre de pages.
    $nombreDePages=ceil($total/$messagesParPage);
     
    	if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
    	{
         $pageActuelle=intval($_GET['page']);
     
         	if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
         	{
             $pageActuelle=$nombreDePages;
         	}
    	}
     
    	else // Sinon
    	{
        $pageActuelle=1; // La page actuelle est la n°1    
    	}
     
    $premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire
     
    // La requête sql pour récupérer les messages de la page actuelle.
    $retour_messages=mysql_query('SELECT numGite, natureGite FROM GITE ORDER BY numGite DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'');
     
    	while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
    	{
         //Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre design...
         //De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
         echo '<table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
                    <tr>
                         <td><strong>Ecrit par : '.stripslashes($donnees_messages['numGite']).'</strong></td>
                    </tr>
                    <tr>
                         <td>'.nl2br(stripslashes($donnees_messages['natureGite'])).'</td>
                    </tr>
                </table><br /><br />';
        //J'ai rajouté des sauts à la ligne pour espacer les messages.   
    	}
     
    echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
    	for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
    	{
         //On va faire notre condition
         	if($i==$pageActuelle) //Si il s'agit de la page actuelle...
         	{
            echo ' [ '.$i.' ] '; 
         	}	
         		else //Sinon...
         		{
              	echo ' <a href="lith_traitement_form_rech.php?page='.$i.'">'.$i.'</a> ';
         		}
    	}
    echo '</p>';
    }
    	}
    		}
    ?>
    </body>
    </html>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Evelyne,
    Citation Envoyé par Evelyne31 Voir le message
    PS : je ne souhaite pas passer par des sessions.
    Dans ce cas, il te faudra repasser TOUS tes paramètres dans le lien de pagination. Et, évidemment, les récupérer en GET au retour.
    Ce qui n'est pas le plus commode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
              	echo ' <a href="lith_traitement_form_rech.php?page='.$i.'&param1='.$param1.'&param2='.$param2.'&param3='.$param3.'&param4='.$param4.'">'.$i.'</a> ';
    Mettre ces paramètres en SESSION est, à mon avis, une bonne solution...

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Je n'ai pas analysé le code ni regardé les tutos mais il doit être possible d'utiliser des balises <input type="hidden" /> pour passer des paramètres via $_POST.

    Au fait Evelyne, tu crois que ton appli sera terminée à temps pour que je puisse louer le gîte situé à Beaumont-sur-Lèze en Aveyron au Brésil pour la prochaine coupe du monde ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Points : 92
    Points
    92
    Par défaut
    Bonjour jreaux62, CinePhil,
    Merci, super, je crois que j'ai compris. Mais je ne mets pas de suite en résolu, je vais tester.
    CinePhil : tu peux te moquer Je fais tout ce que je peux, je travaille très dur, je ne fais que ça, je rêve même de code , je ne suis pas du tout informaticienne mais je t'assure que j'y arriverai. C'est mon 1er projet et avec toutes les difficultés rencontrées/surmontées le prochain sera tip/top et ira plus vite grâce à tous les conseils de ce forum .
    Encore merci tous 2, je vous tiens informés.
    Evelyne31

  5. #5
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Points : 92
    Points
    92
    Par défaut
    Bonsoir,
    Je reviens sur mon post où 3 solutions m'ont été proposées :
    1°) transmettre les paramètres dans le lien de pagination les récupérer en GET au retour : désolée, je ne comprends pas. Le lien de pagination est en dernière ligne de mon code. Tout est sur un seul fichier (traitement d'un formulaire de recherche). Où dans mon code récupérer les GET ?
    2°) utiliser des balises <input type="hidden" /> : dans le formulaire de recherche. Il n'est pas possible d'utiliser cette balise au moins pour <input type ="submit" name= "recherche" value="rechercher des gîtes"/>. Donc ce n'est pas possible.
    3°) utiliser des SESSIONS. Je voudrais bien mais les sessions servent à passer des paramètres de page en page or je n'ai qu'une page ? Les pages suivantes sont générées automatiquement.
    Je suis bien consciente que mes questions sont stupides mais si je veux être prête en 2014 (prochaine coupe du monde de foot) il faut bien que je les pose ?
    Un énorme merci par avance pour votre aide,
    Evelyne31

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    je me permets de me méler de la conversation
    Pourrais-tu poster le code de ton formulaire de recherche.

  7. #7
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Points : 92
    Points
    92
    Par défaut
    Bonsoir rawsrc,
    Toutes les contributions sont les bienvenues, je galère tellement !
    Voici le code de mon formulaire de recherche ci-dessous.
    Je te remercie par avance si tu pouvais juste m'indiquer une solution.
    Evelyne31

    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
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<link rel="stylesheet" href="lith_css/lith_style_form.css" />
    		<title>Lithothèque, formulaire de recherche</title>
    	</head>
    	<body>
     
    <?php include("lith_structure/lith_entete.php"); ?>
     
    <p class="titre_form">Formulaire de recherche de gîtes</p>
     
    <form method="post" action='lith_structure/lith_traitement_form_rech.php'>
     
    <div class="cadre_recherche">
     
    1° - Choisissez un type de recherche&nbsp; :<br />
        <select name="type_recherche">
          <option value="nomDepartement">par nom de département</option>
          <option value="nomCommune">par nom de commune</option>
          <option value="natureRoche">par nature de roche</option>
          <option value="nomEtage">par étage géologique</option>
        </select>
        <br />
     
    2° - et entrez le terme recherch&eacute;&nbsp;:<br />
    	<input type="text" size="30" name="mot_recherche"/><br />
     
    <input type ="submit" name= "recherche" value="rechercher des gîtes"/>
     
    </div>
     
    </form> 
     
    <div class="tab"><br /><IMG SRC="lith_images/puce_biface.png">&nbsp;&nbsp;<a href="lith_acces/lith_acces.php">Retour accueil Lithothèque</a></div><br />
     
    <?php include("lith_structure/lith_pied_page.php"); ?>
     
    </body>
    </html>

  8. #8
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    ils ont raison il n'y a que 3 façons de faire:
    • les sessions, le plus simple et souple comme je t'avais montré la dernière fois
    • passer les valeurs dans l'url (en GET) avec une limite la longueur de l'url
    • passer les valeur dans un formulaire soit avec de l'input en hidden ou en remplissant les balises concernées avec les valeurs correspondant à un choix antérieur

    après à toi de voir

    [edit] les sessions marche même si la page s'appelle elle même, aussi bien que si elle en appelle une autre[/edit]
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  9. #9
    Invité
    Invité(e)
    Par défaut
    A tester... ou détester :
    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    <html>
    <body>
     
    <?php
    //Connexion à la base de données
    mysql_connect(...);
    mysql_select_db(...);
     
    // ------------------------
    // Récupération des données
    if (isset($_POST["mot_recherche"])){ // Récupération via formulaire
    	$mot_recherche = trim($_POST["mot_recherche"]);
    } elseif (isset($_GET["mot_recherche"])){ // Récupération via URL
    	$mot_recherche = urldecode(trim($_GET["mot_recherche"]));
    } else {
    	$mot_recherche = '';
    }
    if (isset($_POST["type_recherche"])){ // Récupération via formulaire
    	$type_recherche = trim($_POST["type_recherche"]);
    } elseif (isset($_GET["type_recherche"])){ // Récupération via URL
    	$type_recherche = urldecode(trim($_GET["type_recherche"]));
    } else {
    	$type_recherche = '';
    }
    // ------------------------
    // Création de la requête
    switch ($type_recherche) {
    	case 'nomDepartement':	// contient le mot ...$mot_recherche...
    		// IMPORTANT => mysql_real_escape_string(...) pour PROTEGER des injections SQL !!
    		$clauseWhere = " WHERE nomDepartement LIKE '%".mysql_real_escape_string($mot_recherche)."%' "; 
    	break;
    	case 'nomCommune':
    		// [......]
    		$clauseWhere = " WHERE ..........";
    	break;
    	case 'natureRoche':
    		// [......]
    		$clauseWhere = " WHERE ..........";
    	break;
    	case 'nomEtage':
    		// [......]
    		$clauseWhere = " WHERE ..........";
    	break;
    	default:
    		$clauseWhere = ""; // requête à faire par défaut
    }
    // ------------------------
    // nombre total de résultats
    $retour_total_query = "SELECT count(ID_gite) AS total FROM GITE g
    	JOIN DEPARTEMENT d ON g.ID_departement = d.ID_departement
    	JOIN COMMUNE c ON g.ID_commune = c.ID_commune ".
    	$clauseWhere;
    $retour_total = mysql_query($retour_total_query) or die (mysql_error());
    $donnees_total = mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
    $total = $donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
     
    // ------------------------
    // Pagination
    $messagesParPage = 2; // Nous allons afficher 2 messages par page.
    //Nous allons maintenant compter le nombre de pages.
    $nombreDePages = ceil($total/$messagesParPage);
    // ------------------------
    // Récupération du numéro de page
    if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
    {
         $pageActuelle = intval($_GET['page']); // Récupération via URL
         if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
         {
             $pageActuelle = $nombreDePages;
         }
    } else { // Sinon
        $pageActuelle = 1; // La page actuelle est la n°1    
    }
    $premiereEntree = ($pageActuelle-1)*$messagesParPage; // On calcule la première entrée à lire
     
    // ------------------------
    // La requête sql pour récupérer les messages de la page actuelle.
    $retour_messages_query = "SELECT numGite, natureGite FROM GITE g
    	JOIN DEPARTEMENT d ON g.ID_departement = d.ID_departement
    	JOIN COMMUNE c ON g.ID_commune = c.ID_commune ".
    	$clauseWhere.
    	" ORDER BY numGite DESC LIMIT ".$premiereEntree.", ".$messagesParPage." ";
     
    $retour_messages = mysql_query($retour_messages_query);
    // ------------------------
    // Affichage
    while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
    {
    	//Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre design...
    	//De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
    	echo '
    	<table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
    		<tr>
    			 <td><strong>Ecrit par : '.stripslashes($donnees_messages['numGite']).'</strong></td>
    		</tr>
    		<tr>
    			 <td>'.nl2br(stripslashes($donnees_messages['natureGite'])).'</td>
    		</tr>
    	</table><br /><br />'; // J'ai rajouté des sauts à la ligne pour espacer les messages.   
    }
     
    // ------------------------
    // Affichage de la PAGINATION
    echo '<p style="text-align:center;">Page : '; //Pour l'affichage, on centre la liste des pages
    for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
    {
     //On va faire notre condition
    	if($i==$pageActuelle) //Si il s'agit de la page actuelle...
    	{
    	echo ' [ '.$i.' ] '; 
    	} else { //Sinon...
    		echo ' <a href="lith_traitement_form_rech.php?page='.$i.'&type_recherche='.urlencode($type_recherche).'&mot_recherche='.urlencode($mot_recherche).'">'.$i.'</a> ';
    	}
    }
    echo '</p>';
    ?>
    </body>
    </html>
    Dernière modification par Invité ; 15/11/2012 à 21h36.

  10. #10
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Points : 92
    Points
    92
    Par défaut
    Bonsoir ericd69,
    Je te remercie pour ta réponse. J'ai bien sûr étudié attentivement ton code. Je suis vraiment désolée, il est trop complexe pour moi à ce jour où j'en suis en php. Je le garde en réserve.
    Voici où j'en suis dans les sessions (évidemment ça ne marche pas) sûrement une erreur stupide.
    Merci par avance si quelqu'un pouvait m'indiquer où se situe mon erreur.
    Evelyne31

    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
     
    //je démarre la session
    <?php
    session_start();
    ?>
    <html>
    <body>
    <?php
    //Connexion à la base de données
    mysql_connect('localhost', 'root', 'root');
    mysql_select_db('...');
    //je vérifie que les variables ont bien été transmises
    if (isset($_POST['recherche']) )
    {
    	if (isset($_POST['mot_recherche'])
    	&& isset($_POST['type_recherche']) )
    	{
    //j'initialise les variables de session
      	$_SESSION['recherche'] = $recherche;
      	$_SESSION['mot_recherche'] = $mot_recherche;
            $_SESSION['type_recherche'] = $type_recherche;
    	}
    		else
    		{
      	         echo 'Une erreur est survenue, veuillez réessayer !';
    		}
    ...

  11. #11
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Points : 92
    Points
    92
    Par défaut
    Bonsoir jreaux62,
    Sincèrement je te remercie pour tout ce code que tu as écris, quel boulot ! C'est vraiment très sympa. Je l'ai testé en complétant les $clauseWhere = page blanche. Je n'en peux plus, je fais une pause pour prendre le temps de le décortiquer et le comprendre.
    Depuis le temps que je décortique des codes PHP en tous sens, que j'essaie de les comprendre et de les appliquer à mon projet, sans parler de tous les tutos ingurgités, je crois qu'entre le PHP et moi il y a une incompatibilité totale
    Ce qui est très déconcertant c'est qu'il y a plein de façons de faire, plein de codes possibles.
    Je ne mets pas encore en résolu, je vous tiens informé.
    Encore merci et très bonne soirée,
    Evelyne31

  12. #12
    Invité
    Invité(e)
    Par défaut
    Erreur dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour_messages = mysql_query($retour_messages_query);

  13. #13
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Points : 92
    Points
    92
    Par défaut
    Merci encore jreaux62 pour cette rectification.
    Toujours pas de résultat ce soir et là je sature.
    Demain matin je prends une feuille et un crayon et j'écris ton code ligne par ligne pour bien l'assimiler et trouver ce qui ne va pas.
    Je te tiens informé.
    Bonne nuit,
    Evelyne31

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour Evelyne,
    bien dormi ?

    Voici la version du code avec SESSION :
    -> on met les résultats de recherche dans des variables de SESSION (ce qui évite de les "trimbaler" à chaque fois).
    Cela permet aussi de quitter la page de recherche, et d'y revenir plus tard, en conservant les critères de recherche précédents.
    -> pagination : on récupère juste le numéro de page.
    -> requête : on la crée en fonction des critères de recherche

    Etudie plutôt ce code, car il est plus facile à transposer, surtout quand tu auras beaucoup de critères de recherche.
    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    <?php session_start(); // je démarre la session
    // ------------------------
    //Connexion à la base de données
    mysql_connect(...);
    mysql_select_db(...);
     
    // ------------------------
    // Initialisation des SESSION : si elles n'existent pas, on les crée
    if(!isset($_SESSION["recherche"]["mot"])){
    	$_SESSION["recherche"]["mot"] = '';
    }
    if(!isset($_SESSION["recherche"]["type"])){
    	$_SESSION["recherche"]["type"] = '';
    }
    // ------------------------
    // Récupération des données (critères de recherche) via le formulaire
    if (isset($_POST["recherche"])){ // si le formulaire a été posté
    	if (isset($_POST["mot_recherche"])){
    		$_SESSION["recherche"]["mot"] = trim($_POST["mot_recherche"]);
    	}
    	if (isset($_POST["type_recherche"])){
    		$_SESSION["recherche"]["type"] = trim($_POST["type_recherche"]);
    	}
    }
    // ------------------------
    // Création de la requête en fonction des critères de recherche
    // $clauseWhere = Critères de recherche
    switch ($_SESSION["recherche"]["type"]) {
    	case 'nomDepartement':	// Explication de LIKE '%MOT%' : contient le mot xxxMOTxxx
    		// IMPORTANT => mysql_real_escape_string(...) pour PROTEGER des injections SQL !!
    		$clauseWhere = " WHERE nomDepartement LIKE '%".mysql_real_escape_string($_SESSION['recherche']['mot'])."%' "; 
    	break;
    	case 'nomCommune':
    		// [......]
    		$clauseWhere = " WHERE ..........";
    	break;
    	case 'natureRoche':
    		// [......]
    		$clauseWhere = " WHERE ..........";
    	break;
    	case 'nomEtage':
    		// [......]
    		$clauseWhere = " WHERE ..........";
    	break;
    	default:
    		$clauseWhere = ""; // requête à faire par défaut
    }
    // ------------------------
    // Nombre total de résultats
    $retour_total_query = 
    	"SELECT count(ID_gite) AS total FROM GITE g
    	JOIN DEPARTEMENT d ON g.ID_departement = d.ID_departement
    	JOIN COMMUNE c ON g.ID_commune = c.ID_commune ".
    	$clauseWhere; // Critères de recherche
    $retour_total = mysql_query($retour_total_query) or die (mysql_error());
    $donnees_total = mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
    $total = $donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
     
    // ------------------------
    // Pagination
    $messagesParPage = 2; // Nous allons afficher 2 messages par page.
    //Nous allons maintenant compter le nombre de pages.
    $nombreDePages = ceil($total/$messagesParPage);
    // ------------------------
    // Récupération du numéro de page
    if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
    {
         $pageActuelle = intval($_GET['page']); // Récupération via URL
         if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
         {
             $pageActuelle = $nombreDePages;
         }
    } else { // Sinon
        $pageActuelle = 1; // La page actuelle est la n°1    
    }
    $premiereEntree = ($pageActuelle-1)*$messagesParPage; // On calcule la première entrée à lire
     
    // ------------------------
    // La requête sql pour récupérer les messages de la page actuelle.
    $retour_messages_query = 
    	"SELECT numGite, natureGite FROM GITE g
    	JOIN DEPARTEMENT d ON g.ID_departement = d.ID_departement
    	JOIN COMMUNE c ON g.ID_commune = c.ID_commune ".
    	$clauseWhere. // Critères de recherche
    	" ORDER BY numGite 
    	DESC LIMIT ".$premiereEntree.", ".$messagesParPage." "; // Pagination
     
    $retour_messages = mysql_query($retour_messages_query);
    // ------------------------
    ?>
    <html>
    <body>
     
    <?php
    // Affichage
    while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
    {
    	//Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre design...
    	//De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
    	echo '
    	<table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
    		<tr>
    			 <td><strong>Ecrit par : '.stripslashes($donnees_messages['numGite']).'</strong></td>
    		</tr>
    		<tr>
    			 <td>'.nl2br(stripslashes($donnees_messages['natureGite'])).'</td>
    		</tr>
    	</table><br /><br />'; // J'ai rajouté des sauts à la ligne pour espacer les messages.   
    }
     
    // ------------------------
    // Affichage de la PAGINATION
    echo '<p style="text-align:center;">Page : '; //Pour l'affichage, on centre la liste des pages
    for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
    {
     //On va faire notre condition
    	if($i==$pageActuelle) //Si il s'agit de la page actuelle...
    	{
    	echo ' [ '.$i.' ] '; 
    	} else { //Sinon...
    		echo ' <a href="lith_traitement_form_rech.php?page='.$i.'">'.$i.'</a> ';
    	}
    }
    echo '</p>';
    ?>
    </body>
    </html>
    Dernière modification par Invité ; 16/11/2012 à 10h16.

  15. #15
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Points : 92
    Points
    92
    Par défaut
    Bonjour jreaux62,
    Oui, j'ai bien dormi mais peu. Je te remercie très sincèrement pour ce nouveau code et toute l'aide que tu m'apportes.
    Décision du jour : j'imprime les différentes solutions, j'étudie et j'écris chaque ligne pour qu'elle n'est plus de secret. C'est parti !
    Je te souhaite une très bonne journée
    Evelyne31

  16. #16
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Bonjour Evelyne,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    1° - Choisissez un type de recherche&nbsp; :<br />
        <select name="type_recherche">
          <option value="nomDepartement">par nom de département</option>
          <option value="nomCommune">par nom de commune</option>
          <option value="natureRoche">par nature de roche</option>
          <option value="nomEtage">par étage géologique</option>
        </select>
        <br />
    Tiens ! Ça me rappelle quelque chose ça ! Tu travailles avec sowane ?

    Moi qui croyait pouvoir louer un gîte pour les vacances...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  17. #17
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Points : 92
    Points
    92
    Par défaut
    Bonsoir jreaux62 et CinePhil,
    Tout d'abord jreaux62 encore 1000 mercis pour tes codes et les explications détaillées. J'ai tout décortiqué signe par signe, cherché les définitions et tout refait au brouillon, puis remis en page avec mes styles : c'est impeccable. J'ai surtout étudié ta démarche pour répondre à une problématique. Je suis épatée, c'est clair, ordonné, logique... J'ai testé les 2 méthodes, GET et SESSIONS. Finalement, comme vous me conseillez tous les SESSIONS, c'est ce que je vais adopter maintenant que je comprends mieux le fonctionnement et qu'on peut les utiliser sur une seule et même page.
    Pour CinePhil : une 1ère inscription, un abandon et une réinscription. Mais je peux t'aider à trouver un gîte soit de silex soit pour tes vacances avec plaisir.
    En tous cas, un grand grand grand merci encore à tous 2, aujourd'hui j'ai vraiment progressé.
    Très bonne nuit,
    Evelyne

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

Discussions similaires

  1. Affichage ipconfig /displaydns page par page? windows7
    Par destructive.flame dans le forum Windows
    Réponses: 1
    Dernier message: 28/02/2014, 09h00
  2. Affichage page par page des résultats avec des pointillés pour les numeros de page
    Par lewhechris dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 27/10/2011, 13h15
  3. [MySQL] Affichage du résultat page par page (pagination)
    Par marcito dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 20/07/2007, 15h53
  4. [MySQL] afficher plusieurs enregistrements par page par page à la volée
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/03/2006, 13h22
  5. une balise HTMl pour affichage de la page sans barre de déf
    Par ghita269 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/01/2006, 02h01

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