par
sadeq » 26 sept. 2006, 11:25
Pas d'accord
Truc, on ne peut concidérer le même paramètre à la fois comme un tableau et une chaîne.
Ceci est source d'erreur dans les 2 lignes contradictoires :
$categorie = isset($_POST['categorie']) ? $_POST['categorie'] : ""; //????
$clauses_cat = (isset($_GET['categorie']) ? urldecode($_GET['categorie']) : null; // récupération de la variable clauses_cat qui est une chaine de caractères passé dans l'url
D'après la lecture du code qui suit ces 2 lignes, on peut comprendre que "categorie" est une source de type tableau dans l'esprit de l'auteur car il dit que ça représente des cases cochées dans un form (peut être de recherche)
A mon avis, l'auteur doit utiliser le nom "clauses_cat" dans le HREF de navigation page/page au lieu du nom du paramètre "categorie" car si il ya navigation page/page les critères de recherche ne doivent pas changer.
Donc : le tableau "categorie" et la chaine "clauses_cat" sont deux éléments exclusifs mais la chaine "clauses_cat" dépond du tableau "categorie".
Le scénario logique est le suivant:
1° cas:
- Critères de recherches saisis
- ---> en autres : tableau categorie reçu
- ---> chaine "clauses_cat" déterminée pour la requête
- ---> exécution et affichage de la requête (avec index de navigation page/page)
2° cas:
- Navigation
- ---> en autres : chaine clauses_cat reçue
- ---> exécution et affichage de la requête (avec index de navigation page/page)
L'algorithme qui détermine cette dépondance fonctionnelle est le suivant :
- 1. Si pas de chaine "clauses_cat"
- 1.1. Alors: Si tableau "categorie"
- 1.1.1. Alors: créer la chaine "clauses_cat" à partir du tableau "categorie"
1.1.2. Sinon: la chaine "clauses_cat" <- vide;
1.2. Sinon: la chaine "clauses_cat" existe déjà => la garder telquel (rien à faire)
2. Continuer le traitement ...
Ce qui peut être écrit en php comme ça:
//Paramètres reçus
$categorie = isset($_POST['categorie']) ? $_POST['categorie'] : ""; //les catégories cochées
$clauses_cat = (isset($_GET['clauses_cat']) ? urldecode($_GET['clauses_cat']) : null; //la chaine clause_cat
//Déterminer les catégories choisies: source (clausecat ou tableau categorie)
$clauses_cat = !$clauses_cat?($categorie?"categorie = '" . implode("' OR categorie = '", $categorie) . "'": "categorie Like '%'" ):$clauses_cat;
Ce code peut remplacer dans ton ton programme le bloc suivant:
$categorie = isset($_POST['categorie']) ? $_POST['categorie'] : "";
$clauses_cat = (isset($_GET['categorie']) ? urldecode($_GET['categorie']) : null; // récupération de la variable clauses_cat qui est une chaine de caractères passé dans l'url
if(!isset($clauses_cat)) // si $clauses_cat est définie à ce niveau cela signifie que tu es passé par un lien donc inutile d'effectuer cette opération
{
/* On compte le nombre de catégories cochées */
$nb_cat = count($categorie);
/* On crée un tableau pour stocker les clauses */
$tableau_clauses = array();
for($i = 0; $i < $nb_cat; $i++)
{
/* On ajoute la clause dans le tableau */
$tableau_clauses[] = "categorie = '". $categorie[$i] ."'";
}
/* On va créer une chaine avec toutes les clauses stockées séparées entre elles par l'opérateur OR */
$clauses_cat = implode(" OR ", $tableau_clauses);
/* On ajoute la chaîne créée à la requête */
}
Et exige la modification des lignes qui affichent le HREF de navigation selon ce qui suit:
echo "<a href=\"".$PHP_SELF."?page=".$i."&pays=".$pays."&clauses_cat=".$clauses_cat......
Pas d'accord [b]Truc[/b], on ne peut concidérer le même paramètre à la fois comme un tableau et une chaîne.
Ceci est source d'erreur dans les 2 lignes contradictoires :
[php]$categorie = isset($_POST['categorie']) ? $_POST['categorie'] : ""; //????
$clauses_cat = (isset($_GET['categorie']) ? urldecode($_GET['categorie']) : null; // récupération de la variable clauses_cat qui est une chaine de caractères passé dans l'url
[/php]
D'après la lecture du code qui suit ces 2 lignes, on peut comprendre que "categorie" est une source de type tableau dans l'esprit de l'auteur car il dit que ça représente des cases cochées dans un form (peut être de recherche)
A mon avis, l'auteur doit utiliser le nom "clauses_cat" dans le HREF de navigation page/page au lieu du nom du paramètre "categorie" car si il ya navigation page/page les critères de recherche ne doivent pas changer.
Donc : le tableau "categorie" et la chaine "clauses_cat" sont deux éléments exclusifs mais la chaine "clauses_cat" dépond du tableau "categorie".
Le scénario logique est le suivant:
[b]1° cas:[/b]
[list]Critères de recherches saisis
[list]---> en autres : tableau categorie reçu
[list]---> chaine "clauses_cat" déterminée pour la requête
[list]---> exécution et affichage de la requête (avec index de navigation page/page)[/list][/list][/list][/list]
[b]
2° cas:[/b]
[list]Navigation
[list]---> en autres : chaine clauses_cat reçue
[list]---> exécution et affichage de la requête (avec index de navigation page/page)[/list][/list]
[/list]
L'algorithme qui détermine cette dépondance fonctionnelle est le suivant :
[list]1. Si pas de chaine "clauses_cat"
[list]1.1. Alors: Si tableau "categorie"
[list]1.1.1. Alors: créer la chaine "clauses_cat" à partir du tableau "categorie"
1.1.2. Sinon: la chaine "clauses_cat" <- vide;[/list]
1.2. Sinon: la chaine "clauses_cat" existe déjà => la garder telquel (rien à faire)[/list]
2. Continuer le traitement ...
[/list]
Ce qui peut être écrit en php comme ça:
[php]
//Paramètres reçus
$categorie = isset($_POST['categorie']) ? $_POST['categorie'] : ""; //les catégories cochées
$clauses_cat = (isset($_GET['clauses_cat']) ? urldecode($_GET['clauses_cat']) : null; //la chaine clause_cat
//Déterminer les catégories choisies: source (clausecat ou tableau categorie)
$clauses_cat = !$clauses_cat?($categorie?"categorie = '" . implode("' OR categorie = '", $categorie) . "'": "categorie Like '%'" ):$clauses_cat;
[/php]
Ce code peut remplacer dans ton ton programme le bloc suivant:
[php]$categorie = isset($_POST['categorie']) ? $_POST['categorie'] : "";
$clauses_cat = (isset($_GET['categorie']) ? urldecode($_GET['categorie']) : null; // récupération de la variable clauses_cat qui est une chaine de caractères passé dans l'url
if(!isset($clauses_cat)) // si $clauses_cat est définie à ce niveau cela signifie que tu es passé par un lien donc inutile d'effectuer cette opération
{
/* On compte le nombre de catégories cochées */
$nb_cat = count($categorie);
/* On crée un tableau pour stocker les clauses */
$tableau_clauses = array();
for($i = 0; $i < $nb_cat; $i++)
{
/* On ajoute la clause dans le tableau */
$tableau_clauses[] = "categorie = '". $categorie[$i] ."'";
}
/* On va créer une chaine avec toutes les clauses stockées séparées entre elles par l'opérateur OR */
$clauses_cat = implode(" OR ", $tableau_clauses);
/* On ajoute la chaîne créée à la requête */
} [/php]
Et exige la modification des lignes qui affichent le HREF de navigation selon ce qui suit:
[php]
echo "<a href=\"".$PHP_SELF."?page=".$i."&pays=".$pays."&clauses_cat=".$clauses_cat......
[/php]