[PHP] doit-on utiliser extract() ?

Résolu/Fermé
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 10 mars 2007 à 13:44
 deeploy - 15 août 2014 à 02:22
salut,

j'ai un bon paquet de variables à récupérer depuis un formulaire (sondage), je pense utiliser extract($_POST); pour tout extraire d'un pèt'.

je ne trouve pas d'exemple qui utilise la fonction extract() et pas de commentaire non plus, je suis donc méfiant...

la doc met en garde contre les données inconnues.
https://www.php.net/manual/fr/function.extract.php

moi je souhaite l'utiliser sur un $_POST provenant d'un formulaire avec cases options et cases à cocher.

'register_globals' est activé sur mon serveur.

je me demande donc si vous connaitriez des raisons de s'en méfier ou de ne pas l'utiliser ou alors une meilleure méthode !

A voir également:

7 réponses

Bonjour,

Apparemment, personne ne connaît ?

Je me pose la même question..
0
The extract() function imports variables into the local symbol table from an array.
0
Bonjour,

// On n'effectue les traitements qu'à la condition que les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['a'])) && (!empty($_POST['b'])) ) {

extract($_POST); // je vous renvoie à la doc de cette fonction

echo $a;
echo $b
0
dubuducu Messages postés 391 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 19 mai 2010 4
4 sept. 2008 à 18:40
Bonjour,
moi j'adore cette fonction et voici un exemple que j'ai utilisé récemment .
je te laisse le soin d'etudier le principe en suivant cet exemple.j'utilise extract() pour mes listes deroulantes .

Bon courage.

....
$rq = "SELECT DISTINCT departement FROM devis_table ORDER BY departement"; 
$resultq = mysql_query($rq) 
or die ("Exécution de la requête impossible"); 



echo"<b>Choisissez un departement</b>\n"; 
echo"<br><br>"; 

echo "<form action='menu1.php' method='post'>

<select name='departement'>\n"; 

echo "<option value='null'>Tous les Départements</option>";
while ($liste=mysql_fetch_array($resultq)) 
{ 
extract($liste); 
echo "<option value='$departement'>$departement\n"; 
} 
echo " </select>\n"; 
echo " <BR><BR><BR><BR>"; 

....


0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
4 sept. 2008 à 20:54
salut,

en fait je me posais la question dans le cas de l'utilisation des données de $_POST mais depuis (merci PHP 5.2) je suis passé à filter_input().

en tous cas merci !
-;o)
0
bonsoir,

je rebondis sur le sujet , j'ai du lire en partie les même conseils (mais pas vu le filter_input();)

En fait je travaille sur un petit cms perso et je cherchais un moyen de récuperer les differentes variables eventuellement dispos pour ensuite traitées celle que je recherche selon la config.

je met ci dessous une page test mise en forme avec une fonction un peu 'bateau' (extrait d'une fonctions d'une class que j'essaie de dévellopper )


//////////////////////////////////////
<?php
session_start();
function check($array) {
//verification si tableau et retourne le nombre d'enregistrement
$nb_item=is_array($array) ? count($array) : 0 ;
$nb_item = $nb_item;
//puis parcours du tableau si pas zero
if ($nb_item !=0) {
echo '<ul >';
foreach($array as $cle=>$valeur)
{
echo '<li>'.$cle.' : '.$valeur.'</li>';
}
echo '</ul>';
}
else { echo' <p class="err">Pas de variables récupérées.</p>';}
$array==null;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Robots" content="follow,noindex,noarchive">

<title> test sur variable sans extract(); </title>
<style type="text/css">
body {text-align:center;}
#global {
display:table;
display:inine-block;
margin:auto;
}
#global div {
float:left;
padding:5px;
}
.pied {
clear:both;
}
h1, #global div , .pied{
border:3px double;
outline: 3px double red;
background:lightgreen;
margin:1em 5px;
}
label {float:left;
width:100px;
}
ul {
border:1px solid;
padding:5px;
width:250px;
margin:auto;
background:#ccc;
}
.err {
color:red;
}
</style>
<!--[if lte IE 7]>
<style type="text/css">
#global {
display:inline;
zoom:1;
}
#global div {
width:25%;
}
</style>
<![endif]-->
<?php
echo '</head><body><div id="global"><h1>les tests</h1>';

