Bonjour tout le monde,
Je trie mes colonnes de mon tableau, tout ce passe bien.
J'ai voulu sécuriser le $_GET['Sort'] mais je rencontre quelques difficultés :
Ce code fonctionne (sans doute car je ne sais pas comment contourner un Get pour tester)
Le tri ce fait, mais après le nom des colonnes disparaissent.
Sauriez-vous me dire ce que je dois faire svp ?
Voici le code de ma page pour ceux à qui cela peut intéresser :
Merci d'avance.
beegees
Modifié par beegees (06 Nov 2008 - 10:46)
Je trie mes colonnes de mon tableau, tout ce passe bien.
J'ai voulu sécuriser le $_GET['Sort'] mais je rencontre quelques difficultés :
if((isset($_GET['Sort'])) && (in_array($tri,$Tableau_Noms_Des_Champs)) || ($_GET['Sort'] == "" ))
Ce code fonctionne (sans doute car je ne sais pas comment contourner un Get pour tester)
Le tri ce fait, mais après le nom des colonnes disparaissent.
Sauriez-vous me dire ce que je dois faire svp ?
Voici le code de ma page pour ceux à qui cela peut intéresser :
<!--Si la variable de type get à une information ou si la variable de session LaTable à une donnée alors on fait tout cela-->
<?php if((isset($_GET['select_Nom_Tables'])) OR (isset($_SESSION['LaTable']))){ ?>
<table border="1" id="TableauUpdate">
<?php
//Je crée une variable de session ici afin que le nom de la table puisse etre utilisé dans le script "Mettre a jour".
if(isset($_GET['select_Nom_Tables']))
{
$table = $_GET['select_Nom_Tables'];
}
else
{
$table = $_SESSION['LaTable'];
}
$_SESSION['LaTable'] = $table;
//si je clic sur un nom de champ, une valeur get se met dans l'adresse
if(isset($_GET['Sort']))
{
$tri = "ORDER BY ".$_GET['Sort'];
}
else
{
$tri = "";
}
$query = mysql_query("SELECT * FROM ".$table." ".$tri."") or exit(mysql_error());
$num_rows = mysql_num_rows($query) or exit(mysql_error());
//echo($table);
//echo $num_rows ." lignes dans la table " . $table."\n";
$Tableau_Noms_Des_Champs = array();
for($j=0;$j<mysql_num_fields($query);$j++)
{
$Tableau_Noms_Des_Champs[] = mysql_field_name($query, $j);
//echo(mysql_field_name($query,$j));
}
//var_dump($Tableau_Noms_Des_Champs);
?>
<?php if ($num_rows > 0)
{?>
<form action="" method="post" name="frmSaisie" id="frmSaisie">
<tr><td> </td>
<?php
//++++++++++++++++++++++++affichage des noms de colonnes +++++++++++++++++++++++++++++++++
for($i=0;$i<mysql_num_fields($query);$i++)
{
//afin de ne pas afficher l'ID dans les pages de consultations, je dis que si le nom du champ actuel est 'ID', je l'ignore
if(mysql_field_name($query,$i) != 'ID')
{
//cursos:pointer transforme la flèche en main pour les liens
//self.location.href recharge la page
//?Sort= le nom du champ que l'on veut trier
//je sécurise le GET en testant si la valeur retournée dans l'URL est bien dans le tableau (in_array) ou que le get soit vide
if((isset($_GET['Sort'])) && (in_array($_GET['Sort'], $Tableau_Noms_Des_Champs)) || ($_GET['Sort'] == "" )){
echo '<td style="cursor:pointer" onclick="self.location.href=\'EntreeDeDonnees.php?Sort='.$Tableau_Noms_Des_Champs[$i].'&Table='.$table.'\'">'.$Tableau_Noms_Des_Champs[$i].'</td>';
}
}
}
?>
</tr>
<?php
$nligne = 0;
$nbColonnes = 0;
while($row = mysql_fetch_array($query,MYSQL_ASSOC))
{
echo '<tr><td><input name="sup['.$row['ID'].']" type="checkbox" value="'.$row['ID'].'" /></td>';
foreach($row as $NomCol => $Valeur)
{
//si le nom de la colonne vaut 'ID', je l'ignore afin de ne pas afficher l'ID
if($NomCol != 'ID'){
echo '<td><input name="new[' . $row['ID'] . '][' . $NomCol . ']" value="'.$Valeur.'"></td>'; }
}
echo '</tr>';
}
echo '</tr>';
?>
<!--ici j'appelle le script javascript ci-dessous par le clic sur un bouton-->
<input type="submit" name="btnUpdate" value="Mettre a jour" onClick="UpdateSQL()" />
<input type="submit" name="btnInsertInto" value="Ajouter un enregistrement" onClick="InsertIntoSQL()" />
<input type="submit" name="btnDelete" value="Supprimer un enregistrement" onClick="DeleteSQL()" />
</form>
<?php }?>
<?php if ($num_rows == 0) { ?>
<form action="" method="post" name="frmSaisie" id="frmSaisie">
<tr><td> </td>
<input type="submit" name="btnInsertInto" value="Ajouter un enregistrement" onClick="InsertIntoSQL()" />
</form>
<?php } ?>
</table>
<?php } else { ?>
<table border="1" id="TableauUpdate">
<tr><td>Aucune table n'a été sélectionnée</td></tr>
</table>
<?php } ?>
<!--le script ci-dessous me permet d'avoir plusieurs actions pour un seul formulaire-->
<script langage='javascript'>
function UpdateSQL()
{
document.forms['frmSaisie'].action ='MettreAJour.php';
document.forms['frmSaisie'].submit();
// document.test.submit();
}
function InsertIntoSQL()
{
document.forms['frmSaisie'].action ='Scripts/Insert_Into_Generation_Chaine_SQL.php';
//si je laisse cette ligne, IE ajoute deux lignes.
//document.forms['frmSaisie'].submit();
}
function DeleteSQL()
{
document.forms['frmSaisie'].action ='Scripts/Delete_SQL.php';
document.forms['frmSaisie'].submit();
}
</script>
Merci d'avance.
beegees
Modifié par beegees (06 Nov 2008 - 10:46)