Comunidad de diseño web y desarrollo en internet online

Undefined Index

Citar            
MensajeEscrito el 15 May 2013 02:58 pm
Buenas amigos, les escribo para consultarles sobre un error que me tiene un poco loco.
El sistema es un formulario para pedidos. Hay un campo de validación donde hay 3 opciones:

"Check" Hasta Agotar Stock (id="n_stock_1")
"Check" Hasta Agotar Stock de ___ Unidades (id="n_stock_3")
"Check" Válido Desde ___ Hasta ___ (fechas) (id="n_stock_2")

Mediante OnClick le digo que si n_stock_1 está activado, desactive n_stock_3 y viceversa. Por ende, de los 3 solo puede haber 1 o 2 activados, nunca los 3 juntos.
La selección de fecha (n_stock_2) es un jquery con un calendario Datepicker.

El problema es cuando completo todo el formulario y le doy enviar, me devuelve un error en el código php de envío de mail: Undefined Error, en las líneas que pertenecen a los CHECKS NO SELECCIONADOS.
O sea, si seleccione solo n_stock_1, el error vuelve para las lineas de n_stock_2 y 3, y asi sucesivamente.

Les copio los códigos HTML y PHP:

Código HTML :

<div id="validar" >
        <h1>Validez:</h1>
      <div id="v_stock_1">
       <input name="n_stock_1" type="checkbox" id="n_stock_1" value="1" onClick="disableOthers(this)" /><label for="n_stock_1">Hasta agotar stock</label>
      </div>
      
      <div id="v_stock_3">
      <input name="n_stock_3" type="checkbox" id="n_stock_3" value="3" onClick="disableUno(this)" /><label for="n_stock_3">Hasta agotar stock de:</label><input type="text" name="newsunidades" id="newsunidades" size="6" maxlength="4" disabled/><label for="newsunidades">unidades</label>
     </div>
           
      <div id="v_stock_2">
       <input name="n_stock_2" type="checkbox" id="n_stock_2" value="2" onclick="javascript:valida(this.checked)" /><label for="from">Desde</label><input type="text" id="from" name="from" disabled /><label for="to">-&nbsp;Hasta</label><input type="text" id="to" name="to" disabled />
      </div>

Código PHP :

//Validez
$val = array();
if($_POST['n_stock_1']==1)
    $val[]="Hasta agotar stock";
if($_POST['n_stock_2']==2)
    $val[]="Desde ".$_POST['from']." - Hasta ".$_POST['to'];
if($_POST['n_stock_3']==3)
    $val[]="Hasta agotar stock de: ".$_POST['newsunidades']." unidades";


El error que me tira dependiendo de cual esta seleccionada y cual no es en las lineas: if($_POST['n_stock_X']==X).

Vale aclarar que para probar el sistema estoy usando WAMPSERVER 2.2, con la BD corriendo perfectamente. No puedo usar el debug (webGrind) del programa ya que me tira un Forbidden, por lo que me esta costando mucho entender la naturaleza del problema

Espero ansioso su respuesta ya que estoy demorando mucho en la entrega del sistema y no paran de aparecer estos errores...

Por dgmartin

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 May 2013 04:30 pm
El error tiene sentido porque cuando usas un <input type="checkbox"> se crea la vatiable $_POST correspondiente si y solo si ese checkbox está tildado (y vale lo que hayas puesto en su value), si no está tildado, entonces no se crea la variable $_POST y por eso PHP se está quejando de que intentas usar una posición del array $_POST que no existe: porque ese checkbox no está tildado.

Teniendo esto en cuenta, lo que deberías hacer es algo como esto:

Código PHP :

if (isset($_POST['n_stock_1'])) {
  $n_stock_1 = $_POST['n_stock_1'];
} else {
  $n_stock_1 = null;
}
if (isset($_POST['n_stock_2'])) {
  $n_stock_2 = $_POST['n_stock_2'];
} else {
  $n_stock_2 = null;
}
if (isset($_POST['n_stock_3'])) {
  $n_stock_1 = $_POST['n_stock_3'];
} else {
  $n_stock_3 = null;
}

$val = array();
if($n_stock_1==1)
    $val[]="Hasta agotar stock";
if($n_stock_2==2)
    $val[]="Desde ".$_POST['from']." - Hasta ".$_POST['to'];
if($n_stock_3==3)
    $val[]="Hasta agotar stock de: ".$_POST['newsunidades']." unidades";


Un consejo: Nunca te fíes de la información que te envía el cliente. Siempre controla la existencia y la coherencia de los datos antes de usarlos.

Por ejemplo en esta línea:

Código PHP :

$val[]="Desde ".$_POST['from']." - Hasta ".$_POST['to'];

¿Cómo sabes que $_POST['from'] existe y tiene una dirección de correo válida?, no lo sabes, podría contener una inyección de código o simplemente basura.
Sé paranoico con esas cosas :evil:

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 16 May 2013 02:16 pm
Muchas Gracias por tu respuesta! funcionó perfectamente, me habia imaginado que hacía falta un else en esas definiciones, pero al ser novato no entendía la sintaxis que necesitaba... ahora no tira error, lo que si el mail no se manda, supongo que será por que estoy desde WAMP en localhost... voy a subirla al hosting a ver si ya funciona todo bien.

Con respecto a tu pregunta, esa linea no responde a un email, es parte de las casillas de verificacion de fecha, la variable FROM viene de un ID del datepicker para las fechas de validez...
válido DESDE - HASTA... pero gracias por tu preocupación y consejo de todas formas! será tenido en cuenta!

¡Muchas gracias nuevamente!

Por dgmartin

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 May 2013 06:27 pm

dgmartin escribió:

me habia imaginado que hacía falta un else en esas definiciones...

:nif:

El problema no estaba en la falta del ELSE, sino en el condicional dentro del IF...

Saludos!

Por SinSemilla

Claber

336 de clabLevel



Genero:Masculino  

i am that i am...

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.