2011-04-15 20 views
8

Duplicar posible:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”Undefined index en PHP

Buenos días!

estoy teniendo el siguiente error en mi código:

<?php 
if (!$_POST['SUBMIT']){ //ERROR: Undefined index 
?> 
    <H2>Add Employee</H2> 
    <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="POST"> 
    <table width="400" border="0" cellspacing="1" cellpadding="2"> 
     <tr> 
      <td width="100">SSN</td> 
      <td><input name="SSN" type="text" id="SSN"></td> 
     </tr> 
     <tr> 
      <td width="100">&nbsp;</td> 
      <td><input name="SUBMIT" type="SUBMIT" id="ADD" value="ADD"></td> 
     </tr> 
    </table> 
    </form> 
<?php 
    } 
    else { 
    //code here 
    } 
?> 

¿Cómo puedo eliminar el error anterior? Gracias.

+0

intente hacer un 'print_r ($ _ POST)' o 'var_dump ($ _ POST)' y vea primero lo que hay en el conjunto – kjy112

+4

Intente usar 'isset()' y '! Empty' en lugar de'! $ _ POST'. – Robik

+0

@ kjy112 Array() – newbie

Respuesta

14

Debe ser un aviso y no un error.

Para solucionar es que tendrá que comprobar si $_POST['submit'] se establece:

if(!isset($_POST['submit'])) { 
    ... 
} 
4
<?php 
    if (!isset($_POST['SUBMIT'])){ //ERROR: Undefined index 
?> 

Esta prueba, si el índice se establece

7

Es el lugar donde se prueba para ver que es ISN' t ahi Debe ser !isset($_POST['SUBMIT']). Esto se debe a que el índice SUBMIT no se configurará, por lo que no tendrá un valor como verdadero para pasar el if(...). isset() comprueba si el índice/variable está realmente configurado.

Prueba esto:

<?php 
    if (!isset($_POST['SUBMIT'])){ //ERROR: Undefined index 
?> 
<H2>Add Employee</H2> 
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="POST"> 
<table width="400" border="0" cellspacing="1" cellpadding="2"> 
    <tr> 
     <td width="100">SSN</td> 
     <td><input name="SSN" type="text" id="SSN"></td> 
    </tr> 
    <tr> 
     <td width="100">&nbsp;</td> 
     <td><input name="SUBMIT" type="SUBMIT" id="ADD" value="ADD"></td> 
    </tr> 
</table> 
</form> 
<?php 
    } 
    else { 
    //code here 
    } 
?> 
3

Opciones:

  • mensajes de advertencia deshabilitar, mediante la edición de la configuración en php.ini
  • Añadir un signo @ delante del nombre de la variable, que se suprime el error en esa línea en particular.
  • Cambie su código para usar isset($_POST['SUBMIT']) antes de seguir controlando.

De estos, la tercera opción es definitivamente la mejor. No debe suponer que cualquier variable proporcionada por el usuario se configurará como espera; siempre debe verificar que esté configurado, y también que esté configurado a los valores esperados. De lo contrario, es probable que esté abierto a ataques de piratería.

+1

Los dos primeros puntos que sugiere son malas prácticas y yo no recomendaría. La única vez que desea desactivar las advertencias es cuando ejecuta la producción. Nunca use @, nunca. Siempre hay una mejor alternativa. –

+0

@Ollie - De acuerdo, dije que las opciones están disponibles, pero no las recomendé; Expliqué explícitamente que la opción 'isset()' era la indicada. – Spudley