PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 29-03-2010 13:35:06

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Afficher par catégorie

J'ai comme idée que c'est de même que ça se passe pour afficher seulement les articles de cette catégorie :

?>
<form>
  <select name="lechamp" onchange="this.options[this.selectedIndex].value,">
    <option selected value="<?php echo $lechamp="noart"; ?>">No Article</option>
    <option selected value="<?php echo $lechamp="nocat"; ?>">Catégorie</option>
  </select>
</form>

<?php

$req = mysql_query("SELECT * FROM produits ORDER BY $lechamp ASC LIMIT  $limit_start,$pagination",$db) or die(mysql_error());

Je pense que je suis dans l'erreur.


Salutations smile

Hors ligne

#2 29-03-2010 14:02:30

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Afficher par catégorie

Déjà :

<?php echo $lechamp="nocat"; ?>

C'est pas bon ça, dans ton cas voici ce qu'il fallait si $lechamp est le tableau retourné par ta requête :

<?php echo $lechamp['nocat']; ?>

Cependant je n'ai pas compris ta question.
Veux-tu lister les catégories sans leurs articles ?
Veux-tu lister les catégories avec leurs articles rangés en dessous ?

Hors ligne

#3 29-03-2010 14:05:43

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Afficher par catégorie

J'ai refais en fonction du tuto d'ici :


$db = mysql_connect('localhost', 'root', 'root') or die(mysql_error());
mysql_select_db('cristauxphil', $db) or die(mysql_error());

$select = mysql_query ("SELECT COUNT(*) FROM produits");
$row = mysql_fetch_row($select);

$req = mysql_query("SELECT * FROM produits ORDER BY noart ASC LIMIT $limit_start,$pagination",$db) or die(mysql_error());

//***

$rowcat = mysql_fetch_row($select);
if ( !$rowcat[0] ) {
echo '<option>Aucun genre</option>';
} else {
while ( $rowcat = mysql_fetch_array($db)) {
echo '<option value="'.$rowcat['nocat'].'">'.$rowcat['nocat'].'</option>';
}
}

je pense que je n'y suis pas.

Mon but est d'afficher que les champs qui contiennent seulement mes catégories..

Dernière modification par dan4 (29-03-2010 14:07:58)


Salutations smile

Hors ligne

#4 29-03-2010 18:01:36

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Afficher par catégorie

xTG a écrit :

Déjà :

<?php echo $lechamp="nocat"; ?>

C'est pas bon ça, dans ton cas voici ce qu'il fallait si $lechamp est le tableau retourné par ta requête :

<?php echo $lechamp['nocat']; ?>

Cependant je n'ai pas compris ta question.
Veux-tu lister les catégories sans leurs articles ?
Veux-tu lister les catégories avec leurs articles rangés en dessous ?

Faire ressortir les catégorie.

sélectionner que les pommes et ne voir que les pommes.


Salutations smile

Hors ligne

#5 29-03-2010 19:04:59

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Afficher par catégorie

J'ai tenté ceci :

//***

$wherenocat = "WHERE nocat ='Amétis'";

$req = mysql_query("SELECT * FROM produits $wherenocat ORDER BY noart ASC LIMIT $limit_start,$pagination",$db) or die(mysql_error());
$rowcat = mysql_fetch_row($select);

if ( !$rowcat[0] )
{
echo '<option>Aucun genre</option>';

}
else
{

while ( $rowcat = mysql_fetch_array($db)) {
echo '<option value="'.$wherenocat.'">'.$wherenocat.'</option>';
}

}
 
//***

Je suis bloqué rendu là.

Ce qu'il faut comme résultat :

Afficher toute la liste si je choisi par défaut "tout" ou bien si je choisi une catégorie, afficher la catégorie. cependant, il faut que lorsque j'affiche par page, que cela continue à afficher par page la catégorie choisie.


Salutations smile

Hors ligne

#6 30-03-2010 02:29:09

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Afficher par catégorie

Une nouvelle manière que je pensais mais qui ne fonctionne pas :


?>
<form>
<select size="1">
<option value="">Tous</option>
<option value="<?php echo $whereoption= "WHERE nocat = 'ametis'"; ?>">ametis</option>
<option value="<?php echo $whereoption= "WHERE nocat = 'zzz'"; ?>">zzz</option>
</select>
<input type="submit" value="Submit">
</form>



