entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

-1voto

DUDA EN UPDATE COMO ACTUALIZAR UN REGISTRO DE 2 TABLAS RELACIONADAS ? EN PHP

AYUDA!!! FECHA DE PUBLICACIÓN: 09/11/2014
Hola algien me podria iluminar tengo una duda esq tengo 2 tablas relacionadas una llamada alumnos y la otra tabla salon estoy usando phpmyadmin y editor dreamweaver uso dos documentos uno documento PHP “actualizar” y el otro documento PHP se llama “Registro” en el documento actualizar tengo este codigo:

//Este codigo es para modificar

$id_salon = $_POST['id_salon'];

$actualizar = sprintf(“update salon INNER JOIN alumno set num_salon=’%s’,nombre=’%s’ WHERE num_salon=%d”, $_POST['num'], $_POST['fechatermino'],$id_salon );

entonces mi duda es aki:
WHERE num_salon=%d” (COMO PUEDO USAR 2 COMODINES %d PARA QUE ME ACTUALIZE LA FILA DE CADA TABLA XQ AKI SOLO ME ACTUALISA UN CAMPO DE UNA TABLA PERO EL OTRO CAMPO QUE ES EL DE LA OTRA TABLA QUE SE LLAMA NOMBRE QUE ES DE LA TABLA ALUMNOS NO LO ACTUALIZA X CONPLETO AL PRESIONAR EL BOTON ACTUALIZAR DE LA TABLA DONDE SE SI ME MUESTRA LOS DATOS A MODIFICAR PERO ALA ORA DE MODIFICARLOS SOLO ME MODIFICA LOS DE UNA TABLA LA OTRA ME MODIFICA TODOS LOS CAMPOS CON EL MISMO NOMBRE QUE SE COLOQUE EN EL CAMPO)este codigo solo me funciona para una tabla no para la otra como le indico que actualize 2 filas de diferente tablas ayuda xfa.

este es el codigo del otro documento php llamado “REGISTRO”:

if ( $id) {
require_once(‘db.php’);
$modificar = sprintf(“select num_salon,nombre from salon inner join alumno on alumno.id_alumno=id_salon WHERE num_salon=%d “,(int)$_GET['id']);

una parte del codigo en el where le estoy indikando la condicion del campo num_salon=$d que es igual ala fila =%d pero komo le koloko otro comodin para indicarle el id_alumno de otra tabla diferente pero ya relacionada .

les agradesco por su conocimiento y su aporte muchas gracias.

0voto

Leonardo-Tadei comentado

Hola Alan,

por favor, agregá a tu pregunta la estructura de las tablas, así podemos ver cómo se relacionan y qué campos tienen para poder pensar qué query te serviría. Si podés, además de las tablas, poné 1 o 2 registros con datos de prueba.

0voto

Alan comentado

Hola Leonardo si mira este es mi documento llamado registro este es el codigo:

<?php 

$id = isset($_GET['id'])?(int)$_GET['id']: 0;

if ( $id) {
  require_once('db.php');
  $modificar = sprintf("select num_salon,nombre from salon inner join alumno on alumno.id_alumno=id_salon WHERE num_salon= %d ",(int)$_GET['id']);

   mysql_select_db($database, $pro);
  $result = mysql_query($modificar, $pro) or die(mysql_error());

  $row_rec = mysql_fetch_assoc($result);

}
 ?>

<head>

<title>Insertar Datos</title>
<meta name="keywords" content="multi layer, contact, free website templates, XHTML CSS">
<meta name="description" content="Multi Layer Contact - free website template provided by templatemo.com">
<link href="style.css" rel="stylesheet" type="text/css">

</head>
<body>

            <?php if($id):?>

<form action="actualizar.php" method="post">
          <input name="id_salon" type="hidden" value="<?php echo $id;?>">

            <?php else:?>

          <form action="insertar12014.php" method="post">
            <div align="left">
        <?php endif;?>

      </div>

      <label for="layon">
        <div align="right"><em>num_salon</em>:</div>
      </label>
      <div align="right">
        <input name="num" type="text" id="num" value="<?php if(isset($row_rec['num_salon'])){echo $row_rec['num_salon'];} ?>">
      </div>

      <div></div>
     <div class="cleaner_h10"></div> 

  <div class="cleaner_h10"></div>

  <label for="email">
  </label>
  <div class="SelectStyle " id="SelectStyle ">
    <div align="right"></div>
  </div>

              <label for="email">
              </label>
            <div align="right"></div>
          <div class="cleaner_h10"></div>
          <div align="right"></div>
        <div class="cleaner_h10"></div>
         <label for=">
                <div align="right"><em>nombre:</em></div>
                </label>

            <div align="right">

              <input name="fechatermino" type="text" id="fechatermino" value="<?php if(isset($row_rec['nombre'])){echo $row_rec['nombre'];} ?>">
            </div>

          <div class="cleaner_h10"></div>
         <label for="url">
         </label>
      <div align="right"></div>
           <div class="cleaner_h10"></div>
         <label for="url">
                <div align="right"></div>
            </label>
      <div align="right"></div>

            <div class="cleaner_h10"></div>

  </form>

   </div>

    <div class="cleaner"></div>
</div>
<div class="cleaner"></div>
</div>
</div>

<div id="templatemo_footer_wrapper"> 

</div>  

</body>

y el codigo del otro documento php que actualiza llamado asi es :

<?php require_once('db.php'); ?>
<?php

//Este codigo es para modificar                                          

$id_salon = $_POST['id_salon'];                                                       
// AKI ES EL NOMBRE QUE LES DI ALOS CUADROS DE TEXTO .$_POST['num'], $_POST['fechatermino'] 

$actualizar = sprintf("update salon INNER JOIN alumno set num_salon='%s',nombre='%s'   WHERE num_salon=%d", $_POST['num'], $_POST['fechatermino'],$id_salon );  

mysql_select_db($database_pro, $pro)or die("problema con base datos");
  $Result1 = mysql_query($actualizar, $pro) or die(mysql_error());

header("Location: registro.php");

?>

Y LAS TABLAS RELACIONADAS EN phpmyadmin SON:

TABLA alumno
contiene los campos id alumno y nombre
ejemplo con registros
id alumno = 45
nombre= juan diego

TABLA salon
contiene los campos num_salon y id salon
ejemplo de registros:
num salon= 1 A
id_salon= 381
y su relacion es :

el id salon y num salon
ejemplo:

al relacionar id salon=381 num salon= 1 A

y este es el enlace o boton que se en cuentra en otro documento php llamado mostrando tabla donde desde aii
puedo seleccionar cada registro que quiero actualizar de la tabla

 href="registro.php? id=<?php echo $row_rec['num_salon'];?>MODIFICAR

espero puedas ayudarme te lo agradeceria mucho amigo :D
gracias x tu aporte y conocimiento.

0voto

Leonardo-Tadei comentado

Hola Alan,

vamos por partes:

  • la query actualiza un solo dato porque al tener un solo campo en el SET, le estás diciendo que actualice solo ese campo. Supongo que estás pensando que por el mero hecho de que las tablas estén relacionadas, deberían actualizarse dos campos, pero no es así. El INNER JOIN y el WHERE solo determinan sobre qué campo o campos se hace el SET, pero no afecta a otras tablas.

  • me parece que tenés mal normalizado el almacenamiento. Para este tipo de problemas, luego de normalizar tenés que obtener: una tabla con los datos de los alumnos, una tabla con los datos de los salones, y una tercer tabla conteniendo qué alumno está en qué salón.

Lo que no entiendo muy bien es en qué escenario, tenés que cambiar a la vez el nombre del alumno y el nombre del salón. El nombre de cada cosa, si entiendo bien lo que estás haciendo, es independiente, y lo que etndrías que hacer llegado el caso es asignar un nuevo salón a un alumno, siempre de entre los alumnos y salones existentes.

Si no te comprendo bien, tal vez me ayudaría una captura de pantalla de la interfaz que estás usando... por ejemplo en algunos lugares aparece una fecha_termino pero no la mencionás en la estructura de las tablas...

Saludos cordiales.

0voto

Alan comentado

Hola leonardo como estas espero que bien .

A ok te entiendo pero y como puedo actualizar con un boton 2 campos de 2 tablas relacionadas no me podrias dar un ejemplo para guiarme te lo agradeceria muxo .

0voto

Leonardo-Tadei comentado

Ejecutá 2 UPDATE, uno para cada tabla.

0voto

Alan comentado

Hola amigo leonardo

gracias por tu conocimiento tengo otra duda como puedo poner el valor de otro campo en el mismo where
ejemplo: WHERE num_salon=%d este es la condicion que tengo pero kiero acer algo asi : WHERE num_salon=%d ,id_alumno=%d como puedo poner correctamente esos 2 campos en el where con sus %d podrias asesorarme se que estoy mal gracias. !!saludos!!

0voto

Leonardo-Tadei comentado

Para reemplazar más de un valor con sprintf(), simplemente pasalos como parámetro a la función:

<?php
$num = 5;
$location = 'tree';

$format = 'There are %d monkeys in the %s';
echo sprintf($format, $num, $location);
?>

Esto es un ejemplo del manual: http://php.net/manual/en/function.sprintf.php

Si tenés más dudas sobre sprintf(), por favor, iniciá una nueva pregunta sobre ese tema, ya que esto no tiene tanto que ver con esta pregunta.

Saludos!

0voto

Alan comentado

HOLA Leonardo

A ok intentare lo que me dices amigo klaro si tengo mas dudas inicio una nueva pregunata.!!SALUDOS!!

0voto

Leonardo-Tadei comentado

Igualmente!
Recorá seleccionar alguna respuesta en las preguntas, o si encontraste una solución, publicarla como respueta y seleccionarla, así el tema queda marcado como solucionado y sirve de guía para otros con la misma duda.
Saludos!

0voto

Alan comentado

Hola amigo leonardo
Sabs ya intente lo q me komentabas pero tengo ahora este problema al actualizar un campo me lo actualiza pero todos con el mismo registro le doy vueltas y vueltas pero no encuentro la solucion amigo de una y otra forma no se q acer ya:

este es el codigo UPDATE uso actualizar lo q kiero es poner el id en el where de otra tabla pero no puedo ya lo e intentado de varias formas pero es por demas

WHERE num_salon=%d mira aki le doy la condicion num_salon q es el id de esa tabla pero kiero ponerle en ese mismo where el id de otra tabla igual komo se muestra aii q es el campo y la fila para actualizar.

$actualizar = sprintf("update salon INNER JOIN alumno set num_salon='%s',nombre='%s' WHERE num_salon=%d ", $_POST['numero'], $_POST['nombre'],$id_salon );

0voto

Leonardo-Tadei comentado

Hola Alan,

sacá el JOIN de tu consulta, como te digo en la respuesta, ya que solo complica las cosas...

Veo que nunca nos enviaste la estructura de las tablas, así que sin eso, no podemos escribir la query para ayudarte con el código SQL correcto.

Podrías al menos poner la salida de $actualizar para ver qué query estoás ejecutando?

print($actualizar); // agregá eso y copiá y pegá la salida obtenida.

0voto

Alan comentado

ola leonardo
A ok kito el join de update ok
te mando mis documentos php por correo amigo? trate de colocar el codigo aki en la pagina pero me lo distorciona un poko te lo puedo mandar a un correo? los 2 archivos php

0voto

Leonardo-Tadei comentado

No nos sirven los archivos PHP. Lo que te pido es lo que diga el print() que te indico más arriba y la estuctura de las tablas...

Para que el código se vea bien, seleccionalo y clickeá sobre la herrameinta {} que es la de código, así se te respeta el formato (pero no mandes el PHP que no sirve para ver el problea.

PD: me estás repreguntando en el comentario en vez de en la respuesta que está más abajo... esto es parte de la pregunta, no de la respuesta.

0voto

Alan comentado

hola leonardo lo q pasa es que en mi codigo no llevo print() pero el codigo de salida es :

enter code hereif ( $id) {

require_once(‘db.php’);
$modificar = sprintf(“select num_salon,nombre from salon inner join alumno on alumno.id_alumno=id_salon WHERE num_salon=%d “,(int)$_GET['id']);enter code heremysql_select_db($db_pro, $pro);
$result = mysql_query($modificar, $pro) or die(mysql_error());

espero q te refieras a este codigo amigo o lo q necesitas son las tablas phpmyadmin para publicrls esq estoy un poko confundido con lo q me dices amigo.

$row_rec = mysql_fetch_assoc($result);enter code here

0voto

Leonardo-Tadei comentado

Alan, ya ví que tu código no tiene prin()... agregáselo para ver la query que estás ejecutando.
También, tomate un rato pare releer todo este post y comprenderlo: estás varias veces respondiendo cosas sin sentido en vez de las 2 cosas que te estamos pidiendo :-(

0voto

Alan comentado

ok espero no equibocarme :

prin(“select numsalon,nombre from salon inner join alumno on alumno.idalumno=idsalon WHERE numsalon=%d “,(int)$GET['id']);enter CODE heremysqlselectdb($dbpro, $pro);
$result = mysqlquery($modificar, $pro) or die(mysql_error());)

cambie el sprintf x prin() es correcto asii?

0voto

Leonardo-Tadei comentado

Lo siento Alan, no soy capaz de ayudarte: no hacés absolutamente nada de lo que se te pide para poder determinar el problema. :-(
Saludos cordiales.

0voto

Alan comentado

hola leonardo
No es mi intencion no hacer lo q me pides lo q pasa es que no entiendo lo del codigo q me piden q publique para poder ayudarme soy nuevo en esto solo te pido que seas un poco mas especifico ya que todos tienen diferente forma de escribir los adgorismos o el codigo php espero me entiendas amigo y me sigas ayudando .

saludos!!

1voto

carlossevi comentado

Hola Alan, como te veo bastante perdido en conceptos tan simples como distinguir entre MySQL y PHP, te recomendaría aprender un poco antes de centrarte en problemas concretos como éste que nos consultas. El mismo Leonardo ha recomendado en otras ocasiones un curso que dice es bueno: http://www.freelibros.org/programacion/curso-de-programacion-en-php-con-mysql.html.

Si poder hacer esas distinciones tan básicas, o entender que lo que se te está pidiendo es que compartas el resultado de un print() de una variable en lugar de pegar el código fuente creo que difícilmente vamos a poder ayudarte y esto se va a convertir en una pérdida de tiempo tanto para tí como para nosotros.

Por último, te voy a dar un consejo personal: Cuida la ortografía y presentación de tu mensaje, sobre todo si pides ayuda. Repasa un poco la redacción, elimina los párrafos en máyusculas y trata de que el código que compartes se formatee correctamente. Si tu no inviertes el tiempo en estos detalles no deberías pretender que el resto de gente lo haga en tratar de ayudarte, y mucho menos en intentar descifrar lo que quieres decir.

Un saludo y espero que nos sigamos leyendo.

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Ejecutá 2 UPDATE, uno para cada tabla.

Las relaciones entre tablas, ya sean vía claves foráneas o vía integridad referencial, sirven para evitar borrado o modificación de datos relacionados para no perder la integridad de los datos. Desde el punto de vista de editar datos que no sean los de la relación (como es tu caso) o de una inserción, tenés que escribir y ejecutar una query para cada tabla.

UPDATE tabla
SET campo='valor'
WHERE clave=X

y lo mismo para la segunda tabla.

Saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta