Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Actualizar registro MySQL+PHP+AJAX [Novato]

Estas en el tema de Actualizar registro MySQL+PHP+AJAX [Novato] en el foro de Frameworks JS en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 19/06/2009, 22:03
Ktulu
Invitado
 
Mensajes: n/a
Puntos:
Actualizar registro MySQL+PHP+AJAX [Novato]

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&oacute;n se realiz&oacute; 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
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 03:07.