<?php
echo $whereoption;
/**/
$req = mysql_query("SELECT * FROM produits $whereoption ORDER BY noart ASC LIMIT $limit_start,$pagination",$db) or die(mysql_error());


Salutations smile

Hors ligne

#7 30-03-2010 08:00:08

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Afficher par catégorie

Ta dernière méthode est déjà mieux mais...
Si tu souhaites récupérer quelques chose pourquoi ne nommes-tu pas ton champs select ?
Et pourquoi ne remplis-tu pas ton champ form ?

Ensuite voilà la marche à suivre en plus propre pour récupérer la valeur :

<select name="nocat" size="1">
  <option value="nocat">Tous</option>
  <option value="ametis">Ametis</option>
</select>
if( !empty($_POST['nocat']) )
{
  if( $_POST['nocat'] == "nocat" ) // On sélectionne tout
    $sql = "SELECT id, nom FROM produits ORDER BY noart ASC LIMIT $limit_start,$pagination";
  else // Seulement une catégorie
    $sql = "SELECT id, nom FROM produits WHERE noart={$_POST['noart']} ORDER BY noart ASC LIMIT $limit_start,$pagination";
  $req = mysql_query($sql,$db) or die(mysql_error());
}

Hors ligne

#8 30-03-2010 15:24:23

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Afficher par catégorie

Merci de m'avoir répondu.

Malheureusement, ça ne fonctionne pas.

Notice: Undefined variable: req in E:\winfolders\EasyPHP5.2.10\www\produits\affiche_select.php  on line 135

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\winfolders\EasyPHP5.2.10\www\produits\affiche_select.php on line 135

Je vais essayer qqchose d'autre.

C'est comme si le script n'était pas capable de reconnaitre par défaut la requête. Sans la condition, la requête seule marche mais je ne peux pas faire un choix par catégorie. Même si ça marcherait, il ne conservera peut-etre pas la préférence qui est de trier par catégorie lorsque je cliquerait sur précédent et suivant.

Dernière modification par dan4 (30-03-2010 15:27:39)


Salutations smile

Hors ligne

#9 30-03-2010 15:30:51

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Afficher par catégorie

Laisses moi deviner. Ton mysql_fetch_array() se trouve en dehors de mon if non ? ^^
Dans ce cas PHP te dit la vérité, si on ne rentre pas dans la boucle (car on ne demande aucun affiche) la requête n'existe pas ce qui est normal, alors pouruoi vouloir afficher ?

Hors ligne

#10 30-03-2010 19:06:20

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Afficher par catégorie

Je pense que rendu ici, ça me prendrait un tutorial sur le sujet.
Etre en mesure de sélectionner selon une rubrique.
Je fais des recherche et je trouve rien qui soit simple.

"Ton mysql_fetch_array()" je pense bien que oui.. j'ai eu le temps de tester
pas mal d'autre chose entre-temps.

Dans nocat qui contient les rubriques, je dois pouvoir afficher par rubriques.
Ce n'est pas obligé d'utiliser FORM mais ça peut-être sous forme de menu qui serait
plus flexible.

A date, ce qui se passe, le contenu de la rubrique s'affiche dans le menu déroulant
mais je peux rien faire avec ce menu déroulant.

Je montre en image :

menuderoulant.jpg

La notion de WHERE, je la comprends bien. Mais lorsqu'on doit mettre une variable
en utilisant un formulaire, la, je suis perdu. Un bon tutorial serait pas un refus.

Dernière modification par dan4 (30-03-2010 19:08:10)


Salutations smile

Hors ligne

#11 31-03-2010 04:02:39

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Afficher par catégorie

Ce qui serait un peu ennuyeux serait que je duplique la page affiche.php pour chaque Catégorie et la seule chose qui changerait dans la page c'est

WHERE nocat = 'lacategorie'

ça serait plate de faire cela.

J'essais de voir pour des tutos et je trouve rien et dans les forums, pas grand chose la dessus.

Je mets mon code complet de AFFICHE.PHP au cas que quelqu'un aurait une idée qui marcherait.

