Lister les champs d'une base de donnée

Eléphant du PHP | 440 Messages

14 janv. 2014, 20:35

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

ViPHP
xTG
ViPHP | 7331 Messages

14 janv. 2014, 21:23

Quelle est la partie que tu ne sais pas faire ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 janv. 2014, 23:17

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.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 440 Messages

16 janv. 2014, 18:26

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 janv. 2014, 22:03

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 ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 440 Messages

22 janv. 2014, 22:56

D'accord,

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