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!

empty()es no correcto para la opción # 1, ya que en php, la cadena'0'es equivalente afalse- yempty()regresatruepara todos los valores equivalentes a falso . Entoncesempty, 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.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.
fuente
empty()es no correcto en este caso, debido a que en php, la cadena'0'es equivalente afalse- yempty()regresatruepara todos los valores equivalentes a falso . Entoncesempty, al usar , el código omitiría la impresión si el valor fuera'0'.Sorprendido que no se haya mencionado
fuente
isset($_POST['fromPerson']estátrue, aunqueif($_SERVER['REQUEST_METHOD'] == 'POST'seafalse. A menos que exista tal situación, todo lo que se necesita es laisset...pieza.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 sifromPersonfuera un nombre de envío, es posible que no esté presente en POST.fuente
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 nuloLa 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:
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
Pero hay algunos casos que dependen de su lógica donde
isset()y tambiénempty()pueden ser buenos.fuente
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 afalse- yempty()regresatruepara todos los valores equivalentes a falso . Entoncesempty, 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.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:
fuente
issetsolución cuando el campo de publicación está establecido pero contiene NULL. Esta es una buena alternativa , si desea permitir la entradaNULLen laelsesucursal. Sin embargo , es un error si se necesita una cadena; en esa situaciónissethace lo correcto, pero este código no - pasará elNULLvalor. La respuesta posterior de Robert demuestra la diferencia.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
fuente
issetes mucho más legible que una expresión de filtro. Pero gracias por señalar esto; es una opción útil a considerar.empty, tropezadas por la escritura suelta de php; es difícil imaginar que acceder a $ _POST se consideraría deficiente estilo.)Tratar
fuente
empty($_POST['fromPerson'])hace esta prueba combinada. Más fácil de leer y escribir :)empty('0')devuelvetrue. Entonces no es lo mismo.Intenta ?
isset($_POST['fromPerson'])fuente
fuente
is_array()comprueba si es una matriz, la segunda parte comprueba si tiene un elemento con la clave'fromPerson'.if( isset($_POST['fromPerson']) )es correcto.Puede usar una función y regresar, mejor que dirigir el eco.
fuente
Me gusta comprobar si está configurado y si está vacío en un operador ternario.
fuente
empty('0')estrue. Así que mejor no tenerversion0, ouserID0, etc.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:
Como
$_POSTes una matriz, si el script se carga y no hay datos presentes en el$_POSTvariable, 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".fuente