Hola, aclaré en el título lo de novato porque recien estoy iniciandome con el tema de ajax.
Mi problema es el siguiente: mediante una consulta PHP a una BD MySQL obtengo los registros de 2 tablas limitados con un ID que envío mediante el método POST de un formulario.
Creo que el problema básicamente es por estar utilizando una consulta que incluye un foreach para mostrar 1 a 1 los registros, ya que cuando la consulta sólo me devuelve 1 solo registro el script funciona, cosa que no pasa cuando son mas de 2 o mas.
El PHP que realiza la consulta (un fragmento ya que el resto no es necesario):
Código PHP:
$id=$_POST['id'];
$sql = "SELECT * FROM abstract,autores WHERE abstract.id=".$id." and autores.id_abs=abstract.autor ORDER BY abstract.id ASC";
$datos = $BD->traerTodo($sql);
foreach($datos as $dato):
echo ('
<form name="frmaut" action="" onsubmit="enviarDatosAutor(); return false">
<table>
<tr>
<th>Id</th>
<th>Nombre</th>
<th>Apellido</th>
<th>Filiación 1</th>
<th>Filiación 2</th>
<th>Filiación 3</th>
<th>Filiación 4</th>
<th>Filiación 5</th>
<th>ID Abs</th>
</tr>
<tr>
<td><input name="id" size="1" DISABLED type="text" value="'.$dato['id'].'" /></td>
<td><input name="nombre" type="text" value="'.$dato['nombre'].'" /></td>
<td><input name="apellido" type="text" value="'.$dato['apellido'].'" /></td>
<td><input name="fili1" type="text" value="'.$dato['fili1'].'" /></td>
<td><input name="fili2" type="text" value="'.$dato['fili2'].'" /></td>
<td><input name="fili3" type="text" value="'.$dato['fili3'].'" /></td>
<td><input name="fili4" type="text" value="'.$dato['fili4'].'" /></td>
<td><input name="fili5" type="text" value="'.$dato['fili5'].'" /></td>
<td><input name="id_abs" DISABLED type="text" value="'.$dato['id_abs'].'" /></td>
<p><input type="submit" name="Submit" value="Modificar" /></p>
</tr>
</table>
</form>
');
endforeach;
La función en mi archivo ajax.js que captura y envía los datos:
Código:
function enviarDatosAutor(){
//donde se mostrará lo resultados
divResultado = document.getElementById('resultado');
divFormulario = document.getElementById('formulario');
//valores de los inputs
id=document.frmaut.id.value;
nombre=document.frmaut.nombre.value;
apellido=document.frmaut.apellido.value;
fili1=document.frmaut.fili1.value;
fili2=document.frmaut.fili2.value;
fili3=document.frmaut.fili3.value;
fili4=document.frmaut.fili4.value;
fili5=document.frmaut.fili5.value;
id_abs=document.frmaut.id_abs.value;
//instanciamos el objetoAjax
ajax=objetoAjax();
//usando del medoto POST
//archivo que realizará la operacion
//actualizacion.php
ajax.open("POST", "actualizacion_aut.php",true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
//mostrar los nuevos registros en esta capa
divResultado.innerHTML = ajax.responseText;
//mostrar un mensaje de actualizacion correcta
divFormulario.innerHTML = "<p style='border:1px solid red; width:400px;'>La actualización se realizó correctamente</p>";
setTimeout("location.href='./index.php'", 2000);
}
}
//muy importante este encabezado ya que hacemos uso de un formulario
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//enviando los valores
ajax.send("id="+id+"&nombre="+nombre+"&apellido="+apellido+"&fili1="+fili1+"&fili2="+fili2+"&fili3="+fili3+"&fili4="+fili4+"&fili5="+fili5+"&id_abs="+id_abs);
}
El archivo PHP (actualizacion_aut.php) que ejecuta el UPDATE en la BD:
Código PHP:
<?php
include '../compartido/class.BaseDeDatos.php';
//variables POST
$id=$_POST['id'];
$nombre=$_POST['nombre'];
$apellido=$_POST['apellido'];
$fili1=$_POST['fili1'];
$fili2=$_POST['fili2'];
$fili3=$_POST['fili3'];
$fili4=$_POST['fili4'];
$fili5=$_POST['fili5'];
$id_abs=$_POST['id_abs'];
//actualiza los datos del empleados
$sql="UPDATE autores SET
id='$id',
nombre='$nombre',
apellido='$apellido',
fili1='$fili1',
fili2='$fili2',
fili3='$fili3',
fili4='$fili4',
fili5='$fili5',
id_abs='$id_abs'
WHERE id=$id";
$BD->ejecutarSQL($sql);
?>
Según lo que me parece, el problema reside en que al utilizar un foreach los forms creados contienen el mismo
name="frmaut" pero no estoy totalmente seguro.
Es por eso que necesitaria ayuda de usuarios mas avanzados en el tema.
Gracias de antemano
Un saludo