Vérifier si $ _POST existe

101

J'essaie de vérifier si un $ _POST existe et si c'est le cas, imprimez-le dans une autre chaîne, sinon, ne l'imprimez pas du tout.

quelque chose comme ça:

$fromPerson = '+from%3A'.$_POST['fromPerson'];

function fromPerson() {
    if !($_POST['fromPerson']) {
        print ''
    } else {
        print $fromPerson
    };
}

$newString = fromPerson();

Toute aide est la bienvenue!

eliwedel
la source

Réponses:

171
if( isset($_POST['fromPerson']) )
{
     $fromPerson = '+from%3A'.$_POST['fromPerson'];
     echo $fromPerson;
}
ehmad
la source
60

Facile. Vous avez deux choix:

1. Vérifiez s'il n'y a AUCUNE donnée de publication

//Note: This resolves as true even if all $_POST values are empty strings
if (!empty($_POST))
{
    // handle post data
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}

(OU)

2. Vérifiez uniquement si une clé PARTICULIER est disponible dans les données post

if (isset($_POST['fromPerson']) )
{
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}
Dheeraj Bhaskar
la source
Selon le commentaire de Shi sur la réponse d'Augustus Francis , empty()n'est pas correct pour le choix n ° 1, car en php, la chaîne '0'est équivalente à false- et empty()renvoie truepour toutes les valeurs équivalentes à false . Donc, en utilisant empty, le code ignorerait l'impression si la valeur était '0'. Si vous souhaitez exclure la chaîne vide, consultez la réponse d'Augustus.
ToolmakerSteve
33

Tout le monde dit d'utiliser isset () - ce qui fonctionnera probablement pour vous.

Cependant, il est important que vous compreniez la différence entre

$_POST['x'] = NULL; et $_POST['x'] = '';

isset($_POST['x'])reviendra falsesur le premier exemple, mais reviendra truesur le second même si si vous essayez d'imprimer l'un ou l'autre, les deux renverront une valeur vide.

Si votre $_POSTvient d'un champ / formulaire saisi par l'utilisateur et est laissé vide, JE CROIS (je ne suis pas sûr à 100% à ce sujet cependant) que la valeur sera "" mais PAS NULL.

Même si cette hypothèse est incorrecte (s'il vous plaît, corrigez-moi si je me trompe!), Ce qui précède est toujours bon à savoir pour une utilisation future.

Rafael
la source
4
empty () vérifie l'existence d'une variable et une valeur non vide, c'est donc la fonction à utiliser lorsqu'une chaîne vide doit retourner false.
Han Dijk
1
@HanDijk - selon le commentaire de Shi sur la réponse d'Augustus Francis , empty()n'est pas correct ici, car en php, la chaîne '0'est équivalente à false- et empty()renvoie truepour toutes les valeurs équivalentes à false . Donc, en utilisant empty, le code ignorerait l'impression si la valeur était '0'.
ToolmakerSteve
30

Surpris qu'il n'ait pas été mentionné

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){
John Magnolia
la source
2
Pourquoi? Si la méthode serveur n'est pas POST, la variable POST ne sera pas définie, donc la seconde moitié est tout ce qui est nécessaire. Ai-je tort?
ToolmakerSteve
@ToolmakerSteve oui dans la plupart des cas, cela suffit mais pas toujours ma réponse était de montrer une autre façon de le faire.
John Magnolia
Cela fonctionnera également si vous avez un formulaire avec des cases à cocher et que vous soumettez sans nom.
John Magnolia
2
Décrivez une situation où isset($_POST['fromPerson']est true, même si if($_SERVER['REQUEST_METHOD'] == 'POST'c'est false. À moins qu'il n'y ait une telle situation, il suffit de la isset...pièce.
ToolmakerSteve
C'est vrai, mais c'est l'inverse. fromPersonpeut ne pas être présent, mais POST peut toujours exister. La question était: "Si $ _POST existe." et seulement dans un exemple, $ _POST ['fromPerson'] est utilisé. Dans certaines situations, comme @goat le décrit ici , même s'il fromPersons'agissait d'un nom Submit, il peut ne pas être présent dans POST.
papo
19
isset($_POST['fromPerson']) 
h3xStream
la source
13

La bonne façon de vérifier si la clé de tableau existe est la fonction array_key_exists()

La différence est que lorsque vous l'avez, $_POST['variable'] = nullcela signifie que la clé existe et a été envoyée mais que la valeur était nulle

L'autre option est isset()celle qui vérifiera si la clé du tableau existe et si elle a été définie

La dernière option est d'utiliser empty()ce qui vérifiera si la clé du tableau existe si elle est définie et si la valeur n'est pas considérée comme vide.

Exemples:

$arr = [
  'a' => null,
  'b' => '',
  'c' => 1
];

array_key_exists('a', $arr); // true
isset($arr['a']); // false
empty($arr['a']); // true


array_key_exists('b', $arr); // true
isset($arr['b']); // true
empty($arr['b']); // true


array_key_exists('c', $arr); // true
isset($arr['c']); // true
empty($arr['c']); // false

Concernant votre question

La bonne façon de vérifier si la valeur a été envoyée est d'utiliser array_key_exists () avec vérification de la méthode de requête

if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('fromPerson', $_POST)    
{
   // logic
}

Mais il y a des cas qui dépendent de votre logique où isset()et empty()peuvent être bons aussi.

Robert
la source
Réponse fantastique, à l'exception de la suggestion à utiliser empty. Selon le commentaire de Shi sur la réponse d'Augustus Francis , empty()n'est pas correct comme choix alternatif, car en php, la chaîne '0'est équivalente à false- et empty()renvoie truepour toutes les valeurs équivalentes à false . Donc, en utilisant empty, le code ignorerait l'impression si la valeur était '0'. Si vous souhaitez exclure la chaîne vide, consultez la réponse d'Augustus.
ToolmakerSteve
Meilleure réponse +1.
Viktor Joras
9
  • Dans ce cas, l'utilisation de la méthode issetn'est pas appropriée.

Selon la documentation PHP: http://php.net/manual/en/function.array-key-exists.php
(voir Exemple # 2 array_key_exists () vs isset () )
La méthode array_key_existsest destinée à vérifier la présence de clé dans un tableau.

Ainsi, le code de la question peut être modifié comme suit:

function fromPerson() {
   if (array_key_exists('fromPerson', $_POST) == FALSE) {
        return '';
   } else {
        return '+from%3A'.$_POST['fromPerson'];
   };
}

$newString = fromPerson();


  • Vérifier la présence du tableau $ _POST n'est pas nécessaire car il s'agit d'une variable globale d'environnement PHP depuis la version 4.1.0 (de nos jours nous ne rencontrons pas les anciennes versions de PHP).
Bronek
la source
Ce code diffère uniquement dans le comportement de la issetsolution lorsque le champ de publication est défini mais contient NULL. C'est une bonne alternative , si vous souhaitez autoriser NULLdans la elsebranche. Cependant , c'est une erreur, si une chaîne est nécessaire; dans cette situation issetfait la bonne chose, mais ce code ne le fait pas - il transmettra la NULLvaleur. La réponse ultérieure de Robert démontre la différence.
ToolmakerSteve
6

Toutes les méthodes sont en fait déconseillées, c'est un avertissement dans Netbeans 7.4 et c'est sûrement une bonne pratique de ne pas accéder directement aux variables super globales, utilisez un filtre à la place

$fromPerson = filter_input(INPUT_POST, 'fromPerson', FILTER_DEFAULT);
if($fromPerson === NULL) { /*$fromPerson is not present*/ }
else{ /*present*/ }
var_dump($fromPerson);exit(0);
linuxatico
la source
1
D'autre part, la lisibilité du code est également importante. IMHO, issetest beaucoup plus lisible qu'une expression de filtre. Mais merci de l'avoir signalé; c'est une option utile à considérer.
ToolmakerSteve
eh bien, vous pouvez écrire votre propre métod d'encapsulation myIsset / 2 qui utilise des filtres mais qui a le comportement de isset / 2
linuxatico
«Toutes les méthodes sont en fait déconseillées» - c'est une déclaration forte (même si NetBeans marque comme un avertissement). Avez-vous un lien vers une source faisant autorité , qui décourage les références directes à $ _POST? (Il y a beaucoup de choses à propos de php qui sont conçues pour la commodité du codage plutôt que pour la rigueur - regardez combien de personnes dans les réponses à cette question l'utilisent de manière incorrecte empty, déclenchées par la saisie lâche de php; il est difficile d'imaginer qu'accéder à $ _POST serait considéré comme médiocre style.)
ToolmakerSteve
4

Essayer

if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
    echo "Cool";
}
Augustus Francis
la source
Selon le commentaire de Han Dijk sur la réponse de Rafael, empty($_POST['fromPerson'])ce test combiné. Plus facile à lire et à taper :)
ToolmakerSteve
@ToolmakerSteve: empty('0')retourne true. Ce n'est donc pas pareil.
Shi
1
@Shi - oui, vous avez raison; ce que j'ai dit est faux! Il semble qu'il n'y ait pas de solution plus simple que le code présenté ici.
ToolmakerSteve
3

Essayez ?isset($_POST['fromPerson'])

strager
la source
3
if (is_array($_POST) && array_key_exists('fromPerson', $_POST)) {
    echo 'blah' . $_POST['fromPerson'];
}
jezmck
la source
1
Is_array ($ _ POST) vérifie-t-il s'il y a des valeurs dans POST? Dans mon application, j'essaie de déterminer s'il y avait un message ou pas avant de faire autre chose.
Jeff LaFay
1
Voir ma modification. is_array()vérifie s'il s'agit d'un tableau, la deuxième partie vérifie s'il contient un élément avec la clé 'fromPerson'.
jezmck
2

if( isset($_POST['fromPerson']) ) est correct.

Vous pouvez utiliser une fonction et retourner, mieux que diriger l'écho.

Cristian Weiser
la source
2
Cette réponse n'ajoute rien à la discussion, qui n'a pas déjà été dit dans d'autres réponses, des années auparavant.
ToolmakerSteve
1

J'aime vérifier s'il est défini et s'il est vide dans un opérateur ternaire.

// POST variable check
$userID  = (isset( $_POST['userID'] )    && !empty( $_POST['userID'] ))   ? $_POST['userID']   :  null;
$line    = (isset( $_POST['line'] )      && !empty( $_POST['line'] ))     ? $_POST['line']     :  null;
$message = (isset( $_POST['message'] )   && !empty( $_POST['message'] ))  ? $_POST['message']  :  null;
$source  = (isset( $_POST['source'] )    && !empty( $_POST['source'] ))   ? $_POST['source']   :  null;
$version = (isset( $_POST['version'] )   && !empty( $_POST['version'] ))  ? $_POST['version']  :  null;
$release = (isset( $_POST['release'] )   && !empty( $_POST['release'] ))  ? $_POST['release']  :  null;
Raymondim
la source
5
empty('0')est true. Alors mieux vaut ne pas avoir version 0, ou userID 0, etc.
Shi
0

Je voudrais ajouter ma réponse même si ce fil a des années et qu'il est classé haut dans Google pour moi.

Ma meilleure méthode est d'essayer:

if(sizeof($_POST) !== 0){
// Code...
}

Tout $_POSTcomme un tableau, si le script se charge et qu'aucune donnée n'est présente dans la $_POSTvariable, il aura une longueur de tableau de 0. Cela peut être utilisé dans une instruction IF.

Vous vous demandez peut-être aussi si cela génère une erreur "index indéfini", comme si nous vérifions si $_POSTest défini ... En fait $_POSTexiste toujours, l'erreur "index indéfini" n'apparaîtra que si vous essayez de rechercher un $ _POST valeur de tableau qui n'existe pas.

$_POSTexiste toujours en soi, soit vide, soit a des valeurs de tableau. $_POST['value']peut ne pas exister, générant ainsi une erreur "index indéfini".

Jack Wright
la source