Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Enviar Array Javascript a PHP. Notice: Undefined index:

Estas en el tema de Enviar Array Javascript a PHP. Notice: Undefined index: en el foro de Javascript en Foros del Web. Tengo el siguiente formulario, cuyo action se envía a la misma página: Código HTML: <form id= "ejemplares" name= "ejemplares" action= "<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post"> ... ...
  #1 (permalink)  
Antiguo 09/11/2017, 07:11
Avatar de Kursakez  
Fecha de Ingreso: agosto-2015
Mensajes: 19
Antigüedad: 8 años, 8 meses
Puntos: 1
Enviar Array Javascript a PHP. Notice: Undefined index:

Tengo el siguiente formulario, cuyo action se envía a la misma página:

Código HTML:
<form id="ejemplares" name="ejemplares" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"method="post">

...
<input type="submit" name="guardando" id="guardando" value="Guardar">
</form> 
El siguiente código javascript:
<script>
var fechas = new Array();
function agregarFechas(){
var fecha = document.getElementById('inputInsertar').value;
if(/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(fecha)){

fechas.push(fecha);


fechas.sort(function(a,b) {
a = a.split('/').reverse().join('');
b = b.split('/').reverse().join('');
return a > b ? 1 : a < b ? -1 : 0;
});
var stringed = JSON.stringify (fechas);

$.ajax(
{
type: 'post',
url: 'ejemplares.php',
data: {datafechas: fechas}
});


var pfval="";
var peval="";
for(i=0;i<fechas.length;i++){

pfval=pfval+fechas[i] + "<br>";
peval=peval + "<input type='button' name='eliminar' id='eliminar' value='Eliminar' onClick='eliminarFechas("+i+")'>" + "<br>" ;
}

document.getElementById('p_fechas').innerHTML=pfva l;
document.getElementById('p_eliminar').innerHTML=pe val;

}

}
</script>

Y el código PHP:


