Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Lista de selección en formulario

Estas en el tema de Lista de selección en formulario en el foro de PHP en Foros del Web. Hola a todos, soy absolutamente nuevo en el foro y recién llegado a PHP, estoy realizando un proyecto para ir aprendiendo poco a poco y ...
  #1 (permalink)  
Antiguo 29/03/2016, 15:04
 
Fecha de Ingreso: marzo-2016
Mensajes: 5
Antigüedad: 5 años, 1 mes
Puntos: 0
Información Lista de selección en formulario

Hola a todos,

soy absolutamente nuevo en el foro y recién llegado a PHP, estoy realizando un proyecto para ir aprendiendo poco a poco y me he encontrado con un problema que no consigo solucionar.
Tengo un formulario en el que algunos campos están unidos a otras tablas ya que en la tabla principal tengo un valor numérico y en la segunda ligado con el ID la descripción.
Cuando quiero actualizar la tabla principal desde el formulario si pongo el texto de descripción no me lo guarda en db tengo que poner el numero para que me lo guarde. Este es el código:

Código:
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM tasks 
LEFT JOIN projects  ON tasks.t_project   = projects.p_id
LEFT JOIN keystones ON tasks.t_key_stone = keystones.k_id
LEFT JOIN users     ON tasks.t_owner     = users.u_id
Place clausul where afte these lines if finally solved
WHERE t_id = ?";


$q = $pdo->prepare($sql);
$q->execute(array($t_id));
$data = $q->fetch(PDO::FETCH_ASSOC);
$t_country = $data['t_country']; //Aqui pongo nombre de la tabla con descripciones y tengo el formulario sin problemas (Descripción)
$t_project = $data['t_project']; // igual que country (nombre de tabla auxiliar)
$t_key_stone = $data['t_key_stone']; //igual que country (nombre de tabla auxiliar)
$t_name = $data['t_name'];
$t_description = $data['t_description'];
$t_owner = $data['t_owner'];
$t_coworker = $data['t_coworker'];
$t_start = $data['t_start'];
$t_ends = $data['t_ends'];
$t_status = $data['t_status'];
$t_progress = $data['t_progress'];
Database::disconnect();


//Hasta aquí todo va bien, tengo el formulario relleno y no tengo números de tabla madre.

// creo que el problema empieza aquí al actualizar porque los campos del formulario están con descripción y al intentar guardar algo no cuadra, por ejemplo la tabla espera recibir un 1 cara el campo t_country y se encuentra con España y no salva nada en ese campo.

 
$sql = "UPDATE tasks  set t_country = ?, t_project = ?, t_key_stone = ?, t_name = ?, t_description = ?, t_owner = ?, t_coworker = ?, t_start = ?, t_ends = ?, t_status = ?, t_progress = ? WHERE t_id = ?";   
$q = $pdo->prepare($sql);
$q->execute(array($t_country,$t_project,$t_key_stone,$t_name,$t_description,$t_owner,$t_coworker,$t_start,$t_ends,$t_status,$t_progress,$t_id));
Database::disconnect();
header("location: projects-read.php?p_id=".$_POST['t_project']);

Me podría alguien echar una mano para encauzar esto??? :) gracias de antemano.
  #2 (permalink)  
Antiguo 29/03/2016, 15:11
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 12 años, 6 meses
Puntos: 175
Respuesta: Lista de selección en formulario

Oye, tu problema no es PHP, es como interpretas el SQL... una cosa es unir tablas (es necesario usar LEFT JOIN?, no bastaría con INNER JOIN?).. y otra es actualizar dos tablas... deberías usar la logica de JOIN tambien en la misma.. tipo

Código MySQL:
Ver original
  1. UPDATE TABLE_A, TABLE_B
  2. SET TABLE_A.column_c = TABLE_B.column_c + 1
  3. WHERE TABLE_A.join_col = TABLE_B.join_col

o así

Código MySQL:
Ver original
  1. UPDATE TABLEA a
  2.    JOIN TABLEB b ON a.join_colA = b.join_colB  
  3.    SET a.columnToUpdate = [something], b.columnToUpdate = [AnotherSomething]

Lee un poco de COMO ACTUALIZAR 2 TABLAS CON JOIN... saludos
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #3 (permalink)  
Antiguo 29/03/2016, 16:08
 
Fecha de Ingreso: marzo-2016
Mensajes: 5
Antigüedad: 5 años, 1 mes
Puntos: 0
Información Respuesta: Lista de selección en formulario

Hola loncho_rojas,