<style>
<!--
table { width:508px; max-width:508px; margin-left:auto; margin-right:auto; }
th,td { border-width:1; border-color:rgb(102,102,255); border-style:dotted; text-align:center; white-space:no-wrap; }
th { background-color:#ffffdb; width:70px; }
p { font-size:x-small; font-family:Arial; font-stretch:narrower; font-weight:300; line-height:0.9em; margin-bottom:3px; margin-top:3px; }
a:focus { outline:0 }
h5 { position:relative; top:13px; }

/*thum*/
.htrans:hover{
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
}
.thumbnail{
position: relative;
z-index: 0;
}
.thumbnail:hover{
background-color: transparent;
z-index: 50;
}
.thumbnail span{
position: absolute;
background-color: lightyellow;
padding: 5px;
left: -1000px;
border: 1px dashed gray;
visibility: hidden;
color: black;
text-decoration: none;
}
.thumbnail span img{
border-width: 0;
padding: 2px;
}
.thumbnail:hover span{
visibility: visible;
top: -50px;
left: 60px;
}

/*pagination*/
.pagination {
    line-height:2em;
    text-align:center;
}
.pagination a,
.pagination span {
    padding:0.2em 0.5em;
}
.pagination a {
    border:1px solid #9AAFE5;
    color:#105CB6;
    text-decoration:none;
}
.pagination a:hover {
    border:1px solid #296BB5;
    color:#000031;
}
.pagination .prevnext {
    font-weight:bold;
}
.pagination span.disabled {
    border:1px solid #DDDDDD;
    color:#999999;
}
.pagination span.current {
    border:1px solid #2E6AB1;
    background-color:#2E6AB1;
    color:#ffffff;
    font-weight:bold;
}
-->
</style>

<?php

include 'functions.inc.php';

//Numero de page (1 par défaut)
if( isset($_GET['page']) && is_numeric($_GET['page']) )
    $page = $_GET['page'];
else
    $page = 1;
 
//saut de page
$pagination = 3;
 
$limit_start = ($page - 1) * $pagination;

$db = mysql_connect('localhost', 'root', 'root') or die(mysql_error());
mysql_select_db('cristauxphil', $db) or die(mysql_error());

$select = mysql_query ("SELECT COUNT(*) FROM produits");
$row = mysql_fetch_row($select);

$req = mysql_query("SELECT * FROM produits ORDER BY noart ASC LIMIT $limit_start,$pagination",$db) or die(mysql_error());

echo '<h5 style="text-align:center">Présentement, il y\'a ['.$row[0].'] items disponibles en ligne.</h5>';

echo '<table width="100%" align="center"><tr><td width="100%" align=center>';
echo '<table>
<tr>
<th><h5>Photo</h5></th>
<th><h5>Catégorie</h5></th>
<th><h5>Numéro</h5></th>
<th><h5>Article</h5></th>
<th><h5>Taille</h5></th>
<th><h5>Stock</h5></th>
<th><h5>Prix</h5></th>
</tr>';

while($data = mysql_fetch_array($req))
{
 
  if (file_exists('imgart/'.$data['image'])) {
 
  $source = "imgart/". $data['image'];

  $taillemax=50;

  $img = getimagesize($source);
  $x=$img[0];
  $y=$img[1];

  if ($x > $y)
  {
  $y=$y*(($taillemax)/$x);
  $x=$taillemax;
  }
  if ($y > $x)
  {
  $x=$x*(($taillemax)/$y);
  $y=$taillemax;
  }
  if ($y == $x)
  {
  $x=$taillemax;
  $y=$taillemax;
  }
  } else { $source = 'imgart/none.png'; }

  echo '<tr>';

  ?>
  <td><a class="thumbnail" href="#thumb"><img class="htrans" src="<?php echo $source; ?>" width="<?php echo $x; ?>" height="<?php echo $y; ?>" border="0"><span><img src="<?php echo $source; ?>" /></span></a></td>
  <?php

  echo '<td><p>'. $data['nocat'] . '</p></td>';
  echo '<td><p>'. $data['noart'] . '</p></td>';
  echo '<td><p>' . $data['article'] . '</p></td>';
  echo '<td><p>' . $data['taille'] . '</p></td>';
  echo '<td><p>'. $data['stock'] . '</p></td>';
  echo '<td><p style="background:#ffffab; font-size:14px;">' . $data['prix'] . '</p></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td style="background-color:#ffffef; text-align:left; border-bottom: 3px inset #FF9900;" colspan="7"><p><b>Détails :</b> ' . $data['details'] . '</p></td>';
  echo '</tr>';
}
  echo '</table>';

 // Nb d'enregistrement total
$nb_total = mysql_query('SELECT COUNT(*) AS nb_total FROM produits');
$nb_total = mysql_fetch_array($nb_total);
$nb_total = $nb_total['nb_total'];
 
// Pagination
$nb_pages = ceil($nb_total / $pagination);
 
// Affichage
echo '<p class="pagination">' . pagination($page, $nb_pages) . '</p>';
echo '</td></tr></table>';
 

mysql_close();
?>

Un moment donné faut que je passe à autre chose si je ne trouve pas de solution.

Merci à vous deux de m'avoir aider. XTG et Pierro.


Salutations smile

Hors ligne

#12 31-03-2010 05:58:29

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Afficher par catégorie

Dans ce cas voici un code que tu pourras adapter :


      if( !empty($_POST['nocat']) )
      {
        if( $_POST['nocat'] == "nocat" ) // On sélectionne tout
          $sql = "SELECT id, nom FROM produits ORDER BY noart ASC LIMIT $limit_start,$pagination";
        else // Seulement une catégorie
          $sql = "SELECT id, nom FROM produits WHERE noart={$_POST['noart']} ORDER BY noart ASC LIMIT $limit_start,$pagination";
      }
      else
        $sql = "SELECT id, nom FROM produits ORDER BY noart LIMIT $limit_start,$pagination";
     $req = mysql_query($sql,$db) or die(mysql_error());
 

Avec ce code si tu n'utilises pas de formulaire tu affiches tout.
Si tu sélectionnes une catégorie tu n'auras que la catégorie.
N'hésites pas à demander ce que tu ne comprends pas.

Hors ligne

#13 31-03-2010 15:39:28

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Afficher par catégorie

xTG a écrit :

Dans ce cas voici un code que tu pourras adapter :


      if( !empty($_POST['nocat']) )
      {
        if( $_POST['nocat'] == "nocat" ) // On sélectionne tout
          $sql = "SELECT id, nom FROM produits ORDER BY noart ASC LIMIT $limit_start,$pagination";
        else // Seulement une catégorie
          $sql = "SELECT id, nom FROM produits WHERE noart={$_POST['noart']} ORDER BY noart ASC LIMIT $limit_start,$pagination";
      }
      else
        $sql = "SELECT id, nom FROM produits ORDER BY noart LIMIT $limit_start,$pagination";
     $req = mysql_query($sql,$db) or die(mysql_error());
 

Avec ce code si tu n'utilises pas de formulaire tu affiches tout.
Si tu sélectionnes une catégorie tu n'auras que la catégorie.
N'hésites pas à demander ce que tu ne comprends pas.

M-E-R-C-I

Là, je pense que c'est dans mon formulaire le problème :

noart : contient les articles.
nocat : est la catégorie.
-  ametis : est une sous-catégorie.
-  zzz : est aussi une sous-catégorie.

name="ici" irait avec le WHERE

j'écris cela pour se démêler un peu.

<form>
    <select name="ici" size="1">
    <option name="ametis" value="ametis">Ametis</option>
    <option name="zzz" value="zzz">zzz</option>
    </select>
    <input type="submit" value="Envoyer">
</form>
<?php

 if(!empty($_POST['nocat']))
 {
       if( $_POST['nocat'] == "nocat" ) // On sélectionne tout
       {
         $sql = "SELECT * FROM produits ORDER BY noart ASC LIMIT $limit_start,$pagination";
       }
       else // Seulement une catégorie
       {
         $sql = "SELECT * FROM produits WHERE noart={$_POST['ici']} ORDER BY noart ASC LIMIT $limit_start,$pagination";
       }
 }
 else
 {
       $sql = "SELECT * FROM produits ORDER BY noart LIMIT $limit_start,$pagination";
 }
$req = mysql_query($sql,$db) or die(mysql_error());

Dernière modification par dan4 (31-03-2010 16:06:10)


Salutations smile

Hors ligne

#14 31-03-2010 19:36:24

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Afficher par catégorie

Un option ne porte pas de name car c'est le select qui le renseigne.

Mais si je comprend bien tu as un select par catégorie ? Quel est l'intérêt ?
Tu peux tout mettre dans un seul select avec un typage de ce genre pour différencier à la réception :

<select name="categorie">
  <option value="nom_cat1">nom_cat1</option>
  <option value="nom_cat1|nom_sous_cat1">nom_sous_cat1</option>
  <option value="nom_cat1|nom_sous_cat2">nom_sous_cat2</option>
  <option value="nom_cat2">nom_cat2</option>
  <option value="nom_cat2|nom_sous_cat1">nom_sous_cat1</option>
  <option value="nom_cat2|nom_sous_cat2">nom_sous_cat2</option>

Ensuite à la réception il suffit de faire un explode() sur le "|" et vérifier les deux valeurs pour construire la requête.

Hors ligne

#15 01-04-2010 00:54:21

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Afficher par catégorie

En faite, mon problème est de choisir un élément comme ceci :

dans le champs catalogue, afficher que les "zzz" ou bien "ametis" ou bien "...".

"zzz" dans menu déroulant va mettre à WHERE nocat = 'zzz' mais je dois remplacer zzz par une variable. tout ce dont j'ai essayé à date, ne fonctionne pas. Si je mets directement WHERE nocat = 'zzz', oui ça marche.. mais avec le menu, non.

J'ai essayé avec <input type="text"> ça semblé fonctionner... mais j'ai pas remarqué si ça marchais dans toutes les conditions vu ta dernière portion de script..

ha oui, les noms des champs :

CREATE TABLE produits
(id INT (11) not null AUTO_INCREMENT,
nocat VARCHAR (12) not null ,
noart VARCHAR (12) not null ,
article VARCHAR (66) not null ,
taille VARCHAR (12) not null ,
stock VARCHAR (12) not null ,
prix VARCHAR (12) not null ,
details TEXT (112) not null ,

PRIMARY KEY (id), INDEX (id), UNIQUE (id))


si je clique sur suivant à page 2:
  http://127.0.0.1/produits/affiche_selec … php?page=2
Si je clique sur menu ça me donne :
  http://127.0.0.1/produits/affiche_selec … ocat=nocat

mon formulaire corrigé avec le traitement :
...

<form>
<select name="nocat">
   <option value="nocat">nocat</option>
   <option value="nocat|zzz">zzz</option>
   <option value="nocat|ametis">ametis</option>
</select>
    <input type="submit" value="Envoyer">
</form>
<?php

if(!empty($_POST['nocat']))
{
       if( $_POST['nocat'] == "nocat" ) // On sélectionne tout
       {
         $sql = "SELECT * FROM produits ORDER BY noart ASC LIMIT $limit_start,$pagination";
       }
       else // Seulement une catégorie
       {
         $sql = "SELECT * FROM produits WHERE nocat={$_POST['nocat']} ORDER BY noart ASC LIMIT $limit_start,$pagination";
       }
}
else
{
       $sql = "SELECT * FROM produits ORDER BY noart LIMIT $limit_start,$pagination";
}
$req = mysql_query($sql,$db) or die(mysql_error());

...

Le formulaire ne donne aucun choix.

Afin de mieux m'aider et vous permettre de mieux faire les choses, voici le .zip contenant tout :



Je suis rendu à un point de ne plus vouloir continuer malgré les efforts que j'y mets, le succès ne cours pas après moi comme c'est la.

Merci de votre attention.

Dernière modification par dan4 (03-04-2010 16:28:35)


Salutations smile

Hors ligne

#16 01-04-2010 07:20:03

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Afficher par catégorie

Si tu ne souhaites pas continuer c'est bien dommage.
Mais ce qui est aussi dommage c'est que tu ne prend en compte que la moitié de mes messages à chaque fois donc je dirai que c'est normal que tu ais des soucis.

Hors ligne

#17 02-04-2010 23:27:00

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Afficher par catégorie

bon, j'ai réussi avec INPUT mais SELECT OPTION, j'ai laissé tombé pour fin de tests.

si je tappe un mot qui a plus de 3 enregistrements, il va afficher que 3 puisque le page par page est seulement de 3. Je dois absolument supprimer le page par page pour le critère. voici le code:

note, si je laissais le page par page, lorsque je clique sur suivant, il ne va plus afficher mon critère. C'est pour ça que j'ai été obligé de supprimer le page par page lorsque je fais un critère.. j'aurais voulu réussi à 100%... mais bon...

?>

<form method="POST">
<input type="text" name="nocat"> <input type="submit" value="Envoyer">
</form>

<?php


if (isset($_POST['nocat']))
{

    if($_POST['nocat'] != '')
    {
    { $req = mysql_query("SELECT * FROM produits WHERE nocat = '". $_POST['nocat'] ."' ORDER BY noart ASC LIMIT $limit_start,$pagination",$db) or die(mysql_error()); }
    }
    else
    { $req = mysql_query("SELECT * FROM produits ORDER BY noart ASC LIMIT $limit_start,$pagination",$db) or die(mysql_error()); }
 
}
else
{ $req = mysql_query("SELECT * FROM produits ORDER BY noart ASC LIMIT $limit_start,$pagination",$db) or die(mysql_error()); }

Dernière modification par dan4 (02-04-2010 23:38:52)


Salutations smile

Hors ligne

#18 03-04-2010 09:53:17

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Afficher par catégorie

Pour information la récupération d'une valeur d'un champs input revient au même que pour un champs select.

<input type="text" name="mon_champ"/>

équivaut à :

<select name="mon_champ">
  <option value="valeur_1">valeur 1</option>
  <option value="valeur_2">valeur 2</option>
</select>

C'est juste qu'on peut mettre n'importe quelle valeur dans le input alors que le select ne laissera que deux choix : $_POST['mon_champ']

Hors ligne

#19 03-04-2010 16:26:19

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Afficher par catégorie

xTG a écrit :

Pour information la récupération d'une valeur d'un champs input revient au même que pour un champs select.

<input type="text" name="mon_champ"/>

équivaut à :

<select name="mon_champ">
  <option value="valeur_1">valeur 1</option>
  <option value="valeur_2">valeur 2</option>
</select>

C'est juste qu'on peut mettre n'importe quelle valeur dans le input alors que le select ne laissera que deux choix : $_POST['mon_champ']

J'ai résolu l'ensemble des problèmes que j'avais.

Cependant, vu que j'utilise les speudo-frame, la méthode du tuto d'ici, ça pose un conflit avec ma page d'affichage.

Incapable d'aller chercher dans un répertoire avec ?page=1 étant donné qu'il faut que je définisse les pages autorisées. 

Votre code que j'ai utilisé avant de faire ma page de donnée :

  // On définit le tableau contenant les pages autorisées
  // ----------------------------------------------------
  $pageOK = array('news' => 'news.php',
                  'accueil' => 'accueil.php');

  // On teste que le paramètre d'url existe et qu'il est bien autorisé
  // -----------------------------------------------------------------
  if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
    include($pageOK[$_GET['page']]);   // Nous appelons le contenu central de la page
  } else {
    include('accueil.php');   // Page par défaut quant elle n'existe pas dans le tableau
  }

