2010-12-16 73 views
10

Estoy trabajando en un carrito de compras en PHP y parece que estoy obteniendo este error "Aviso: índice indefinido:" en todo tipo de lugares. El error se refiere a la codificación similar en diferentes lugares. Por ejemplo, tengo una pieza de codificación que calcula un precio de paquete con los meses que un usuario decide suscribirse. Tengo las siguientes variables en las que los errores se refieren a:Error de PHP: Aviso: Índice indefinido:

$month = $_POST['month']; 
    $op = $_POST['op']; 

El mes variable $ es el número de las entradas del usuario en un formulario, y la variable $ op es diferente paquetes cuyo valor se almacenan en una vriable que un usuario selecciona de botones de radio en el formulario.

Espero que esté claro de alguna manera.

Gracias

EDIT: Lo sentimos olvidó mencionar que no desaparecen cuando el usuario envía los datos. Pero cuando llegan por primera vez a la página, muestra este error. ¿Cómo puedo deshacerme de él para que no lo muestre?

-

Este es el código:

<?php 
    $pack_1 = 3; 
    $pack_2 = 6; 
    $pack_3 = 9; 
    $pack_4 = 12; 
    $month = $_POST['month']; 
    $op = $_POST['op']; 
    $action = $_GET['action']; 

    if ($op == "Adopter") { 
     $answer = $pack_1 * $month; 
    } 

    if ($op == "Defender") { 
     $answer = $pack_2 * $month; 
    } 

    if ($op == "Protector") { 
     $answer = $pack_3 * $month; 
    } 

    if ($op == "Guardian") { 
     $answer = $pack_4 * $month; 
    } 

    switch($action) { 
     case "adds": 
      $_SESSION['cart'][$answer][$op]; 
      break; 
    } 
?> 
+1

Publique el resto de su código. El error de índice no definido significa que los datos de publicación para esa clave no se envían, siendo los índices 'mes' y 'op'. Algo vuelve a establecer NULL o no se envían y hay un problema con el formulario. – DeaconDesperado

+0

Por favor, ponga todo su código ... para que podamos revisarlo. –

+1

EDITAR: Perdón por olvidar que desaparecen cuando el usuario envía los datos. Pero cuando llegan por primera vez a la página, muestra este error. ¿Cómo puedo deshacerme de él para que no lo muestre? – PHPNOOB

Respuesta

27

Está intentando acceder a índices del dentro de una matriz y que no figuren. Esto genera un aviso.

Probablemente ya lo esté notando porque su código se ha movido a un servidor donde php.ini tiene error_reporting configurado para incluir E_NOTICE. O bien suprimir avisos mediante el establecimiento de error_reporting a E_ALL & ~E_NOTICE (no recomendado), o comprobar que existe el índice antes de intentar acceder a ella:

$month = array_key_exists('month', $_POST) ? $_POST['month'] : null; 
0

Creo que no puede haber elementos de formulario por nombre 'mes' o 'op' . ¿Puede verificar si el código fuente HTML (de la página que produce un error cuando se envía) tiene elementos html por encima de los nombres

0

índice indefinido significa que la clave del conjunto no está establecida, haga un var_dump($_POST);die(); antes de la línea que arroja el error y ver que estás tratando de obtener una clave de matriz que no existe.

0

solo significa que la matriz, $ _POST en este caso, no tiene un elemento denominado indefinido en su error. PHP emite un AVISO en lugar de una ADVERTENCIA de ERROR FATAL.

Puede conectarse ya sea a través de php.ini menos eventos de edición o enfrentarse a ella por primera comprobación de si los elementos de hecho es que ya está iniciado utilizando isset()

3

Obviamente $ _POST [ 'meses'] no se establece. Tal vez haya un error en la definición de su formulario HTML, o tal vez algo más está causando esto. Cualquiera que sea la causa, usted debe comprobar siempre si existe una variable antes de usarla, por lo

if(isset($_POST['month'])) { 
    $month = $_POST['month']; 
} else { 
    //month is not set, do something about it, raise an error, throw an exception, orwahtever 
} 
+0