gracias por tu respuesta, igual me he expresado mal, tengo una tabla principal en la que varios campos son sólo dígitos que hacen referencia al id de otras tablas en las que tengo las descripciones de ese dígito.

Al iniciar el formulario, relleno los campos con las descripciones (No tendría sentido enseñar números), entonces la lectura es correcta y las uniones con las tablas auxiliares (Que no necesito actualizar son sólo soporte a la principal).

El problema viene cuando quiero actualizar, al estar usando los campos de descripción al intentar guardarlos no me cuadran con los nombres de los campos de la tabla principal.

imagino que de alguna forma al igual que hecho los inner join para traerme la descripción y no el numero he de hacer lo contrario para poder guardarlo. Esa es la pregunta.

(Creeme, llevo horas buscando en internet por todos los foros y no he encontrado algo que me ayude, por eso he venido aquí, esperando comentarios de gente experimentada, :) )
  #4 (permalink)  
Antiguo 30/03/2016, 04:02
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 17 años, 5 meses
Puntos: 154
Respuesta: Lista de selección en formulario

Hola Aldegunde,

En vez de pasarle el dato de la descripción pásale el id que es lo que espera. Es tu código y tú sabes lo que tienes almacenado en cada variable, por lo tanto, debes saber qué variable asignarle a qué dato.
  #5 (permalink)  
Antiguo 30/03/2016, 07:25
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 12 años, 6 meses
Puntos: 175
Respuesta: Lista de selección en formulario

O sea que ni siquiera probaste lo que te dije... me respondes con tu problema nuevamente aludiendo que buscaste en miles de foros la solución mágica, pero te doy la solución posible y no hay caso?

Entonces, si eso no funciona, pues, el problema no es PHP es la manera en que presentas los datos en tu HTML y tu lógica... o sea....

Si tengo esto

TABLA PRODUCTOS
IDPROD = 1
PROD= Pantalones

TABLA RELACIONAL
ID=30
IDPROD=1

Se supone que IDPROD es el nexo... al actualizar la tabla PRODUCTOS, lo máximo que puedes actualizar es el nombre del producto o PROD... no le veo el caso de ACTUALIZAR ningún numero en tu tabla relacional... O sea, si escribo CAMISA, no tiene por qué saber la tabla relacional que al poner CAMISA debe cambiar de ID...

Otra cosa es si lo haces con un SELECT de HTML... pero no queda muy claro lo que estás haciendo ni para que, ya que eso afecta el procedimiento que debes generar... explica que estas haciendo y proporciona tu código HTML del form, capaz podamos interpretar mejor tu situación... pero de todas maneras caigo que estás entendiendo mal el procedimiento de tablas relacionadas, no siempre hay que actualizar la tabla "hijo" porque has cambiado algo en el "padre"...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #6 (permalink)  
Antiguo 30/03/2016, 12:53
 
Fecha de Ingreso: marzo-2016
Mensajes: 5
Antigüedad: 5 años, 1 mes
Puntos: 0
Respuesta: Lista de selección en formulario

Hola rbczgz, exacto esa es la questión.
Yo recupero la descripción en formulario para que el usuario entienda que es y no suministrar sólo un número.
La pregunta es cómo hago si la información recuperada es descripción la convierto de nuevo en su correspondiente numero que la identifica y la cargo en la tabla principal como número ue es lo que espera.
Esto ocurre si no me equivoco en esta parte del código:

$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE tasks set t_country = ?, t_project = ?, t_key_stone = ?, t_name = ?, t_description = ?, t_owner = ?, t_coworker = ?, t_start = ?, t_ends = ?, t_status = ?, t_progress = ? WHERE t_id = ?";
$q = $pdo->prepare($sql);
$q->execute(array($t_country,$t_project,$t_key_stone, $t_name,$t_description,$t_owner,$t_coworker,$t_sta rt,$t_ends,$t_status,$t_progress,$t_id));
Database::disconnect();
header("location: projects-read.php?p_id=".$_POST['t_project']);
  #7 (permalink)  
Antiguo 30/03/2016, 13:07
 
Fecha de Ingreso: marzo-2016
Mensajes: 5
Antigüedad: 5 años, 1 mes
Puntos: 0
Respuesta: Lista de selección en formulario

Cita:
Iniciado por loncho_rojas Ver Mensaje
O sea que ni siquiera probaste lo que te dije... me respondes con tu problema nuevamente aludiendo que buscaste en miles de foros la solución mágica, pero te doy la solución posible y no hay caso?

