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;
Código:
El archivo PHP (actualizacion_aut.php) que ejecuta el UPDATE en la BD: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); }
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);
?>
Es por eso que necesitaria ayuda de usuarios mas avanzados en el tema.
Gracias de antemano
Un saludo