Foros del Web » Programando para Internet » PHP »

Cómo lo puedo hacer????????

Estas en el tema de Cómo lo puedo hacer???????? en el foro de PHP en Foros del Web. HOla, tengo un problema de ¿lógica?, tengo un formulario donde introduzco el nombre, apellidos, telefono,... de un alumno (tabla alumno), y dentro de ese formulario ...
  #1 (permalink)  
Antiguo 01/11/2005, 08:11
 
Fecha de Ingreso: junio-2005
Mensajes: 16
Antigüedad: 12 años, 5 meses
Puntos: 0
Cómo lo puedo hacer????????

HOla, tengo un problema de ¿lógica?, tengo un formulario donde introduzco el nombre, apellidos, telefono,... de un alumno (tabla alumno), y dentro de ese formulario tengo un botón que al pulsarlo me abre una ventana flotante donde introduzco información sobre los cursos (tabla cursos) realizados por ese alumno.

El problema surge porque no se cómo guardar ese curso ya que para guardarlo tengo que pasarle el valor de la variable idalumno que sirve para relacionar ambas tablas, pero es que el idalumno aún no tiene ningún valor ya que es autoincrement, es decir, hasta que no guarde lo datos del alumno no se le va a asignar un valor a ese campo, luego no puedo pasar el valor porque está vacio.

No se si me he explicado bien, pero espero que puedan ayudarme ya que estoy hecho un lio y necesito hacer así lo de los cursos (en una ventana nueva).

Muchas gracias, a ver si alguien puede ayudarme a solucionar este conflicto.
  #2 (permalink)  
Antiguo 01/11/2005, 10:25
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 14 años
Puntos: 19
hola ... te explico mas o menos como es mi idea ... la cosa es asi .. lo que podrias hacer con la ventana nueva, es calcular el futuro id del alumno, de que forma ???

select max(id) from alumno;

esa consulta te va a devolver el ultimo id cargado, lo guardas en una variable, y luego le incrementas 1, este nuevo numero seria el proximo ID.

Espero que te sirva ..

te recomiento que te leas este post, que te va a ayudar a que te ayuden...
http://www.forosdelweb.com/showpost....39&postcount=1

saludos!!!
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
  #3 (permalink)  
Antiguo 01/11/2005, 16:13
 
Fecha de Ingreso: marzo-2005
Mensajes: 3
Antigüedad: 12 años, 9 meses
Puntos: 0
Mejor elimina los autoincrement

El comentario de turco_7 es válido, pero podrias tener el siguiente problema, y es que el autoincrement no incrementa apartir del id anterior que este en la tabla, sino a partir del ultimo id generado.
Me explico mejor con un ejemplo. Este es el error q te podria suceder si haces lo que turco_7 dice.

- Digamos q en la tabla alumno el max id generado es 10 (obiamente el proximo seria 11)
- Pero eliminas a ese alumno por alguna razon.
- En ese caso al hacer la consuta el max id de la tabla alumno sera 9.
- Entonces, al ingresar un nuevo curso para un nuevo alumno, el max id alumno de la tabla curso seria 10 (porque vos manualmente lo incrementaste en 1).
- Pero al autoincrementarse el id del alumno en la tabla alumno el id no va a ser 10, sino 11, pues el autoincrement no se incrementa a partir del ultimo id que está en la tabla, sino a partir del ultimo que estubo, aunque fuera eliminado.
- De esta manera el id del alumno en la tabla alumno seria 11, y el id del alumno en la tabla curso seria 10, y se perderia la relación.

Ese es el problema. La solucion de Turco_7 seria valida si nunca pensas eliminar a un alumno de la tabla.

Yo te aconcejaria que dejaras de usar autoincrement, y los autoincrementes vos manualmente con alguna funcion, que bien podria ser la que dice Turco_7.
Quita el autoincrement de ambas tablas.

"Se que todo esta muy confuso, pero espero que me entiendas"
Saludos y suerte
  #4 (permalink)  
Antiguo 01/11/2005, 16:23
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 13 años, 7 meses
Puntos: 0
Yo estos casos los resuelvo pasando otras variables que sean comunes a las dos tablas.
¿No habrá un número de alumno, nombre y apellido, DNI... o cualquier campo repetido en las dos tablas?.
Si existen estos datos y son únicos, el problema está solucionado.

