Affichage de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichage de données

par GhostShell » 14 oct. 2006, 23:50

j'ai résolu mon problème .. je vous remercie tous de votre aide :)

par GhostShell » 13 oct. 2006, 16:48

désolé, je viens de m'apercevoir que je n'étais pas loggé au dernier message ;)

par Invité » 13 oct. 2006, 15:05

Pas de problème, ca arrive à tout le monde de se tromper :)

Par contre ca avance pas mon smilblique :D

par Cyrano » 13 oct. 2006, 13:08

Je ne vois pas pourquoi tu me parle de faire une requete sur plusieurs tables, il n'y en a qu'une, la table astuce, donc je ne vois pas trop ou tu veux en venir ...
Autant pour moi, j'ai lu trop vite, oublie ce que j'ai mentionné.

par GhostShell » 13 oct. 2006, 10:14

Je comprends assez bien le systeme de bdd de table et de champs, par contre je debute en PhP/MySql, et ne maitrise donc pas tout.

Voici donc la structure de ma table "astuces" :

Code : Tout sélectionner

CREATE TABLE `astuces` ( `id` int(11) NOT NULL auto_increment, `titre` varchar(255) NOT NULL default '', `preview` text NOT NULL, `contenu` text NOT NULL, `categorie` varchar(255) NOT NULL default '', `os` varchar(255) NOT NULL default '', `os2` varchar(255) NOT NULL default '', `os3` varchar(255) NOT NULL default '', `os4` varchar(255) NOT NULL default '', `os5` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=24 ;
Par contre si vous avez mieux et plus simple à gérer à me proposer pourquoi pas, je suis ouvert à toutes propositions, mon impératif est cité plus haut ...

Encore merci à vous

par Vikchill » 13 oct. 2006, 09:56

Je ne vois pas pourquoi tu me parle de faire une requete sur plusieurs tables, il n'y en a qu'une, la table astuce, donc je ne vois pas trop ou tu veux en venir ...
Ah si mon ami:

Code : Tout sélectionner

$sql = creer_requete('SELECT * FROM astuces', 'categorie', $choix1, 'os', $choix2);
Là, ta requête se fait sur des tables astuces, categorien $choix1, os, $choix2. L'autre requête, c'est pire. Les tables, c'est tout ce que tu as entre le FROM et la prochaine instruction (en général le WHERE), donc il m'est d'avis que tu confonds légèrement table et champs ou que tu ne t'y connais pas trop en SQL.

File les structures de tes tables pour qu'on puisse t'aider, tout ça me fait craindre une mauvaise conception.

par Invité » 13 oct. 2006, 08:42

Je ne vois pas pourquoi tu me parle de faire une requete sur plusieurs tables, il n'y en a qu'une, la table astuce, donc je ne vois pas trop ou tu veux en venir ...

par Cyrano » 13 oct. 2006, 08:18

Faire une requête SQL sur plusieurs tables sans conditions de jointure, c'est courrir à la surprise de grande taille : ça va faire un beau produit cartésien. Si par exemple tu fais ta requête sur trois tables, tu auras au retour le nombre de lignes de la première table multiplié par le nombre de lignes de la seconde, le tout multiplié par celui de la troisième. La seconde requête que tu nous montres est faite sans aucune jointure sur treize tables : sur la base de ce que je viens d'expliquer, je te laisse imaginer le nombre de lignes de résultats. Avec simplement 2 lignes de données dans chacun de ces 13 tables, tu vas avoir 2^13 lignes = 8192 lignes : pas sûr que ce soit exactement ce que tu veux :-k

Affichage de données

par GhostShell » 13 oct. 2006, 00:11

Salut all ...
je me suis appercu d'une chose à l'utilisation de mon script ...

il me manque des infos à l'affichage ... je viens de tilter donc que mes astuces pouvais correspondrent à plusieurs OS ... par exemple ... astuce1 correspond à OS1, OS2, OS3; astuce2 correspond à OS2, OS3, OS5 etc ...

j'ai modifier ma table de facon à integrer les nouveaux champs nommés os2 os3 etc .. mais ma requete ne fonctionne evidament pas dans l'état ...

j'ai donc essayer de modifier :
$sql = creer_requete('SELECT * FROM astuces', 'categorie', $choix1, 'os', $choix2);
en :
$sql = creer_requete('SELECT * FROM astuces', 'categorie', $choix1, 'os', $choix2, 'os2', $choix2, 'os3', $choix2, 'os4', $choix2, 'os5', $choix2);
mais evidament ... ca ne fonctionne pas ...

je cale apres plusieurs essais ...

avec l'exemple suivant ,

astuce1 correspond a OS1, OS2, OS3,

en selectionnant OS1 ou OS2 ou OS3 dans la liste déroulante "os" on doit avoir la même astuce qui reviens ... mais ne pas avoir de doublon en affichant les astuces sans variable de déclarée à l'arrivée sur la page ...

En fait le but est que les visiteurs puissent faire des choix,
Les résultats decoulent bien evidament de ces choix, 4 possibilités s'offrent aux visiteurs :

1- je ne choisis pas et j'affiche toutes les astuces pour tous les OS
2- je choisis un OS et affiches toutes les astuces de toutes les catégories pour cet OS
3- je choisis une catégorie et j'affiche toutes les astuces pour tous les OS dans cette catégorie
4- je choisis une catégorie et un OS et j'affiche ce qui correspond aux 2 choix

merci d'avance :)

ps: je met le code le la page concernee pour les interessés

<td><p align="center">
                          <form method="post" action="astuces-test.php">
<table width="100%" height="168" border="0" align="center">
  <tr>
    <td colspan="2" align="right" valign="top"><p align="center">Catégorie :
      <select name="choix1">
        <option value="" selected="selected">Toutes cat&eacute;gorie</option>
        <option value="optimisation">Optimisation</option>
        <option value="systeme">Syst&egrave;me</option>
        <option value="securite">S&eacute;curit&eacute;</option>
        <option value="internet">Internet</option>
        <option value="reseau">R&eacute;seau</option>
        <option value="personalisation">Personalisation</option>
        <option value="autres">Autres</option>
      </select>
          <br>
                  <br>
        O.S. :
      <select name="choix2">
        <option value="" selected="selected">Tout OS</option>
        <option value="winnt">Windows NT</option>
        <option value="win2k">Windows 2000</option>
        <option value="winxphome">Windows XP Familial</option>
        <option value="winxppro">Windows XP Pro</option>
        <option value="win2003serveur">Windows 2003 Serveur</option>
        <option value="win98">Windows 98</option>
        <option value="win95">Windows 95</option>
      </select>
      <br>
          <br>
    </p>
         <div align="center">
           <input name="submit" type="submit" value="Ok" />       
      </div>
         <div align="left"><br />
                 <br />
                 <?php

//--------------------------------------------------------------------------------------

function creer_requete()
{

// Traitement des arguments (fonction à nombre d'arguments variable)
// arg(0) : requête initiale
// arg(1) : nom de la colonne à tester, arg(2) variable contenant la valeur de la colonne arg(1)
// etc...
// Usage : $sql = creer_requete("SELECT * FROM astuces", 'categorie', $choix1, 'os', $choix2);

    $n_args = func_num_args();
    if ($n_args==0) return ""; // Pas assez d'arguments
    $req = func_get_arg(0);

    if ($n_args==1) return ""; // Retour, aucun critère défini
    if (!($n_args % 2)) return ""; // Nombre d'arguments pairs, pas bon
   
    // On va mettre dans le tableau $choix, toutes les valeurs de colonne non vides
    $choix = array();
    for ($i=1; $i<$n_args; $i+=2) {
        $c = func_get_arg($i); $v = func_get_arg($i+1);
        if (!empty($v)) $choix[$c] = $v;
    }
    $n = count($choix);
    if ($n==0) return "";  // Aucune valeur de colonne n'était définie

    // La requête se forge ici
    $req.=' WHERE ';
    foreach($choix as $cle => $valeur) $req.="$cle ='$valeur' AND ";

    return substr($req,0,-5); // Supprime le dernier " AND "

}

//--------------------------------------------------------------------------------------

mysql_connect("localhost", "", "");
mysql_select_db("");

$sql = creer_requete('SELECT * FROM astuces', 'categorie', $choix1, 'os', $choix2);

if (empty($sql)) {
   $reponse = mysql_query("SELECT * FROM astuces LIMIT 0,20") OR die ("Impossible d'exécuter la requête : ".mysql_error());
   echo '</ul>';
   while ($donnees = mysql_fetch_array($reponse))
   {
    echo '<li style="margin: 0px;"><a href="affichage.php?id='.$donnees[id].'" class="sidelink">'.$donnees[titre].'</a></li>';
   }
   echo '</ul>';
} else {
   $reponse = mysql_query($sql) OR die ("Impossible d'exécuter la requête : ".mysql_error());
echo '<ul>';
   while ($donnees = mysql_fetch_array($reponse))
   {
    echo '<li style="margin: 0px;"><a href="affichage.php?id='.$donnees[id].'" class="sidelink">'.$donnees[titre].'</a></li>';
   }
   echo '</ul>';
}

mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ;o)

?>
            </div></td>