Compruebe si existe $ _POST

100

Estoy tratando de verificar si existe un $ _POST y, si lo hace, imprimirlo dentro de otra cadena, si no, no imprimir en absoluto.

algo como esto:

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

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

$newString = fromPerson();

¡Cualquier ayuda sería genial!

eliwedel
fuente

Respuestas:

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

Sencillo. Tienes dos opciones:

1. Comprueba si hay ALGUNA información de publicación

//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;
}

(O)

2. Solo verifique si una clave PARTICULAR está disponible en los datos de publicación

if (isset($_POST['fromPerson']) )
{
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}
Dheeraj Bhaskar
fuente
De acuerdo con el comentario de Shi sobre la respuesta de Augusto Francisco , empty()es no correcto para la opción # 1, ya que en php, la cadena '0'es equivalente a false- y empty()regresa truepara todos los valores equivalentes a falso . Entonces empty, al usar , el código omitiría la impresión si el valor fuera '0'. Si desea excluir la cadena vacía, consulte la respuesta de Augustus.
ToolmakerSteve
33

Todo el mundo dice que use isset (), que probablemente funcione para usted.

Sin embargo, es importante que comprenda la diferencia entre

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

isset($_POST['x'])volverá falseen el primer ejemplo, pero volverá trueen el segundo aunque si intenta imprimir cualquiera de los dos, ambos devolverán un valor en blanco.

Si $_POSTviene de un campo / formulario introducido por el usuario y se deja en blanco, CREO (aunque no estoy 100% seguro de esto) que el valor será "" pero NO NULO.

Incluso si esa suposición es incorrecta (¡que alguien me corrija si me equivoco!), Es bueno saber lo anterior para uso futuro.

Rafael
fuente
4
empty () comprueba la existencia de variables y un valor no vacío, por lo que esa es la función que se debe usar cuando una cadena vacía debe devolver falso.
Han Dijk
1
@HanDijk - de acuerdo con el comentario de Shi sobre la respuesta de Augusto Francisco , empty()es no correcto en este caso, debido a que en php, la cadena '0'es equivalente a false- y empty()regresa truepara todos los valores equivalentes a falso . Entonces empty, al usar , el código omitiría la impresión si el valor fuera '0'.
ToolmakerSteve
30

Sorprendido que no se haya mencionado

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){
John Magnolia
fuente
2
¿Por qué? Si el método del servidor no es POST, la variable POST no se establecerá, por lo que la segunda mitad es todo lo que se necesita. ¿Me equivoco?
ToolmakerSteve
@ToolmakerSteve sí, en la mayoría de los casos es suficiente, pero no siempre mi respuesta fue mostrar otra forma de hacerlo.
John Magnolia
También funcionará si tiene un formulario con casillas de verificación y lo envía sin nombre.
John Magnolia
2
Describe una situación donde isset($_POST['fromPerson']está true, aunque if($_SERVER['REQUEST_METHOD'] == 'POST'sea false. A menos que exista tal situación, todo lo que se necesita es la isset...pieza.
ToolmakerSteve
Es cierto, pero es al revés. fromPersonPuede que no esté presente, pero POST aún puede existir. La pregunta era: "Si $ _POST existe". y solo en un ejemplo, se usa $ _POST ['fromPerson']. En algunas situaciones, como @goat describe aquí , incluso si fromPersonfuera un nombre de envío, es posible que no esté presente en POST.
papo
19
isset($_POST['fromPerson']) 
h3xStream
fuente
13

La forma correcta de verificar si existe una clave de matriz es la función array_key_exists()

La diferencia es que cuando lo tienes $_POST['variable'] = nullsignifica que la clave existe y se envió pero el valor era nulo

La otra opción es isset()cuál verificará si existe una clave de matriz y si se configuró

La última opción es usar empty()que verificará si existe una clave de matriz si está configurada y si el valor no se considera vacío.

Ejemplos:

$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

Con respecto a su pregunta

La forma correcta de verificar si se envió el valor es usar array_key_exists () con verificación del método de solicitud

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

Pero hay algunos casos que dependen de su lógica donde isset()y también empty()pueden ser buenos.

Robert
fuente
Respuesta fantástica, excepto por la sugerencia de uso empty. De acuerdo con el comentario de Shi sobre la respuesta de Augusto Francisco , empty()es no correcta como una opción alternativa, porque en php, la cadena '0'es equivalente a false- y empty()regresa truepara todos los valores equivalentes a falso . Entonces empty, al usar , el código omitiría la impresión si el valor fuera '0'. Si desea excluir la cadena vacía, consulte la respuesta de Augustus.
ToolmakerSteve
Mejor respuesta +1.
Viktor Joras
9
  • En ese caso, usar el método issetno es apropiado.

De acuerdo con la documentación de PHP: http://php.net/manual/en/function.array-key-exists.php
(ver Ejemplo # 2 array_key_exists () vs isset () )
El método array_key_existsestá diseñado para verificar la presencia de claves en la matriz.

Entonces, el código en la pregunta podría cambiarse de la siguiente manera:

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

$newString = fromPerson();


  • No es necesario comprobar la presencia de la matriz $ _POST porque es una variable global del entorno PHP desde la versión 4.1.0 (hoy en día no encontramos versiones anteriores de PHP).
Bronek
fuente
Este código solo difiere en comportamiento de la issetsolución cuando el campo de publicación está establecido pero contiene NULL. Esta es una buena alternativa , si desea permitir la entrada NULLen la elsesucursal. Sin embargo , es un error si se necesita una cadena; en esa situación issethace lo correcto, pero este código no - pasará el NULLvalor. La respuesta posterior de Robert demuestra la diferencia.
ToolmakerSteve
6

Todos los métodos están realmente desaconsejados, es una advertencia en Netbeans 7.4 y seguramente es una buena práctica no acceder directamente a las variables superglobales, use un filtro en su lugar

$fromPerson = filter_input(INPUT_POST, 'fromPerson', FILTER_DEFAULT);
if($fromPerson === NULL) { /*$fromPerson is not present*/ }
else{ /*present*/ }
var_dump($fromPerson);exit(0);
linuxatico
fuente
1
Por otro lado, la LECTURA del código también es importante. En mi humilde opinión, issetes mucho más legible que una expresión de filtro. Pero gracias por señalar esto; es una opción útil a considerar.
ToolmakerSteve
bueno, puede escribir su propio método contenedor myIsset / 2 que usa filtros pero tiene el comportamiento de isset / 2
linuxatico
"Todos los métodos están realmente desaconsejados" - esa es una declaración fuerte (incluso si NetBeans marca como una advertencia). ¿Tiene un enlace a una fuente autorizada que desaliente las referencias directas a $ _POST? (Hay mucho acerca de php que está diseñado para codificar conveniencia en lugar de rigor; mire cuántas personas en las respuestas a esta pregunta usan incorrectamente empty, tropezadas por la escritura suelta de php; es difícil imaginar que acceder a $ _POST se consideraría deficiente estilo.)
ToolmakerSteve
4

Tratar

if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
    echo "Cool";
}
Augustus Francis
fuente
Según el comentario de Han Dijk sobre la respuesta de Rafael, empty($_POST['fromPerson'])hace esta prueba combinada. Más fácil de leer y escribir :)
ToolmakerSteve
@ToolmakerSteve: empty('0')devuelve true. Entonces no es lo mismo.
Shi
1
@Shi - sí, tienes razón; lo que dije está mal! Parece que no hay una solución más simple que el código que se muestra aquí.
ToolmakerSteve
3

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

extraño
fuente
3
if (is_array($_POST) && array_key_exists('fromPerson', $_POST)) {
    echo 'blah' . $_POST['fromPerson'];
}
jezmck
fuente
1
¿Is_array ($ _ POST) verifica si hay algún valor en POST? En mi aplicación, intento determinar si hubo una publicación o no antes de hacer cualquier otra cosa.
Jeff LaFay
1
Ver mi edición. is_array()comprueba si es una matriz, la segunda parte comprueba si tiene un elemento con la clave 'fromPerson'.
jezmck
2

if( isset($_POST['fromPerson']) ) es correcto.

Puede usar una función y regresar, mejor que dirigir el eco.

Cristian Weiser
fuente
2
Esta respuesta no agrega nada a la discusión, que ya no se dijo en otras respuestas, años antes.
ToolmakerSteve
1

Me gusta comprobar si está configurado y si está vacío en un operador ternario.

// 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
fuente
5
empty('0')es true. Así que mejor no tener version 0, o userID 0, etc.
Shi
0

Me gustaría agregar mi respuesta a pesar de que este hilo tiene años y ocupó un lugar destacado en Google para mí.

Mi mejor método es probar:

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

Como $_POSTes una matriz, si el script se carga y no hay datos presentes en el$_POST variable, tendrá una longitud de matriz de 0. Esto se puede usar en una instrucción IF.

También puede preguntarse si esto arroja un error de "índice indefinido", ya que estamos verificando si $_POSTestá configurado ... De hecho, $_POSTsiempre existe, el error "índice indefinido" solo aparecerá si intenta buscar un $ _POST valor de matriz que no existe.

$_POSTsiempre existe en sí mismo estando vacío o tiene valores de matriz. $_POST['value']puede no existir, lo que arroja un error de "índice indefinido".

Jack Wright
fuente