Te diré que yo, en todas las altas genero un número aleatorio con rand() que luego me es muy util para cosas como la que tú has de hacer.
  #5 (permalink)  
Antiguo 01/11/2005, 16:30
Avatar de edwinandlozano  
Fecha de Ingreso: octubre-2003
Mensajes: 272
Antigüedad: 14 años, 1 mes
Puntos: 0
Cita:
Iniciado por FedeMichell
El comentario de turco_7 es válido, pero podrias tener el siguiente problema, y es que el autoincrement no incrementa apartir del id anterior que este en la tabla, sino a partir del ultimo id generado.
Me explico mejor con un ejemplo. Este es el error q te podria suceder si haces lo que turco_7 dice.

- Digamos q en la tabla alumno el max id generado es 10 (obiamente el proximo seria 11)
- Pero eliminas a ese alumno por alguna razon.
- En ese caso al hacer la consuta el max id de la tabla alumno sera 9.
- Entonces, al ingresar un nuevo curso para un nuevo alumno, el max id alumno de la tabla curso seria 10 (porque vos manualmente lo incrementaste en 1).
- Pero al autoincrementarse el id del alumno en la tabla alumno el id no va a ser 10, sino 11, pues el autoincrement no se incrementa a partir del ultimo id que está en la tabla, sino a partir del ultimo que estubo, aunque fuera eliminado.
- De esta manera el id del alumno en la tabla alumno seria 11, y el id del alumno en la tabla curso seria 10, y se perderia la relación.

Ese es el problema. La solucion de Turco_7 seria valida si nunca pensas eliminar a un alumno de la tabla.

Yo te aconcejaria que dejaras de usar autoincrement, y los autoincrementes vos manualmente con alguna funcion, que bien podria ser la que dice Turco_7.
Quita el autoincrement de ambas tablas.

"Se que todo esta muy confuso, pero espero que me entiendas"
Saludos y suerte
FedeMichell tiene toda la razon... para esa cuestiones los DB responsables utilizan secuencias las cuales son muy utiles para estos casos.... lee un poco mas referente al tema segun el motor que este utilizando
  #6 (permalink)  
Antiguo 02/11/2005, 06:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No sé que motor de BD usas .. pero en Mysql tienes por ejemplo la función_

mysql_insert_id()
http://www.php.net/manual/es/functio...-insert-id.php

Con esa función puedes obtener el último ID generando por un campo autoincremental tras una operación de INSERT .. de hecho todo esto ejecutado bajo una transacción es lo más seguro que puedes hacer.
(también tienes equivalente en SQL directo, más optimo y seguro)

Un saludo,
  #7 (permalink)  
Antiguo 02/11/2005, 12:13
 
Fecha de Ingreso: junio-2005
Mensajes: 16
Antigüedad: 12 años, 5 meses
Puntos: 0
ok, gracias a todos, voy a ver qué puedo hacer, también me han aconsejado meter los datos en una tabla temporal. No se, tendré que investigar un poco todas las opciones ya que soy muy novatillo en esto de la programación. Y por cierto, estoy usando php y MySQL, no se si es a esto a lo que os referias con lo de qué motor uso.

Bueno, muchas gracias a todos , va mos a ver qué pasa. Crucemos los dedos.
  #8 (permalink)  
Antiguo 02/11/2005, 15:19
 
Fecha de Ingreso: junio-2005
Mensajes: 16
Antigüedad: 12 años, 5 meses
Puntos: 0
He añadido un campo dni, de momento me parece una buena idea, el problema que tengo es que (posiblemente sea una GRAN cagada) no se cómo pasarle el valor de la caja de texto a la otra página: vereis hago esto

tengo un formulario donde meto, entre otros, el valor del dni en una caja de texto (dat_dni)

en ese mismo formulario tengo un enlace que me abre una ventana nueva, y a través de este enlace le paso el valor de dat_dni asi:

<a href="cursos.php?dat_dni" target="_blank">

al abrirse la otra página donde voy a insertar un curso he puesto

<?php echo $dat_dni; ?>

para ver si le pasa el valor de esa caja de texto, pero no le pasa nada de nada. ¿por qué no le pasa el valor de la caja de texto?
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 10:30.