Personalmente evito 'is_set', ya que devuelve false si '$ _POST ['month']' se ha establecido en 'null'. Cuando realmente quiere preguntar si la clave de matriz existe, use 'array_key_exists'. – meagar

+2

@meagar: es poco probable que cualquier var '' _POST [] 'contenga un' NULL' si se origina a partir de 'multipart/form-data'. Eso solo sería un problema si las subfunciones inyectan estado a través de $ _POST, lo que debería ser mucho más preocupante que diferenciar entre nulo y no establecido. – mario

2

How I can get rid of it so it doesnt display it?

La gente aquí está tratando de decir que es poco profesional (y lo es), pero en su caso simplemente debe agregar siguiente al inicio de su aplicación:

error_reporting(E_ERROR|E_WARNING); 

Esto deshabilitará los informes E_NOTICE. E_NOTICES no son errores, sino avisos, como dice su nombre. Será mejor que verifique estas cosas y pruebe que las variables indefinidas no generan errores.Pero el caso común es que son informales y perfectamente normales para manejar entradas de formularios con PHP.

Además, la próxima vez Google el mensaje de error primero.

+0

A juzgar por su último comentario, creo que no está verificando primero el envío del formulario. Los avisos se plantean porque cualquier procesamiento se está llevando a cabo en datos que aún no se han enviado. – DeaconDesperado

+0

@DeaconDesperado: Probable. El único fragmento parece como si los vars de entrada $ _POST estuvieran localizados al comienzo del script sin importar qué. El procesamiento puede ser desencadenado por otro 'si' o simplemente por el estado booleano de una de esas variables. ... Nunca lo averiguaremos:} – mario

+1

y seguirá siendo uno de los grandes misterios de nuestra era ... que no impedirá que se publique una y otra vez jajaja. – DeaconDesperado

13

¿Está colocando el procesador de formularios en el mismo script que el formulario? Si es así, está intentando procesar antes de que se establezcan los valores de la publicación (todo se está ejecutando).

Ajustar todo el código de procesamiento en un condicional que verifica si el formulario incluso se ha enviado.

if(isset($_POST) && array_key_exists('name_of_your_submit_input',$_POST)){ 
//process form! 
}else{ 
//show form, don't process yet! You can break out of php here and render your form 
} 

Los scripts se ejecutan de arriba hacia abajo cuando se programa de forma procedural. Debe asegurarse de que el programa sepa ignorar la lógica de procesamiento si el formulario no se ha enviado. Del mismo modo, después del procesamiento, debe redirigir a una página de éxito con algo como

header('Location:http://www.yourdomainhere.com/formsuccess.php'); 

que no conseguiría en el hábito de avisos suprimiendo o errores.

No se ofenda si sugiero que, si tiene estos problemas y está intentando crear un carrito de compras, utilice una solución madura de comercio electrónico como Magento u OsCommerce. Un carrito de compras es una interfaz que requiere un alto grado de seguridad y si está luchando con este tipo de problemas POST, le garantizo que estará lleno de dolores de cabeza más adelante. Hay muchos lanzamientos estables geniales, algunos tan simples como meros modelos de objetos, que están disponibles para descargar.

+0

hola, sí, el formulario está en la misma página que el script, así que creo que ese es uno de los problemas, poner el código de informe de error ha eliminado el error ahora, pero estoy teniendo problemas con otros bits de código, así que creo que realmente necesito reestructurar todo! – PHPNOOB

+0

Desafortunadamente no puedo usar ningún carrito, ya que es parte de un proyecto en el que tenemos que crear un sitio web dinámico en PHP donde los usuarios puedan adoptar animales, etc., así que tenemos que programarlo desde cero, y se ha vuelto más complejo por el De manera que el profesor quiere que todo se termine, – PHPNOOB

+0

Ah, entonces esto sería tarea. Esa es una palabra algo delicada alrededor de estas partes jajaja. http://www.webforcecart.com/ – DeaconDesperado

-1

aparentemente, la (s) variable (s) GET y/o POST no existen. simplemente prueba si es "isset". (Pseudocódigo):

if(isset($_GET['action'];)) {$action = $_GET['action'];} else { RECOVER FROM ERROR CODE } 
2

Estos son mensajes de notificación simplemente php, parece configuraciones de php.ini no están de acuerdo con los estándares de vtiger, se puede desactivar este mensaje estableciendo informe de errores a E_ALL & ~ E_NOTICE enphp.ini Por ejemplo error_reporting(E_ALL&~E_NOTICE) y luego reinicia apache para reflejar los cambios.

0

Asegúrate de haber utilizado method = "post" en el formulario desde el que envías los datos.

-3

Nunca debe confiar en vars POSTed o GETed sin la debida desinfección de la entrada. En su ejemplo, incluso si existe $ month, no puede estar seguro de que sea un número. Dicho esto en primer lugar, se debe añadir algo como esto a la parte superior de las secuencias de comandos:

// Stop PHPs dangerous name handling 
function undefined_name_error($errno, $errstr, $errfile='', $errline=0, $errcontext=NULL) { 
    if (stripos($errstr, 'undefined') !== false) 
     return trigger_error("$errstr in $errfile on line $errline;\t", E_USER_ERROR); 
    else 
     return false; 
} 
set_error_handler('undefined_name_error', E_NOTICE); 

Y si la secuencia de comandos no funciona después, usted tiene que fijar su código.

+1

Esta respuesta no agrega nada a las anteriores.Por favor, lea la respuesta anterior antes de responder. Especialmente en preguntas de 4 años. –

1

Prueba esto:

$month = (isset($_POST['month'])) ? $_POST['month'] : ''; 

$op = (isset($_POST['op'])) ? $_POST['op'] : ''; 
0
<?php 
if ($_POST['parse_var'] == "contactform"){ 


     $emailTitle = 'New Email From KumbhAqua'; 
     $yourEmail = '[email protected]'; 

     $emailField = $_POST['email']; 
     $nameField = $_POST['name']; 
     $numberField = $_POST['number']; 
     $messageField = $_POST['message']; 

     $body = <<<EOD 
<br><hr><br> 
    Email: $emailField <br /> 
    Name: $nameField <br /> 
    Message: $messageField <br /> 


EOD; 

    $headers = "from: $emailField\r\n"; 
    $headers .= "Content-type: text/htmml\r\n"; 
    $success = mail("$yourEmail", "$emailTitle", "$body", "$headers"); 

    $sent ="Thank You ! Your Message Has Been sent."; 

} 

?> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>:: KumbhAqua ::</title> 

    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> 
     <link rel="stylesheet" href="style1.css" type="text/css"> 

</head> 