// on lance le test sur $_POST
echo '<div ><h2>test sur post </h2>';
check($_POST);
echo'
<form method="POST">
<fieldset><legend>form en methode post</legend>
<p><label for="test" >Test</label><input type="text" name="test" ></p>
<p><label for="test2" >Test 2</label><input type="text" name="test2" ></p>
<p><input type="submit" name="sub" value="test sur var post"></p>
</fieldset>
</form></div>';

// on lance le test sur $_GET
echo' <div ><h2>test $_get</h2>';
check($_GET);
echo '<p><a href="?test=oki&autretest=reoki&etc=etc">test sur 3 variable dans l\'url</a></p>';
echo '<p><a href="?un=une seule variable">test sur 1 seule variable dans l\'url</a></p></div>';


// on lance le test sur $_SESSION
echo '<div ><h2>test sur session</h2>';
$_SESSION['<b>key : log 1</b>'] = 'okitest';
$_SESSION['<b>clé : log 2</b>'] = 'okitest2';
check($_SESSION);
echo'<p>testons voir si il y a un cookie créer par la session </p>';

check($_COOKIE);
echo '</div><p class="pied">fin des test </p></body></html>';
session_destroy();
?>
////////////////////////////////////////////////

a partir de la on peut récuperer ces données , les filtrées , les nettoyées et les restockées dans un ou d'autres tableau .

Est ce une bonne idée ?

(dans ma class voici ce que je fais avant de voir ce que je vais en faire extraits
:
public function __construct($query) {
$this->check($query);//on verifie si tableau

}

puis la fonction check:
function check($query) {
//verification si tableau et retourne le nombre d'enregistrement
$nb_item=is_array($query) ? count($query) : 0 ;
$this->nb_item = $nb_item;
}
)

Je continue sur cette lancée ou est ce une bêtise ?
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
5 sept. 2008 à 09:18
salut,

tu devrais ouvrir une discussion spécifique pour ton sujet et mettre ton code en forme avec le bouton "Conserver la mise en forme du texte sélectionné".

à plus
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
5 sept. 2008 à 09:35
Bjr

Tu peux utiliser extract si tu veux

Personnellement pour les formulaires je préfère passer par un tableau intermédiaire portant le nom du formulaire

Ex

<html>
<head>
<style>
*
{
	font-family : arial;
	font-size : 10pt;

}
</style>
</head>
<body>
<form name="form1" method="post" >
	Username <input type="text" value="" name="form1[username]"><br />
	Password <input type="text" value="" name="form1[password]"><br />
	<select name="form1[choix]">
		<option value="option A">Option A</option>
		<option value="option B">Option B</option>
		<option value="option C">Option C</option>		
	</select>
	<br />
	Autorisation <input type="radio" name="form1[autorisation]" value="oui"><br />

	<input type="submit" value="Envoyer">
</form>
<?php

$form1 = (isset($_POST["form1"])) ? $_POST["form1"] : null;
if ($form1)
{
	echo "<pre>";
	var_dump($form1);
	echo "</pre>";
}
?>
</body>
</html>


En php je récupère le tableau associatif $form1 qui contient tous mes champs : juste un petit test isset($form1[...]) dans le cas des boutons radio étant donné que leur valeur n'est pas systématiquement transmisse et c'est tout.



0
scercro Messages postés 2 Date d'inscription samedi 19 janvier 2013 Statut Membre Dernière intervention 28 septembre 2013
28 sept. 2013 à 14:46
$nb=extract($_POST,EXTR_PREFIX_SAME,'new');
0
foreach($_POST as $k => $v){
$$k = htmlspecialchars($v);
}
0