J'ai plusieurs variables provenant d'une matrice en $ post _ ["tableau"] Je souhaite faire une sorte de boucle, par exemple pour acheter, pour chaque valeur de la variable un nom variable et attribue la valeur pour cela. .
Par exemple, si j'ai P>
$name = 'John'; $last = 'Doe'; $age = '32'; $sex = 'male';
5 Réponses :
Vous pouvez réellement utiliser la fonction intégrée appelée Extraire P >
Ah bon? Comment quelqu'un pourrait-il en tirer parti? Peut-être envoyez-vous un message appelé "Logningin" => "vrai" ou quelque chose comme ça?
Ne pas profiter mais ce serait une mauvaise habitude d'entrer dans
@Peter: ils peuvent faire _post = haha j'ai noué votre tableau _post! Code> et id iditto pour le reste des superglobaux.
Vous n'avez pas besoin d'une boucle, vous voulez : p> Comme indiqué dans les commentaires strong> Cela force tous les paramètres dans le Le code ci-dessus illustre le problème comme indiqué dans cette réponse - Certaines choses assez dangereuses peuvent être écrasées dans le global em > Espace. p> à l'intérieur d'une fonction, comme la première ligne, aucun préjudice fait. P> Vous pouvez également utiliser Extrait avec des options d'extraction_TYPE qui ne remplacent pas . La meilleure option à utiliser, à mon avis, est simplement de préfixer toutes les variables de l'extrait: p> de cette façon, vous n'avez pas le problème d'écrasement , mais vous savez aussi que vous avez tout eu du tableau. P> Si vous vouliez le faire manuellement (mais toujours de manière dynamique), ou voulait extraire conditionnellement quelques-unes des variables, vous pouvez utiliser variable Variables : P> Précautions et meilleures pratiques h2>
$ _ POST Code> Array dans l'espace de symbole actuel. P> dans l'espace global h3>
à l'intérieur d'une fonction h3>
$ _ serveur code> est un Super Global , que cet exploit pourrait se produire à l'intérieur em> une fonction également. Cependant, dans mes tests, sur $ _ serveur code>, $ € code>, $ _ obtenez code>, _ session code> ou d'autres superglobaux, pouvant être écrasé. p> avec des options h3>
Alterné - Looping w / conditionnel H2>
foreach ($_POST as $key => $value) {
if (isset($$key)) continue;
$$key = $value;
}
@jakenoble C'est bon si vous faites attention au manuel et utilisez une option autre que le comportement par défaut pour éviter les variables écrasantes.
@Jakenoble - Il serait utile d'expliquer pourquoi, au lieu de -1 et un commentaire sur chaque poste. En isolant, par exemple, si je sais ce que le contenu de $ _ POST code> est, quelle est la différence?
J'ai ajouté ma propre réponse bien que cela ait été voté sans commentaires. Je ne peux pas gagner. Vous pouvez écraser les variables que vous voulez, ce qui entraînerait un comportement imprévisible. Personne ne pouvait profiter, mais ce n'est qu'un exemple de quelque chose qui peut être utilisé puis mal utilisé par un nouvel utilisateur de PHP s'il n'est pas expliqué correctement. C'est pourquoi PHP a comme mauvais nom à cause de choses comme extrait () code> et leur utilisation abusive.
@Jakenoble: N'utilisez tout simplement pas de variables, que vous n'initialisez pas. Mettez extrait () code> au début de (disons) une fonction et il n'y a aucune variables, pouvant être accidentellement remplacée.
@KingCrunch @Renèse Tout cela va bien, mais assurez-vous de l'écrire dans votre réponse, vous ne pouvez pas supposer que l'OP ou quelqu'un d'autre lira entre les lignes ou même lire le manuel et utiliser la fonction car elle doit être utilisée. La solution rapide va bien, mais assurez-vous qu'il est expliqué comme une solution rapide.
@Jakakoble - Bien sûr, vous avez raison. Malheureusement, je ne peux pas vous conseiller de tout problème possible résultant d'un plan d'action décidé dans une question, mais être conscient de l'écrasement est une bonne idée (bien que vous deviez supposer que s'ils comprennent l'ordre d'exécution, ils seraient Réalisez cela, et s'ils ne le font pas, ils ont de plus gros problèmes). Aller à lire votre réponse maintenant ...
Il existe un lien vers le manuel dans le poteau, qui a clairement des options pour éviter toute écrasement, si la méthode est correctement utilisée, c'est tout à fait bien, et si vous savez ce qui va être dans le poste en premier lieu, vous devriez avoir une décente suffisamment de convention de dénomination pour ne pas écraser les variables déjà instanciées. Personnellement croit que cela vaut mieux qu'un pourach, juste parce que son nettoyant et vous oblige à avoir de meilleures normes de dénomination.
Essayez de ne pas utiliser Vous pouvez faire quelque chose comme ceci: P> extrait () code> lorsque vous utilisez $ _ POST code>. Vous pouvez écraser les variables que vous voulez, ce qui entraînerait un comportement imprévisible. C'est une mauvaise habitude d'entrer dans et tandis que la dynamique peut ne pas être la meilleure solution. foreach($_POST as $key => $value)
{
switch($key)
{
case "name":
$name = $value;
break;
case "last":
$last = $value;
break;
}
}
C'est un excellent conseil. Les autres postes introduisent potentiellement la buggy et certainement un code non sécurisé.
@jake je viens de réaliser que je l'ai fait -1, cependant, vous devrez me croire que ce n'était pas une vengeance devote, car je n'ai même pas remarqué qui l'a affiché. Toutes mes excuses pour ne pas quitter un commentaire. La raison en est que ce n'est pas dynamique, est très verbose et le rend encore plus difficile à mettre à jour le code avec des noms neufs / modifiés. Peut-être qu'ils n'en ont pas besoin. Mais s'ils veulent une extraction dynamique, il existe d'autres moyens d'éviter toute écrasement. Si vous éditez votre réponse (mon vote est verrouillé en ce moment) avec un peu d'expansion à ce sujet, je vais certainement supprimer mon bowvote, aucun sentiment difficile.
@jakenoble - Fait et j'ai également étendu ma réponse basée sur cette discussion. Merci pour votre contribution.
J'ai fait un test. Son ne fonctionne pas. Il y a 10 valeurs de formulaire publiées, mais ce code renvoie uniquement les valeurs du dernier formulaire.
Pourquoi ne pas utiliser un foreach code>?
J'allais utiliser le forach mais la commande Extraction est incroyable. C'est vraiment le travail à la main.
J'ai fait un test. Son ne fonctionne pas. Il y a 10 valeurs de formulaire publiées, mais ce code renvoie uniquement les valeurs du dernier formulaire.
Je veux juste mentionner que vous pouvez améliorer la technique de foreseach car nous avons en HTML la possibilité de nommer l'un de nos champs de formulaire à l'aide de la notation de support carré, et si nous le faisons, ce que HTML va faire est qu'il soumettra une série de Valeurs comme une matrice.
$args = $_POST['user'];
Si vous utilisez
extrait code>, faites attention aux ramifications de sécurité potentielles détaillées dans le manuel PHP.