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 :

pb syntaxe requêtes traitement formulaire avec pagination [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 pb syntaxe requêtes traitement formulaire avec pagination
    Bonsoir,
    J'ai un souci avec un script de traitement d'un formulaire de recherche (4 types de recherche possibles).
    Tout marchait bien pour récupérer les résultats des 2 1ers types (départements ou communes) : un grand merci à Jérôme Réaux pour son aide.
    Pour les 2 autres (étage ou roche), j'ai fait des if ... else. Et là : PAGE BLANCHE. C'est horripilant de ne pas avoir de message d'erreur.
    1° : y a t-il un moyen d'obtenir un message d'erreur pour le php comme pour le sql ?
    2° : quelqu'un aurait-il un peu de temps et la gentillesse de regarder mon code juste pour m'indiquer où se situe l'erreur.
    C'est difficile pour moi de faire cohabiter le traitement du formulaire, les sessions, l'affichage des résultats, les requêtes qui dépendent des POST... Je cale.
    Ci-dessous un extrait de mon script.
    Un grand merci pour votre aide et une très bonne soiré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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    <?php session_start(); // je démarre la session
    // ------------------------
     
    //Connexion à la base de données
    mysql_connect('localhost', 'root', 'root');
    mysql_select_db('xxxxx');
     
    // ------------------------
    // 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
    switch (($_SESSION["recherche"]["type"])) {
    	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($_SESSION['recherche']['mot'])."%' "; 
    	break;
    	case 'nomCommune':
    		// [......]
    		$clauseWhere = " WHERE nomCommune LIKE '%".mysql_real_escape_string($_SESSION['recherche']['mot'])."%' ";
    	break;
    	case 'natureRoche':
    		// [......]
    		$clauseWhere = " WHERE natureRoche LIKE '%".mysql_real_escape_string($_SESSION['recherche']['mot'])."%' ";
    	break;
    	case 'nomEtage':
    		// [......]
    		$clauseWhere = " WHERE nomEtage LIKE '%".mysql_real_escape_string($_SESSION['recherche']['mot'])."%' ";                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
    	break;
    	default:
    		$clauseWhere = ""; // requête à faire par défaut
    }
     
    // ------------------------
    // count pour Departement ou Commune
    // Nombre total de résultats
    if ($_SESSION['recherche']['mot'] = 'nomDepartement' or 'nomCommune');
    {
    	$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.
    }
    //count pour Etage	
    	else ($_SESSION['recherche']['mot'] = 'nomEtage');
    	{
    	$retour_total_query = 
    		"SELECT count(ID_gite) AS total FROM GITE g
    		JOIN AS_GITE_ETAGE age ON g.ID_gite = age.GITE_ID_gite
    		JOIN ETAGE e ON age.ETAGE_ID_etage = e.ID_etage
    		".
    		$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.
    	}
     
     
     
    // ------------------------
    //requête pour Département ou Commune
    //La requête sql pour récupérer les messages de la page actuelle.
    if ($_SESSION['recherche']['mot'] = 'nomDepartement' or 'nomCommune');
    {
    	mysql_query("SET NAMES 'utf8'");
    	$retour_messages_query = 
    		"SELECT g.numGite
    		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 
    		ASC LIMIT ".$premiereEntree.", ".$messagesParPage." "; // Pagination*/
    	$retour_messages = mysql_query($retour_messages_query);
    }
    //requête pour Etage
    	else ($_SESSION['recherche']['mot'] = 'nomEtage');
    {
    	mysql_query("SET NAMES 'utf8'");
    	$retour_messages_query = 
    		"SELECT g.numGite 
    		FROM GITE g
    		JOIN AS_GITE_ETAGE age ON g.ID_gite = age.GITE_ID_gite
    		JOIN ETAGE e ON age.ETAGE_ID_etage = e.ID_etage
    	 	".
    		$clauseWhere. // Critères de recherche
    		" ORDER BY numGite 
    		ASC LIMIT ".$premiereEntree.", ".$messagesParPage." "; // Pagination...
    Affichage HTML...

  2. #2
    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,
    Désolée, j'ai posté trop vite. J'ai trouvé : j'ai tout inclus dans la commande switch et c'est OK : une requête avec count pour récupérer le nombre d'enregistrements et une requête SELECT pour récupérer les numéros concernés avec un affichage de x par page.
    Il ne me manque que l'affichage de la liste de mes numéros mais je vais trouver.
    Je mets en résolu et vous souhaite à toutes, tous une bonne soirée.
    Evelyne31

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Pour faire de la pagination, et du coté de MySQL il y a un couple de commande qui peu aider à réaliser ça.
    C'est ceci :
    SQL_CALC_FOUND_ROWS suivi de FOUND_ROWS
    Les 2 sont indissociables.

    Le principe est simple, c'est de rajouter la 1ère commande dans la requête, genre :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SQL_CALC_FOUND_ROWS truc, machin, chouette
    FROM table
    WHERE truc LIKE %mot clé%
    LIMIT 20, 30
    Puis juste après lancer la seconde commande et uniquement :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT FOUND_ROWS()

    L'idée est du fait de mettre la 1ère commande dans la 1ère requête MySQL va récupérer et mémoriser le nombre réel du nombre de résultat, cependant on obtiendra de suite les données voulus.
    Ensuite, c'est en exécutant la seconde requête (seconde commande) ou on va obtenir ce nombre total réel de résultat (ou lignes).


    L'approche est un peu différente de celle que tu fais (qui est certes assez classique), car on obtient pas de suite dès la 1ère requête le nombre total mais dans un second temps lors de l'exécution de la 2ème requête.
    Mais comme elles sont exécutée l'une après l'autre, ce n'est pas un problème.

    Le principal avantages c'est que cela évite d'exécuter 2 fois sensiblement la même requête par rapport à la manière classique, mais juste 1 fois.

    La manière classique on fait :
    1/ Une 1ère requête avec le COUNT() (juste le COUNT) contenant toutes les clauses (ou conditions) pour récupérer le nombre total de résultat.
    2/ Une seconde requête cette fois sans le COUNT() mais avec la liste des données à récupérer avec les même clauses (ou conditions).


    Si cela peu t'aider
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  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
    Bonsoir RunCodePhp,
    Merci pour cette réponse détaillée. C'est toujours intéressant d'avoir plusieurs méthodes. Je décortique et teste la tienne demain.
    Très bonne soirée,
    Evelyne

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

Discussions similaires

  1. Formulaire avec pagination
    Par horlain dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 11/02/2014, 17h12
  2. Memoriser l'etat des cases a cocher d'un formulaire avec pagination
    Par belaggoun2000 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 26/02/2010, 15h23
  3. Problème Syntaxe requête SQL LIKE avec ACCESS
    Par Arnofish dans le forum Accès aux données
    Réponses: 3
    Dernier message: 22/12/2007, 11h57
  4. Affichage d'un résultat selon requête dans formulaire avec date
    Par SMPGSARL dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 06/07/2006, 14h52
  5. [Syntaxe] Requêtes avec null
    Par Procto dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/07/2005, 16h10

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