Ver Mensaje Individual
  #14 (permalink)  
Antiguo 09/11/2017, 15:24
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Haz un test con esto:

Código HTML:
Ver original
  1. Agregar fecha: <input type="text" id="test"> <input type="button" onclick="addFecha('test', 'contenedor', 'datafechas', 'claseFechas', 1970, '/', 'deleteFecha');" value="test"/>
  2. <form method="post" action="fechas.php">
  3. <div id="contenedor"></div>
  4. <input type="submit" value="test" name="test" />
  5. </form>

Código Javascript:
Ver original
  1. function isDate(val, delimiter, yearBottomLimit){
  2. var date = val.split(delimiter);
  3.     if(date.length == 3){
  4.     var d = date[0];
  5.     var m = date[1];
  6.     var y = date[2];
  7.         if(!isNaN(d) && !isNaN(m) && !isNaN(y)){
  8.         d = parseFloat(d);
  9.         m = parseFloat(m);
  10.         y = parseFloat(y);
  11.             if(Number.isInteger(d) && Number.isInteger(m) && Number.isInteger(y)){
  12.                 if(y >= yearBottomLimit && m >= 1 && m <= 12){
  13.                 var m_31 = [1, 3, 5, 7, 8, 10, 12];
  14.                 var maxDay = 30;
  15.  
  16.                     if(m_31.indexOf(m) != -1){
  17.                     maxDay = 31;
  18.                     }
  19.                     else if(m == 2){   
  20.                     maxDay = 28;
  21.                         if(y%4 == 0 && (y%100 != 0 || y%400 == 0)){
  22.                         maxDay = 29;
  23.                         }
  24.                     }
  25.                    
  26.                     if(d >= 1 && d <= maxDay){
  27.                     return true;
  28.                     }
  29.                 }
  30.             }
  31.         }
  32.     }
  33. return false;
  34. }
  35.  
  36. function addFecha(creatorID, contener, postName, styleClass, yearBottomLimit, delimiter, callback){
  37. var creator = document.getElementById(creatorID);
  38.  
  39. var date = creator.value; //get value of date input
  40.  
  41. if(!isDate(date, delimiter, yearBottomLimit)){ alert("Enter a valid date"); return 0; } //validate date
  42.  
  43. /* Setting date correctly */
  44. var dateArr = date.split(delimiter);
  45. dateArr[0] = parseInt(dateArr[0]);
  46. dateArr[1] = parseInt(dateArr[1]);
  47. dateArr[2] = parseInt(dateArr[2]);
  48.  
  49. date = dateArr[0]+delimiter+dateArr[1]+delimiter+dateArr[2];
  50.  
  51. /* end */
  52.  
  53. /* all input date input data stuff */
  54. var cont = document.getElementById(contener);
  55. var fecha = document.createElement("INPUT");
  56. fecha.setAttribute("type", "text");
  57. fecha.setAttribute("value", date);
  58. fecha.setAttribute("name", postName+"[]");
  59. fecha.setAttribute("readonly", "");
  60. fecha.setAttribute("class", styleClass);
  61. fecha.setAttribute("onclick", "this.blur();");
  62. cont.appendChild(fecha);
  63.  
  64. /* end date input */
  65.    
  66. /* creating a delete button */
  67. var deleter = document.createElement("INPUT");
  68. deleter.setAttribute("type", "button");
  69. deleter.setAttribute("value", "Eliminar");
  70. deleter.setAttribute("onclick", callback+"(this, '"+contener+"');");
  71. cont.appendChild(deleter);
  72.  
  73. /* end delete button */
  74.  
  75. /* creating jump element */
  76.  
  77. var jumper = document.createElement("BR");
  78. cont.appendChild(jumper);
  79.  
  80. /* end jump element */
  81.  
  82. creator.value = ""; //reset value of adder
  83. }
  84.  
  85. function deleteFecha(deleter, contener){
  86. var cont = document.getElementById(contener);  
  87.  
  88. /* getting index of the self deleter button */
  89.  
  90. var index = 0;
  91.     while ((deleter = deleter.previousElementSibling)){
  92.     index++;
  93.     }
  94.    
  95. /* end getting index */
  96.  
  97. var e1 = cont.childNodes[index-1];
  98. var e2 = cont.childNodes[index];
  99. var e3 = cont.childNodes[index+1];
  100.  
  101. cont.removeChild(e1);
  102. cont.removeChild(e2);
  103. cont.removeChild(e3);
  104.  
  105. }

fechas.php
Código PHP:
Ver original
  1. for($k=0;$k<sizeof($_POST["datafechas"]);$k++){
  2. echo $_POST["datafechas"][$k]."<br/>";
  3. }

Te explico las funciones js:

isDate: verifica que una fecha este correcta con formado dd mm yyyy, parametros:
val: Valor de la fecha
delimiter: El delimitador de la fecha ex. 12/12/12 delimitador "/"
yearBottomLimit: Como muchos servidores usan tiempo unix, es decir, con años mayores o iguales a 1970 por escalabilidad puse ese parametro

addFecha: genera un campo de texto con la fecha, un boton para eliminar y elemento de salto, a un contenedor, Parametros
creatorID: Id del input que donde ingresas las fechas
contener: Id contenedor de los elementos a generar
postName: el numbre a usar en php para el php ex postName = "fechas" en php-> $_POST["fechas"]
styleClas: Por si quieres darle un estilo a los input fechas con el nombre de esa clase
yearBottomLimit: El mismo parametro que isDate
delimiter: el mismo parametro que isDate
callback: Como se llamará la funcion para eliminar fechas, en este caso te di el nombre deleteFecha

deleteFecha: Elimina el elemento, el elemento anterior y elemento posterior de un elemento, parametros
deleter: Objeto boton eliminar
contener: id del contenedor de fechas

Jaja me esmeré