Entonces, si eso no funciona, pues, el problema no es PHP es la manera en que presentas los datos en tu HTML y tu lógica... o sea....

Si tengo esto

TABLA PRODUCTOS
IDPROD = 1
PROD= Pantalones

TABLA RELACIONAL
ID=30
IDPROD=1

Se supone que IDPROD es el nexo... al actualizar la tabla PRODUCTOS, lo máximo que puedes actualizar es el nombre del producto o PROD... no le veo el caso de ACTUALIZAR ningún numero en tu tabla relacional... O sea, si escribo CAMISA, no tiene por qué saber la tabla relacional que al poner CAMISA debe cambiar de ID...

Otra cosa es si lo haces con un SELECT de HTML... pero no queda muy claro lo que estás haciendo ni para que, ya que eso afecta el procedimiento que debes generar... explica que estas haciendo y proporciona tu código HTML del form, capaz podamos interpretar mejor tu situación... pero de todas maneras caigo que estás entendiendo mal el procedimiento de tablas relacionadas, no siempre hay que actualizar la tabla "hijo" porque has cambiado algo en el "padre"...
Estimado loncho_rojas,

no termino de explicarme o tu de entenderme, :), en cualquier caso, amor y paz, imagino que este foro es para sentirse bien haciendo lo que nos gusta y ayudar a otros que saben menos que tú, :).
No quiero en ningún momento actualizar dos tablas ya lo dige anteriormente, es por eso que no puedo aplicar lo que propones no es que no quiera o desprecie tu ayuda, la agradezco enormemente.


Vuelvo a explicarlo:

Tengo una tabla principal (Tasks) algunos campos de esa tabla sólo tienen un número de referencia a otras, por ejemplo en la tabla task hay un campo que es t_country en la db task en este campo solo tengo el dato 1 o 2 o 3 o 4, en la tabla countries tengo dos campos, c_id y c_name.

Al traerme el formulario a pantalla, no quiero traerme al campo de pais t_country porque no tiene sentido para el usuario me traigo c_name, porque si 1 corresponde a Italia, es mejor leer Italia que 1 que nadie sabe que puede ser. OK, hasta aquí todo funciona con el código como está.
Problema, al actualizar el formulario por ejemplo si cambio el país y selecciono Francia en este caso el numero debería ser 2 pero en el campo de formulario tengo el valor seleccionado Francia con lo cual supongo el el programa se hace en la picha un lío.


Mi problema, aparte de que soy principiante que eso tendrás solución a la larga espero, es que no se como decirle a la base de datos principal que si se encuentra con un dato llamado Francia, pase de el y busque su equivalente en dígito. No quiero actualizar la segunda tabla, esa se queda como está, lo que quiero es actualizar la tabla principal tasks con un dígito dependiendo de la información del texto, algo a sí como vete a la tabla countries, mírame que valor corresponde con la expresión Francia y entonces me cargas el id en la tablas tasks.

Una vez mas te agradezco tu tiempo y la ayuda que proporcionas a novatos como yo, pero lo dicho amor y paz que no hay que enfadarse, :), un abrazo.
  #8 (permalink)  
Antiguo 30/03/2016, 15:41
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 17 años, 5 meses
Puntos: 154
Respuesta: Lista de selección en formulario

Hola Aldegunde,

A lo que me refiero es a que tú puedes mostrar una cosa en el <option> y otra en el value:

Código HTML:
Ver original
  1. <option value="id_de_lo_que_sea">Explicación correspondiente al id</option>

Espero que se entienda y te sirva.
  #9 (permalink)  
Antiguo 01/04/2016, 13:53
 
Fecha de Ingreso: marzo-2016
Mensajes: 5
Antigüedad: 5 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Lista de selección en formulario

Maaadre mía ha costado más que un parto!!!
Por fin encontré un sitio en el que explican lo que venia buscando. Les dejo el enlace por si a otra persona le hace falta.
rbczgz, muchas gracias por encaminarme, la poista que me diste me sirvió para encontrar esto:

http://www.solvetic.com/tutoriales/article/2144-select-dependientes-con-ajax/

Saludos
  #10 (permalink)  
Antiguo 01/04/2016, 14:09
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 17 años, 5 meses
Puntos: 154
Respuesta: Lista de selección en formulario

Hola Aldegunde,

Me alegro de que te haya servido de algo, pero en ningún momento comentaste nada que hiciera pensar que necesitabas select dependientes... por eso no te pudimos orientar mejor antes.

Etiquetas: formulario, join, left, update
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:15.