Código PHP:
if (isset($_POST["guardando"])){
        
$fecha_inseminacion =$_POST['datafechas'];
        echo 
$fecha_inseminacion;

¿Alguien sabe que está pasando para que se envíe como null (Notice: Undefined index: datafechas)el array fechas en javascript cuando envío el formulario a la misma página y lo proceso con $_POST en PHP?
PD: Todo el código está en ejemplares.php

Última edición por Kursakez; 09/11/2017 a las 07:33
  #2 (permalink)  
Antiguo 09/11/2017, 07:38
Avatar de Kursakez  
Fecha de Ingreso: agosto-2015
Mensajes: 19
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Cita:
Iniciado por Kursakez Ver Mensaje
Tengo el siguiente formulario, cuyo action se envía a la misma página:

Código HTML:
<form id="ejemplares" name="ejemplares" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"method="post">

...
<input type="submit" name="guardando" id="guardando" value="Guardar">
</form> 
El siguiente código javascript:
<script>
var fechas = new Array();
function agregarFechas(){
var fecha = document.getElementById('inputInsertar').value;
if(/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(fecha)){

fechas.push(fecha);


fechas.sort(function(a,b) {
a = a.split('/').reverse().join('');
b = b.split('/').reverse().join('');
return a > b ? 1 : a < b ? -1 : 0;
});
var stringed = JSON.stringify (fechas);

$.ajax(
{
type: 'post',
url: 'ejemplares.php',
data: {datafechas: fechas}
});


var pfval="";
var peval="";
for(i=0;i<fechas.length;i++){

pfval=pfval+fechas[i] + "<br>";
peval=peval + "<input type='button' name='eliminar' id='eliminar' value='Eliminar' onClick='eliminarFechas("+i+")'>" + "<br>" ;
}

document.getElementById('p_fechas').innerHTML=pfva l;
document.getElementById('p_eliminar').innerHTML=pe val;

}

}
</script>

Y el código PHP:


Código PHP:
if (isset($_POST["guardando"])){
        
$fecha_inseminacion =$_POST['datafechas'];
        echo 
$fecha_inseminacion;

Quiero enviar el array fechas en Javascript a PHP, pero se envía como null.
¿Alguien sabe que está pasando para que se envíe como null (Notice: Undefined index: datafechas)el array fechas en javascript cuando envío el formulario a la misma página y lo proceso con $_POST en PHP?
PD: Todo el código está en ejemplares.php
  #3 (permalink)  
Antiguo 09/11/2017, 08:28
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

1. Para hacer comparaciones regexp debes hacer lo siguiente

var str = "some string";
var regexp = new RegExp(/*some pattern here*/);
var res = regexp.test(str); //true || false

2, En
Código Javascript:
Ver original
  1. document.getElementById('p_fechas').innerHTML=pfva l;
  2. document.getElementById('p_eliminar').innerHTML=pe val;

Pusiste unos espacios

Código Javascript:
Ver original
  1. document.getElementById('p_fechas').innerHTML=pfval;
  2. document.getElementById('p_eliminar').innerHTML=peval;

3. Hago una suposicion que realmente lo que quieres hacer es pasar ese
Código Javascript:
Ver original
  1. var stringed = JSON.stringify (fechas);
Al ajax:

Código Javascript:
Ver original
  1. data: {datafechas:stringed}

SOLO porque en datafechas pasas fechas que es un array, y no un string, que es lo que se debe pasar a un post, y para algo haces ese json

4. Luego en php, si es mi suposicion, faltaria decodificar el json y mostrar

Código PHP:
Ver original
  1. <?php
  2.  
  3. if (isset($_POST["guardando"])){
  4.     $fecha_inseminacion = json_decode($_POST['datafechas']);
  5.     for($k=0;$k<sizeof($fecha_inseminacion);$k++){
  6.     echo "Fecha ".($k+1).": ".$fecha_inseminacion[$k]."<br/>";
  7.     }
  8. }  
  9.  
  10. ?>

Espero sirva

Última edición por alvaro_trewhela; 09/11/2017 a las 08:57
  #4 (permalink)  
Antiguo 09/11/2017, 09:03
Avatar de Kursakez  
Fecha de Ingreso: agosto-2015
Mensajes: 19
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Gracias por tu respuesta. El RegExp también se puede probar como lo puse, eso funciona. Los espacios que mencionas los puse sin querer al copiar el código.

El problema al darle a submit en el formulario, $_POST['datafechas'] está a null. Y me devuelve Notice: Undefined index: datafechas.

Probé con data: {datafechas:fechas}.También con var stringed = JSON.stringify (fechas) y data: {datafechas:stringed} descodificando el JSON como me dijiste. Pero sigue pasándose a null y dando ese error.
  #5 (permalink)  
Antiguo 09/11/2017, 09:15
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Tal vez el error está en ese sort

Prueba así


Código Javascript:
Ver original
  1. fechas.sort(function(a, b) {
  2. var f1 = new Date(a.replace("/","-"));
  3. var f2 = new Date(b.replace("/","-"));
  4. return f2 - f1;
  5. });

Puede ver que valor te esta dando ese json antes de enviar por ajax?
  #6 (permalink)  
Antiguo 09/11/2017, 09:25
Avatar de Kursakez  
Fecha de Ingreso: agosto-2015
Mensajes: 19
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Así es como se ve el JSON, luego del sort que tengo puesto:

Código:
var stringed = JSON.stringify (fechas);
 alert(stringed);

Parece que todo hasta ahí va bien.
  #7 (permalink)  
Antiguo 09/11/2017, 09:50
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Emmm a ver prueba con

Código PHP:
Ver original
  1. $.ajax({
  2. type: "post",
  3. url: 'ejemplares.php',
  4. data: {datafechas:fechas},
  5. dataType: "json",
  6. });

o

Código Javascript:
Ver original
  1. var stringed = JSON.parse(JSON.stringify (fechas));
  2. $.ajax({
  3. type: "post",
  4. url: 'ejemplares.php',
  5. data: {datafechas:stringed},
  6. });
  #8 (permalink)  
Antiguo 09/11/2017, 10:27
Avatar de Kursakez  
Fecha de Ingreso: agosto-2015
Mensajes: 19
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Gracias, pero sigue sin funcionar. Me da el mismo error.
  #9 (permalink)  
Antiguo 09/11/2017, 10:47
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Revisando bien tu php, y no lo analice bien (error mio al tratar de ayudar), me entra en duda que estás haciendo enviar por ajax, o haciendo submit al formulario?

Porque creo que es lo segundo, ya que si te da error el datafechas, y no guardando, lo más seguro es que estás usando submit
  #10 (permalink)  
Antiguo 09/11/2017, 10:53
Avatar de Kursakez  
Fecha de Ingreso: agosto-2015
Mensajes: 19
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Creo que es lo que dices, pero no sé cómo hacerlo. Me gustaría enviar el array fechas en Javascript para procesarlo con PHP al hacer submit al formulario.
  #11 (permalink)  
Antiguo 09/11/2017, 10:58
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

aqui vengo a meter mi cuchara,

1.- asegurate de no estar ejecutando ambos eventos simultáneamente (el submit y el ajax)

2.- usa la clase FormData

Código Javascript:
Ver original
  1. fechas.sort(function(a,b) {
  2. a = a.split('/').reverse().join('');
  3. b = b.split('/').reverse().join('');
  4. return a > b ? 1 : a < b ? -1 : 0;
  5. });
  6. //var stringed = JSON.stringify(fechas);
  7. var form_data = new FormData();
  8. form_data.append('fechas', JSON.stringify(fechas));
  9.  
  10. $.ajax(
  11. {
  12. type: 'post',
  13. url: 'ejemplares.php',
  14. data: form_data
  15. });
  #12 (permalink)  
Antiguo 09/11/2017, 11:15
Avatar de Kursakez  
Fecha de Ingreso: agosto-2015
Mensajes: 19
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Gracias, pero tampoco funciona. Lo que pretendo es que al darle al botón guardar que tiene el submit pueda procesar con PHP los campos del formulario y además el array fechas de Javascript. Hasta ahora puedo procesar con PHP los campos del formulario, pero no el array de Javascript.
  #13 (permalink)  
Antiguo 09/11/2017, 11:31
Avatar de Kursakez  
Fecha de Ingreso: agosto-2015
Mensajes: 19
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Creo que he dado con la solución... Era más sencillo que lo que estaba intentando. La pongo por aquí por si a alguien le puede servir.

Dentro del form:
Código:
<input id="variable" name="variable" type="hidden" />
En Javascript:
Código:
document.getElementById("variable").value=fechas;
En PHP:
Código:
$variable=$_POST['variable'];
        echo $variable;
  #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é
  #15 (permalink)  
Antiguo 09/11/2017, 19:57
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Enviar Array Javascript a PHP. Notice: Undefined index:

Lo diste por solucionado, no se si es por lo que te deje pero quiero hacer una rectificación de la linea 16 a la 24, hay que verificar primero que si es febrero, y luego si tiene 31, ya que se sabe que febrero no esta en los 31, por lo que se evaluaria primero los 31 y no febrero

Código Javascript:
Ver original
  1. if(m == 2){    
  2. maxDay = 28;
  3.     if(y%4 == 0 && (y%100 != 0 || y%400 == 0)){
  4.     maxDay = 29;
  5.         }
  6. }
  7. else if(m_31.indexOf(m) != -1){
  8. maxDay = 31;
  9. }

Saludos, sería bueno saber como solucionaste tu duda, por si otros tienen una duda más menos como la tuya

Etiquetas: form, html, input, java, notice, php, undefined
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:02.