<body> 
    <div class="container"> 
     <div class="mainHeader"> 
      <div class="transbox"> 

       <p><font color="red" face="Matura MT Script Capitals" size="+5">Kumbh</font><font face="Matura MT Script Capitals" size="+5" color=                   "skyblue">Aqua</font><font color="skyblue"> Solution</font></p> 
       <p ><font color="skyblue">Your First Destination for Healthier Life.</font></p> 
        <nav><ul> 
         <li> <a href="KumbhAqua.html">Home</a></li> 
         <li> <a href="aboutus.html">KumbhAqua</a></li> 
         <li> <a href="services.html">Products</a></li> 
         <li class="active"> <a href="contactus.php">ContactUs</a></li> 

        </ul></nav> 
       </div> 
      </div> 
     </div> 
        <div class="main"> 
         <div class="mainContent"> 
          <h1 style="font-size:28px; letter-spacing: 16px; padding-top: 20px; text-align:center; text-transform: uppercase; color:         #a7a7a7"><font color="red">Kumbh</font><font color="skyblue">Aqua</font> Symbol of purity</h1> 
           <div class="contactForm"> 
            <form name="contactform" id="contactform" method="POST" action="contactus.php" > 
             Name :<br /> 
             <input type="text" id="name" name="name" maxlength="30" size="30" value="<?php echo "nameField"; ?>" /><br /> 
             E-mail :<br /> 
             <input type="text" id="email" name="email" maxlength="50" size="50" value="<?php echo "emailField"; ?>" /><br /> 
             Phone Number :<br /> 
             <input type="text" id="number" name="number" value="<?php echo "numberField"; ?>"/><br /> 
             Message :<br /> 
             <textarea id="message" name="message" rows="10" cols="20" value="<?php echo "messageField"; ?>" >Some Text...          </textarea> 
             <input type="reset" name="reset" id="reset" value="Reset"> 
             <input type="hidden" name="parse_var" id="parse_var" value="contactform" /> 
             <input type="submit" name="submit" id="submit" value="Submit"> <br /> 

             <?php echo "$sent"; ?> 

            </form> 
             </div> 
          <div class="contactFormAdd"> 

            <img src="Images/k1.JPG" width="200" height="200" title="Contactus" /> 
            <h1>KumbhAqua Solution,</h1> 
            <strong><p>Saraswati Vihar Colony,<br /> 
            New Cantt Allahabad, 211001 
            </p></strong> 
            <b>DEEPAK SINGH &nbsp;&nbsp;&nbsp; RISHIRAJ SINGH<br /> 
            8687263459 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;8115120821 </b> 

          </div> 
         </div> 
        </div> 

          <footer class="mainFooter"> 
          <nav> 
          <ul> 
           <li> <a href="KumbhAqua.html"> Home </a></li> 
           <li> <a href="aboutus.html"> KumbhAqua </a></li> 
           <li> <a href="services.html"> Products</a></li> 
           <li class="active"> <a href="contactus.php"> ContactUs </a></li> 
          </ul> 
           <div class="r_footer"> 


      Copyright &copy; 2015 <a href="#" Title="KumbhAqua">KumbhAqua.in</a> &nbsp;&nbsp;&nbsp;&nbsp; Created and Maintained By- <a title="Randheer                                                        Pratap Singh "href="#">RandheerSingh</a>                   </div> 
          </nav> 
          </footer> 
    </body> 
</html> 

    enter code here 
+0

Tengo dos errores 1) Indefinido Índice: parse_var 2) Variable indefinida enviada – RandheerPratapSingh

-1

Para ocultar todos los errores, el código para que sea:

<?php 
     error_reporting(0); 
     @ini_set(‘display_errors’, 0); 
//THE REST OF THE CODE 
?> 
0

que definía todas las variables que fue lo primero que me comprobado. Sé que no es necesario en PHP, pero los viejos hábitos son difíciles.Entonces sanatized la información de la siguiente manera:

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["name1"])) { 
    $name1Err = " First Name is a required field."; 
    } else { 
     $name1 = test_input($_POST["name1"]); 
    // check if name only contains letters and whitespace 
     if (!preg_match("/^[a-zA-Z ]*$/",$name1)) { 
     $name1Err = "Only letters and white space allowed"; 

de test_input supuesto es otra función que hace un recorte, y strilashes htmlspecialchars. Creo que la información está bastante desinfectada. No trato de ser grosero solo mostrando lo que hice. Cuando se trataba del correo electrónico, también verificaba si era el formato correcto. Creo que la verdadera respuesta está en el hecho de que algunas variables son locales y algunas son globales. Lo tengo funcionando sin errores por el momento, así que, aunque estoy muy ocupado en este momento, aceptaré los errores como mi respuesta. ¡No te preocupes, lo descubriré, no es de vital importancia ahora mismo!

-1

Asegúrese de que las etiquetas estén correctamente cerradas. Y la etiqueta de cierre no incluirá dentro de un bucle. (si contiene una estructura de bucle).

+0

Proporcione una descripción más detallada de su solución. – clemens

+0

En mi caso, el problema se resolvió reemplazando la etiqueta del formulario; \t \t

\t \t \t \t \t \t \t \t \t <= $ fila [ 'id'];?> \t <= $ fila [ ''] ADR; ?> \t <= $ fila [ 'ownr'];?> \t <= $ fila [ 'rmrk'];?> \t \t echo ''; \t} ?> \t
Me gusta esto; botón de radio etiqueta cerrar después del bloque de bucle. –

+0

Debe editar su respuesta y agregar el código fuente formateado. Es ilegible – clemens

Cuestiones relacionadas