Un autre que j'ai testé et adapté mais sur certains hébergeurs, conflit aussi :

$_chemin = '/';

// la page par defaut, si les valeurs fournies sont incorrect :
$page_defaut = 'accueil';

// on recupere la valeur passé dans l'url :
if(isset($_GET["page"]))
  $page=$_GET["page"];
else
  $page=$page_defaut;

//Enlevons les caractères html
$page=htmlentities($page, ENT_QUOTES);

//Si on a des répertoires que l'on ne veut pas accéder, un les liste ici :
$repProteger=array('include', 'libs', 'admin');
$temp=split('/',$page);
if(in_array($temp[0],$repProteger)){ $page=$page_defaut; }

//Si jamais qq tente de penetre dans le serveur en utilisant des ./ ou :/
if(eregi("(:/)|(./)",$page)){ $page=$page_defaut; }

//Testons si la page demandé existe bien en local
if(file_exists($_SERVER["DOCUMENT_ROOT"].$_chemin.'/'.$page.'.php'))
  include($page.'.php');
elseif(file_exists($page_defaut.'.php'))
  include($page_defaut.'.php');
else
  exit("Erreur : La page par defaut n'existe pas.");

Les deux fonctionnent mais les deux ont quelque chose qui m'empêche d'utiliser ma page affichage.php?page=1 ....

j'essais d'être inventif. Créer une façon d'accepter un fichier existant qui se trouve dans un sous-répertoire et qui a comme format déjà ?page=

Mais, qui puisse accepter un site externe à certaine condition.... Les iframes règlerait mon problème, chose que j'ai toujours utilisé auparavant dans mes sites avant que je connaisse les speudo-iframe.

Pour le page par page, j'ai pas été capable de l'appliquer pour le triage ou les critères. Alors, le tout s'affiche dans une seule page. Peut-etre en modifiant la "function", je passe sur ça.

Je ferais un autre sujet.  A part de certains aspect de sécurité et d'optimisation, le sujet est [REGLE].

Dernière modification par dan4 (03-04-2010 16:31:04)


Salutations smile

Hors ligne

Pied de page des forums