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

Contribuez / Téléchargez Sources et Outils PHP Discussion :

[source] PRINCIPE de RECHERCHE MULTI-CRITERES (PHP-SQL-PDO)


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    15 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 15 609
    Points : 31 888
    Points
    31 888
    Par défaut [source] PRINCIPE de RECHERCHE MULTI-CRITERES (PHP-SQL-PDO)
    Bonjour,
    Toujours pour m'éviter des recherches fastidieuses dans mes anciennes discussions...

    PRINCIPE de RECHERCHE MULTI-CRITERES (PHP-SQL-PDO) : démonstration par l'exemple

    0- Le Principe :

    On va ici voir comment traiter différents TYPES de critères de recherche.
    • Exemple 1 : SELECT (UN SEUL choix possible)
    • Exemple 2 : INPUT TEXTE (PLUSIEURS MOTS possibles, séparés par un espace)
    • Exemple 3 : INPUT RADIO (UN SEUL choix possible)
    • Exemple 4 : INPUT CHECKBOX (PLUSIEURS choix possibles)

    On va enregistrer les critères de recherche dans une SESSION : $_SESSION['recherche'].
    • Ça permet (notamment) de quitter la page, et d'y revenir plus tard, en conservant les critères de recherche précédents.

    Pour la préparation de la requête, on emploie ici la méthode avec "placeholders/paramètres nommés" et array de paramètres à passer à execute() (voir : Exemple #2)

    La clause SQL "WHERE ... AND ..." sera construite "à la volée", en fonction des données reçues du formulaire (de recherche/tri,...).
    On va d'abord :
    • "récolter" les bouts de requête dans un array $sql_where,
    • et les paramètres dans un array $sql_param


    IMPORTANT :
    • TOUT le code de traitement PHP peut/doit se mettre EN DÉBUT de fichier, AVANT le code HTML (donc, avant le formulaire HTML).
    • SEUL l'AFFICHAGE se fera au sein du code HTML


    1- Le formulaire

    Code html : 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
    <form method="post" action="">
    <fieldset>
    <?php   // Exemple 1 : SELECT - UN SEUL CHOIX ?>
    	<p>
    		<label for="critere_select">Critère 1 :</label>
    		<select id="critere_select" name="critere_select">
    			<option value="-99">...</option><?php // choix "par défaut" : -99 (ou '', ou 0 : comme vous préférez) ?>
    			<option value="1">choix 1</option>
    			<option value="2">choix 2</option>
    			<option value="3">choix 3</option>
    		</select>
    	</p>
    <?php   // Exemple 2 : INPUT TEXTE - PLUSIEURS MOTS possibles ?>
    	<p>
    		<label for="critere_input">Critère 2 :</label>
    		<input id="critere_input" type="text" name="critere_input" value="" />
    	</p>
    <?php   // Exemple 3 : INPUT RADIO - UN SEUL CHOIX ?>
    	<p>
    		<label>Critère 3 :</label>
    		<label><input type="radio" name="critere_radio" value="0" checked="checked" /> Non </label><?php // radio : il faut impérativement indiquer un choix "par défaut" ?>
    		<label><input type="radio" name="critere_radio" value="1" /> Oui </label>
    		<label><input type="radio" name="critere_radio" value="2" /> Toujours </label>
    		<label><input type="radio" name="critere_radio" value="33" /> Oui & Toujours </label>
    	</p>
    <?php   // Exemple 4 : INPUT CHECKBOX - ZERO à PLUSIEURS CHOIX possibles ?>
    	<p>
    		<label>Critère 4 :</label>
    		<label><input type="checkbox" name="critere_checkbox[]" value="A" /> check A </label><?php // A NOTER : les crochets [] ?>
    		<label><input type="checkbox" name="critere_checkbox[]" value="B" /> check B </label>
    		<label><input type="checkbox" name="critere_checkbox[]" value="C" /> check C </label>
    	</p>
    	<p>
    		<button type="submit" name="send_form">Valider</button>
    	</p>
    </fieldset>
    </form>

    2- Récupération / traitement des critères de recherche

    Initialisation :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php if( empty(session_id()) ){ session_start(); } // démarrage de SESSION
    // -------------
    // RECHERCHE
    if( empty($_SESSION['recherche']) ){ $_SESSION['recherche'] = []; } // SESSION : array dans lequel seront enregistrés les critères
    // -------------
    // Initialisation
    $sql_where = [];	// array qui contiendra les bouts de code SQL, à partir des critères de recherche
    $sql_param = [];	// array des paramètres à transmettre à execute(...)
    $clause_WHERE = ''; 	// clause " WHERE... AND...", qui sera construite "à la volée"

    Exemple 1 : SELECT - UN SEUL CHOIX :
    • Le "bout de requête" est de la forme : " (colonne1 = xxxxx) ".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // -------------
    // Exemple 1 : SELECT (UN SEUL choix possible)
    if( !isset($_SESSION['recherche']['critere1']) ){	$_SESSION['recherche']['critere1'] = '-99'; } // valeur par défaut : -99 (ou '', ou 0 : comme vous préférez)
    if( isset($_POST['critere_select']) ){				$_SESSION['recherche']['critere1'] = $_POST['critere_select']; }
    switch( $_SESSION['recherche']['critere1'] ){
    	case -99:	// Tous
    		// $sql_where : (rien)
    		break;
    	default:
    		$sql_where[] = " (colonne1 = :critere1) ";
    		$sql_param[':critere1'] = $_SESSION['recherche']['critere1'];
    }
    // -------------
    Exemple 2 : INPUT TEXTE - PLUSIEURS MOTS possibles :
    • ici, il faut d'abord décomposer la donnée reçue en array des mots
    • Le "bout de requête" est de la forme : " (colonne2 LIKE '%mot1%' OR colonne2 LIKE '%mot2%' OR ...) ".

    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
    // -------------
    // Exemple 2 : INPUT TEXTE (PLUSIEURS MOTS possibles)
    if( !isset($_SESSION['recherche']['critere2']) ){	$_SESSION['recherche']['critere2'] = ''; } // valeur par défaut : ''
    if( isset($_POST['critere_input']) ){				$_SESSION['recherche']['critere2'] = $_POST['critere_input']; }
    switch( $_SESSION['recherche']['critere2'] ){
    	case '':
    		// $sql_where : (rien)
    		break;
    	default:
    		// on décompose en mots
    		$mots = explode(' ',$_SESSION['recherche']['critere2']);
    		if( !empty($mots) )
    		{ 	
    			$sql_OR = [];
    			$idx = 0;
    			foreach( $mots as $mot )
    			{
    				$sql_OR[] = " colonne2 LIKE :critere2".$idx." ";
    				$sql_param[':critere2'.$idx] = '%'.$mot.'%'; // syntaxe avec LIKE
    				$idx++;
    			}
    			$sql_where[] = " (".implode(" OR ", $sql_OR).") ";  // de la forme : " (colonne2 LIKE '%mot1%' OR colonne2 LIKE '%mot2%' OR ...) "
    		}
    		// ------
    }
    // -------------
    Exemple 3 : INPUT RADIO - UN SEUL CHOIX :
    Dans cet exemple :
    • la colonne peut prendre les valeurs 0, 1 ou 2. La valeur "33" ("Oui & Toujours") correspond à "1 OR 2"
    • Même principe que pour le SELECT
    • Le "bout de requête" est de la forme : " (colonne1 = xx) " ou " (colonne1 = xx OR colonne1 = xx) ".

    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
    // -------------
    // Exemple 3 : INPUT RADIO (UN SEUL choix possible)
    if( !isset($_SESSION['recherche']['critere3']) ){	$_SESSION['recherche']['critere3'] = 0; } // valeur par défaut : 0
    if( isset($_POST['critere_radio']) ){				$_SESSION['recherche']['critere3'] = $_POST['critere_radio']; }
    switch( $_SESSION['recherche']['critere3'] ){
    	case 0:	// Non
    		// $sql_where : (rien)
    		break;
    	case 33:	// "Oui & Toujours"
    		$sql_where[] = " (colonne3 = 1 OR colonne3 = 2) ";
    		break;
    	default:
    		$sql_where[] = " colonne3 = :critere3 ";
    		$sql_param[':critere3'] = $_SESSION['recherche']['critere3'];
    }
    // -------------

    Exemple 4 : INPUT CHECKBOX - ZERO à PLUSIEURS CHOIX possibles :
    • Attention, cas particulier des checkbox : quand AUCUNE case n'est cochée, aucune donnée n'est envoyée : le $_POST['critere_checkbox'] n'existe pas !

    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
    // -------------
    // Exemple 4 : INPUT CHECKBOX - ZERO à PLUSIEURS CHOIX possibles
    if( !isset($_SESSION['recherche']['critere4']) ){	$_SESSION['recherche']['critere4'] = []; } // valeur par défaut : [] (array vide)
    if( isset($_POST['critere_checkbox']) ){				$_SESSION['recherche']['critere4'] = $_POST['critere_checkbox']; } // array
    if( !empty($_SESSION['recherche']['critere4']) ){
    	$sql_IN = [];
    	$idx = 0;
    	foreach( $_SESSION['recherche']['critere4'] as $choix )
    	{
    		$sql_IN[] = " :critere4".$idx." ";
    		$sql_param[':critere4'.$idx] = $choix;
    		$idx++;
    	}
    	$sql_where[] = " (colonne3 IN(".implode(",", $sql_IN).")) ";  // de la forme : " (colonne3 IN('choix1','choix2',...) "
    }
    // -------------
    • isset() : on utilisera isset() si la valeur reçue peut être vide, ou 0
    • !empty() : si la valeur reçue doit être renseignée (non vide), mais pas 0


    Construction de la clause "WHERE ... AND ..." :

    On va ensuite concaténer ces bouts de requête pour former la clause SQL "WHERE ... AND ...".

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // -------------
    // On construit la chaine :  "WHERE .... AND .... AND .... "
    $clause_WHERE = ( !empty($sql_where) )? " WHERE " . implode(" AND ", $sql_where) : "";

    3- RÉSULTATS de la recherche : la requête SQL (préparation - exécution)

    SANS Pagination PHP :
    • on peut envisager une pagination JS, avec DataTables, par exemple


    Code php : 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
    <?php
    // -------------
    // Clause FROM (COMMUNE aux 2 requêtes)
    $clause_FROM = " FROM ..................... ";
    // JOINTURES (éventuelles)
    $clause_FROM .= " INNER JOIN ... ON ... ";
    // -------------
    // RESULTAT DE LA RECHERCHE : TOUS les résultats
    // requete : TOUS les résultats
    $rech_query = "SELECT ".
    	" ................. " .	// liste des colonnes à afficher (éviter *)
    	$clause_FROM
    	$clause_WHERE .
    	" ORDER BY ............" .	// en cas de tri (non traité ici -> mais même principe)
    	";";
    $sql_result = $pdo->prepare( $rech_query );
    $sql_result->execute( $sql_param );
    // -------------

    AVEC Pagination PHP :

    On va faire 2 requêtes :
    • On doit d'abord compter le nombre total de résultat
    • Afficher uniquement ceux de la "page en cours", en fonction du "nombre de résultats par page"

    A NOTER : les clauses et sont LES MÊMES dans ces 2 requêtes !

    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
    <?php
    // -------------
    // Clause FROM (COMMUNE aux 2 requêtes)
    $clause_FROM = " FROM ..................... ";
    // JOINTURES (éventuelles)
    $clause_FROM .= " INNER JOIN ... ON ... ";
    // -------------
    // PAGINATION
    // -------------
    // Nombre par page
    $_SESSION['recherche']['nbreParPage'] = 10; // A ADAPTER ! (variante : on peut utiliser un <select> ou <input radio>, dans le formulaire, pour modifier cette valeur)
    // -------------
    // RESULTAT DE LA RECHERCHE : NOMBRE TOTAL de résultats
    $rechTotal_query = "SELECT COUNT(*) AS nbre_total ".
    	$clause_FROM .
    	$clause_WHERE .
    	";";
    $rechTotal_result = $pdo->prepare( $rechTotal_query );
    $rechTotal_result->execute( $sql_param );
    $rechTotal_row = $rechTotal_result->fetch();
    $nombreDePages = $rechTotal_row['nbre_total'];
    // -------------
    // nombre de pages à créer
    $nbreTotalPages = ceil($nombreDePages / $_SESSION['recherche']['nbreParPage']);
    // -------------
    // Numéro de page
    if( !empty($_GET['numPage']) ){
    	$_SESSION['recherche']['numPage'] 	= intval($_GET['numPage']);
    } else {
    	$_SESSION['recherche']['numPage'] 	= 1; 	// page 1 (par défaut)
    }
    if( $_SESSION['recherche']['numPage'] > $nombreDePages ){ $_SESSION['recherche']['numPage'] = $nombreDePages; }
     
    // -------------
    // clause LIMIT
    $clause_LIMIT = " LIMIT :numPageDebut, :nbreParPage ";
    $sql_param[':numPageDebut'] = $numPageDebut;
    $sql_param[':nbreParPage'] = $_SESSION['recherche']['nbreParPage'];
    // -------------
    // RESULTAT DE LA RECHERCHE : AFFICHAGE des résultats de la page
    $rech_query = "SELECT ".
    	" ................. " .	// liste des colonnes à afficher (éviter *)
    	$clause_FROM .
    	$clause_WHERE .
    	" ORDER BY ............" .	// en cas de tri (non traité ici -> mais même principe)
    	" LIMIT ............" . 	// en cas de pagination (non traité ici -> voir "système de pagination PHP")
    	";";
    $rech_result = $pdo->prepare( $rech_query );
    $rech_result->execute( $sql_param );
    // -------------
    4- AFFICHAGE de la recherche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // -------------
    $rech_rowAll = $rech_result->fetchAll();
    foreach( $rech_rowAll as $row )
    {
    	// Affichage de la ligne
    	var_dump( $row );
    }
    5- LIENS de Pagination (avec Pagination PHP) :
    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
    <?php
    // PAGINATION : Liens
    	echo '<nav class="pagination">';
    	for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
    	{
    		 if($i==$_SESSION['recherche']['numPage']) //Si il s'agit de la page actuelle...
    		 {
    			 echo ' [ '.$i.' ] '; 
    		 }	
    		 else //Sinon...
    		 {
    			  echo ' <a href="?page='.$i.'">'.$i.'</a> ';
    		 }
    	}
    	echo '</nav>';
    ?>




    N.B. MERCI de me faire part de vos remarques, demandes d'explications,..... afin que j'améliore cette source.
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    juin 2008
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : juin 2008
    Messages : 1 825
    Points : 3 020
    Points
    3 020
    Billets dans le blog
    7
    Par défaut
    Moi, je vais faire l'inverse, je vais commenter (et défactoriser) le code puisqu'il s'adresse plutôt à des débutants en PHP.

    StrangerThings, si tu repasses par là, pose les ici tes questions.
    Je subodore que cette partie du code te semble un peu obscure.
    Il y a 2 choses à connaître...
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $_SESSION['recherche']['critere1'] = ( isset($_POST['critere1']) )? trim($_POST['critere1']) : $_SESSION['recherche']['critere1'];
    switch( $_SESSION['recherche']['critere1'] ){
    	case -99:	// Tous
    	case 0:
    		// $sql_where : (rien)
    		break;
    	default:
    		$sql_where[] = " critere1 = :critere1 ";
    		$sql_param[':critere1'] = $_SESSION['recherche']['critere1'];
    }
    Ce qu'est une condition ternaire (pas facile) qu'on peut exprimer par des if plus simple.
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if ( isset($_POST['critere1']) ){
      $_SESSION['recherche']['critere1'] = trim($_POST['critere1']);
    }
    else{
      $_SESSION['recherche']['critere1']=$_SESSION['recherche']['critere1'];
    }

    2nde chose, le mot clé switch, qui peut aussi s'exprimer par toute une série de elseif consécutifs :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if( $_SESSION['recherche']['critere1'] == -99 || $_SESSION['recherche']['critere1'] == 0 ){
      //on ne fait rien
    }
    else{
      $sql_where[] = " critere1 = :critere1 ";
    	$sql_param[':critere1'] = $_SESSION['recherche']['critere1'];
    }
    //et ainsi on prépare une belle requête PDO avec paramètres nommés comme Jreaux les aime.

    exemple 1 ci-dessous :
    https://www.php.net/manual/fr/pdo.prepare.php
    Mes billets de blog : un billet = une problématique précise
    It's easier to be friends with lots of people online than one person in person!

  3. #3
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    15 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 15 609
    Points : 31 888
    Points
    31 888
    Par défaut
    Merci Dendrite,

    Tu as bien compris que je m'adresse en 1er lieu aux débutants.

    Je pars quand même du PRINCIPE qu'ils sont CAPABLES de FAIRE une RECHERCHE tout seul !

    • "PHP condition ternaire" (celle-là, c'est vrai, il fallait connaitre le terme)
    • "PHP switch"
    • "PDO prepare"
    • "PDO execute"
    • "........."


    N.B. Cela dit, je mettrais des liens dans mon 1er message, lorsque j'en étofferai le contenu.
    [EDIT] Corrigé
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  4. #4
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 906
    Points : 2 989
    Points
    2 989
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Je pars quand même du PRINCIPE qu'ils sont CAPABLES de FAIRE une RECHERCHE tout seul !
    Tu nous surestimes
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  5. #5
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    15 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 15 609
    Points : 31 888
    Points
    31 888
    Par défaut
    Merci rawsrc.
    [...]

    Comme Dendrite, je m'inscrit plutôt dans une démarche pédagogique, à l'attention des débutants (grands et petits !), et des amateurs éclairés.
    Je suis loin de ton niveau d'expertise.

    Néanmoins, sois sûr que je tiendrais compte de tes remarques constructives.
    La preuve, c'est toi qui m'a initié à cette "astuce" (en... août 2011 ! dans cette discussion !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $clause_WHERE = ( !empty($sql_where) )? " WHERE " . implode(" AND ", $sql_where) : "";
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2019
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2019
    Messages : 79
    Points : 13
    Points
    13
    Par défaut
    Merci énormément Dendrite !

    J'ai bien compris les différentes étapes du code malgré toujours des notions incomprises mais normal étant donné mon niveau actuel notamment les valeurs INT -99 etc ?? Pourquoi pas 4, pourquoi pas 2 ?.
    Pareil pour la fonction trim()? J'ai regarder quand même rapidement sur internet mais je n'ai pas tout compris :/
    J'ai essayer de reprendre le code en modifiant, n'ayant pas vu ton message avant, j'ai déjà poster sur le sujet précédent !

  7. #7
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    5 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 5 364
    Points : 14 074
    Points
    14 074
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    ...La preuve, c'est toi qui m'a initié à cette "astuce" (en... août 2011 ! dans cette discussion !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $clause_WHERE = ( !empty($sql_where) )? " WHERE " . implode(" AND ", $sql_where) : "";
    Sans blague !?! Tu te souviens ou tu as noté dans quelle discussion et à quel date, j'ai procédé ainsi ?
    # Dans la Création, tout est permis mais tout n'est pas utile...

  8. #8
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    15 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 15 609
    Points : 31 888
    Points
    31 888
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Sans blague !?! Tu te souviens ou tu as noté dans quelle discussion et à quel date, j'ai procédé ainsi ?
    Crois-moi ou pas, je me souvenais que cette astuce venait de toi (car je l'ai ensuite appliquée dans tous mes scripts de recherche !).
    J'ai juste fait une "recherche avancée", et suis retombé (oh surprise ! ) sur ladite discussion !
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  9. #9
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    15 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 15 609
    Points : 31 888
    Points
    31 888
    Par défaut
    BOnjour,

    J'ai mis à jour mon 1er message.
    J'ai aussi supprimé ou "nettoyé" les autres messages, suite à ma correction, afin de rendre le fil plus clair.

    MERCI de me dire si c'est plus clair et complet.
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  10. #10
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    15 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 15 609
    Points : 31 888
    Points
    31 888
    Par défaut
    N.B. J'ai enlevé les "conditions ternaires"... qui faisaient polémique...
    Et par souci de simplification du code et de compréhension.
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  11. #11
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    15 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 15 609
    Points : 31 888
    Points
    31 888
    Par défaut
    Bonjour,

    j'ai mis à jour et largement étoffé mon premier message.

    Merci pour vos commentaires.
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

Discussions similaires

  1. [2008R2] Recherche multi-criteres(c# et sql server)
    Par mouad70 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/10/2013, 10h00
  2. Recherche multi-criteres SQL
    Par Djclo dans le forum ASP.NET
    Réponses: 7
    Dernier message: 22/10/2008, 12h32
  3. sql et recherche multi criteres
    Par nana 69 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/08/2008, 00h34
  4. gui pour recherche multi critere
    Par komando dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 02/12/2005, 19h08
  5. Réponses: 14
    Dernier message: 15/06/2005, 13h14

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