Page 1 sur 1

Lister les champs d'une base de donnée

Posté : 14 janv. 2014, 20:35
par guigui69
Bonsoir à tous,

Je voudrais avoir de l'aide pour réaliser ceci:

J'ai une base de donnée avec une table.

Je voudrais lister les nom des champs d'une requête (my)SQL dans des checkbox dans une page PHP .(page1.php)

Mon but une fois les checkbox affiché (et sélectionné ceux voulu) je valide submit de la page1.php et sur la page2.php cela affiche le résultat avec uniquement les champs coché (checkbox)

Comment je pourrais arriver à faire cela ?

Merci d'avance pour vos explications

guigui69

Re: Lister les champs d'une base de donnée

Posté : 14 janv. 2014, 21:23
par xTG
Quelle est la partie que tu ne sais pas faire ?

Re: Lister les champs d'une base de donnée

Posté : 14 janv. 2014, 23:17
par moogli
salut,

la plus part des base de données peuvent te fournir ces informations avec une requête SQL, tout comme la liste des tables, des contraintes ou autres.

Mysql : http://dev.mysql.com/doc/refman/5.0/fr/show-tables.html et SHOW COLUMNS


Oracle :
- liste des tables : SELECT table_name FROM user_tables
- liste de colonnes : select COLUMN_NAME from USER_TAB_COLUMNS where TABLE_NAME='le nom de la table'

etc pour les autres.


@+

Re: Lister les champs d'une base de donnée

Posté : 16 janv. 2014, 18:26
par guigui69
Bonsoir et merci pour vos réponses je ne suis comme ceci:

Premiere page
<?php


$nbCols = 3; // nombre de colonnes du tableau
$cpt = 0; // compteur d'éléments 
?>
<table>
  <tr>
    <th style="width:<?php echo round(100/$nbCols);?>%;">Champ 1</th>
    <th style="width:<?php echo round(100/$nbCols);?>%;">Champ 2</th>
    <th style="width:<?php echo round(100/$nbCols);?>%;">Champ 3</th>
  </tr>
  <?php
$query="select * from `table 2`";
$result=mysql_query($query);
$numfields = mysql_num_fields($result);



for ($i=0; $i < $numfields; $i++) // Header
{ 

  if ($cpt%$nbCols==0) // on divise le nb d'élément par le nb de colonnes. Si le reste est de 0 ...
        echo '<tr>'; // ..., alors on est sur le premier élément d'une ligne


    // On place chaque élément dans une cellule du tableau
    echo '<td>';
    echo '<input type="checkbox" name="list[]" value="'.mysql_field_name($result, $i).'" class="toutcheck" />'.mysql_field_name($result, $i).'';
    echo '</td>';


    // fin d'une ligne
    if ($cpt%$nbCols==($nbCols-1)) // on divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ...
        echo '</tr>'; // ..., on est sur le dernier élément d'une ligne

    $cpt++; // on incrémente le compteur pour savoir où on en est
} 



// echo '<input type="checkbox" name="list[]" value="'.mysql_field_name($result, $i).'" />'.mysql_field_name($result, $i).'<br/>'; }


?>
</table>
et seconde page:
if(isset($_POST['list'])){ //sera vrai si au moins un moins un checkbox a été coché
 
foreach($_POST['list'] as $chkbx){
 $choix .= $chkbx.',';
//ici à chaque passage $chkbx contiendra la valeur de l'attribut value d'une des cases à cocher
//echo $chkbx; //ex. : 12 16 23 31 ...
 
}
//echo $choix;
}
else{
	//echo 'Sélectionner un choix!';
}

$listchamps=substr($choix,0,-1);

$sql='SELECT '.$listchamps.'
FROM `table 2` 
LEFT JOIN objectif ON objectif.id_concession=`table 2`.`PointdeVente` AND mois_obj=MONTH("'.$date_debut.'") AND annee_obj=YEAR("'.$date_debut.'")
WHERE (`DateCommande` BETWEEN  "'.$date_debut.'" AND "'.$date_fin.'"  OR `DateCommande` BETWEEN  "'.$date_debutn.'" AND "'.$date_finn.'" )
GROUP BY `Marque`,`PointdeVente`';
Qu'en pensez-vous?

guigui69

Re: Lister les champs d'une base de donnée

Posté : 17 janv. 2014, 22:03
par moogli
Qu'en pensez-vous?
qu'un show columns c'est qu'en même pas compliqué et moins gourmand en ressource que selectionner 5 millions de lignes pour ne récupérer que les noms des colonnes.

Je pense aussi qu'un nom de table comme "table 2" ne devrait même pas être permis, et j'espère que ce n'était que pour l'exemple ;)

@+

Re: Lister les champs d'une base de donnée

Posté : 22 janv. 2014, 22:56
par guigui69
D'accord,

pour table 2 c'est pour ma base test . Pour la base de prod je vais nommer autrement :)