Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] En vez de mostrar el id, mostrar el nombre

Estas en el tema de En vez de mostrar el id, mostrar el nombre en el foro de PHP en Foros del Web. Buenas Gente! Con este script verifico que reservas tengo. Funciona bien! Lo único que no me sale es mostrar los nombres de las localidades en ...
  #1 (permalink)  
Antiguo 14/01/2017, 15:13
 
Fecha de Ingreso: febrero-2012
Ubicación: Cancun
Mensajes: 79
Antigüedad: 12 años, 2 meses
Puntos: 0
En vez de mostrar el id, mostrar el nombre

Buenas Gente! Con este script verifico que reservas tengo. Funciona bien! Lo único que no me sale es mostrar los nombres de las localidades en la tabla de resultados. Como podría realizarlo? Gracias!!


Código PHP:
<?php
$dia
=date("Y-m-d");

/*TABLA LOCALIDADES, DE LA CUAL UTILIZO EL ID PARA REALIZAR LA CONSULTA Y MUESTRO EL NOMBRE EN EL SELECT */

/*localidad_id - localidad */

$localidades mysqli_query($db,"SELECT * from localidades");

?>
<form method="POST" action="inicio.php">
    <input type="date" name="fecha" value="<?php echo $dia ?>">
    Origen:
    <select name="origen">
    <option value=""></option>
            <?php
            
while ($resultado mysqli_fetch_array($localidades)){
            
?>
        <option value = "<?php echo $resultado['localidad_id']; ?>"><?php echo $resultado['localidad']; ?></option>
            <?php
            
}
?>
    </select>
<?php
$localidades1 
mysqli_query($db,"SELECT * from localidades");
?>
    Destino:
    <select name="destino">
    <option value=""></option>
            <?php
            
while ($resultado1 mysqli_fetch_array($localidades1)){
            
?>
        <option value = "<?php echo $resultado1['localidad_id']; ?>"><?php echo $resultado1['localidad']; ?></option>
            <?php
            
}
?>
    </select>
    <input type="submit" name="enviar" value="Procesar" />
</form>

/* TABLA DE RESULTADOS */

<h1 align = "center">RESERVAS</h1>
<table border = "" align = "center" cellpadding = "10">
    <tr><td><b>Nombre</b></td><td><b>Origen</b></td><td><b>Destino</b></td><td><b>Sube en</b></td></tr>

<?php

/*DEBO CONSULTAR LAS LOCALIDADES POR EL ID */

$consulta mysqli_query($db,"SELECT * from transacciones where tipo_ticket_id = 14 and fecha = '" .$_POST['fecha']. "' and inicio_id = '" .$_POST['origen']. "' and destino_id = '" .$_POST['destino']. "'");
while (
$row mysqli_fetch_array($consulta)){

/*ME TRAE LOS REGISTROS CON EL ID, PERO QUIERO MOSTRAR EL NOMBRE DE LA LOCALIDAD CORRESPONDIENTE, UTILIZANDO LA TABLA LOCALIDADES */

 
?>

<tr>

    <td> <?php echo $row['to']; ?></td>
    <td> <?php echo $row['inicio_id']; ?></td>
    <td> <?php echo $row['destino_id']; ?></td>
    <td> <?php echo $row['obs']; ?></td>
</tr>

<?php

}

?>
</table>


<?php

        mysqli_free_result
($localidades);
        
mysqli_free_result($localidades1);
        
mysqli_free_result($consulta);
        
mysqli_close($db);

?>
  #2 (permalink)  
Antiguo 14/01/2017, 16:19
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años, 1 mes
Puntos: 170
Respuesta: En vez de mostrar el id, mostrar el nombre

Entiendo lo que quieres... creo que lo que mejor te funcionaria es una funcion que te devuelva el string(nombre) de la localidad segun id enviada, te dejo un ejemplo:
(segun veo en tu tabla localidades, el nombre se guarda en el campo "localidad")
Código PHP:
Ver original
  1. function nombre_localidad($id){
  2. $nombre = "No Existe";
  3. $local = mysqli_query($db,"SELECT * from localidades");
  4. if($resultado = mysqli_fetch_array($local)){
  5. $nombre = $resultado['localidad'];
  6. }
  7. return $nombre;
  8. }

De esta manera solo la invocas donde actualmente te aparece la id de la localidad(existente claro):

Código PHP:
Ver original
  1. <td> <?php echo nombre_localidad($row['inicio_id']); ?></td>

y estarias obteniendo el nombre de la misma.
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)

Última edición por petit89; 14/01/2017 a las 16:25
  #3 (permalink)  
Antiguo 15/01/2017, 03:28
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: En vez de mostrar el id, mostrar el nombre

Supongo que las tablas están relacionadas por el id_localidad, id_origen y id_destino, por lo que yo reformulation la consulta sql con inner join para traer los campos necesarios de la otra tabla.

Código SQL:
Ver original
  1. SELECT
  2.     transacciones.TO,
  3.     transacciones.obs,
  4.     O.localidad origen,
  5.     D.localidad destino
  6.  
  7. FROM transacciones
  8. INNER JOIN localidades O ON transacciones.inicio_id=O.id
  9. INNER JOIN localidades D ON transacciones.destino_id=D.id
  10.  
  11. WHERE
  12.     transacciones.tipo_ticket_id=14
  13.     AND transacciones.fecha='xxxx-xx-xx'
  14.     AND transacciones.inicio_id=x
  15.     AND transacciones.destino_id=x

Es posible que la consulta tenga algún error, pero considero que se sobreentiende la idea.

Lo que te comenta el compañero petit89, puede ser funcional, pero pienso que no es lo más recomendable,
__________________
Unset($vida['malRollo']);
  #4 (permalink)  
Antiguo 16/01/2017, 01:13
 
Fecha de Ingreso: febrero-2012
Ubicación: Cancun
Mensajes: 79
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: En vez de mostrar el id, mostrar el nombre

Muchas gracias @petit89 y @xerifandtomas!!

La verdad es que estuve casi de lograrlo pero aun sigo complicado.
Con la ayuda de @petit89 me devuelve siempre la primera opción de la lista, no la localidad seleccionada. Pero es cosa de que realice mas pruebas hasta que de con la función funcionado correctamente! Gracias!

Con la ayuda de @xerifandtomas, entendí la idea y la puse en practica. Me funciono correctamente pero solo una localidad. Me refiero a que en la tabla localidades no tengo una columna origen y destino, solo una columna localidad. Por lo que bien, no se como realizar la consulta.:

Código SQL:
Ver original
  1. SELECT
  2.  transacciones.TO,
  3.  transacciones.obs,
  4.  localidades.localidad /*ACÁ NO SE COMO HACER PARA CONSULTAR EL ORIGEN Y DESTINO, TENIENDO UNA SOLA COLUMNA "LOCALIDAD".*/
  5.  
  6. FROM transacciones
  7.  
  8. INNER JOIN localidades ON transacciones.inicio_id = localidades.localidad_id
  9.  
  10. /*LOGRANDO CORRECTAMENTE EL SELECT, SUPONGO QUE CON ESTO PODRIA TRAER EL NOMBRE DEL DESTINO CORRECTAMENTE.
  11. INNER JOIN localidades ON transacciones.destino_id = localidades.localidad_id
  12. */
  13. WHERE transacciones.tipo_ticket_id=14 AND fecha = '2017-01-14'
  #5 (permalink)  
Antiguo 16/01/2017, 03:13
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: En vez de mostrar el id, mostrar el nombre

Si te fijas en la consulta que te pase, hay dos INNER uno para extraer el origen y otro para el destino, al ser la misma tabla, se le asigna un alias ( O de origen y D de destino) en los campos a seleccionar al ser el mismo campo (localidad) también se le debe de asignar un alias para diferenciarlos ( origen y destino) quizás te quede más claro con AS aunque es totalmente prescindible.

Código SQL:
Ver original
  1. SELECT
  2.     transacciones.TO,
  3.     transacciones.obs,
  4.     O.localidad AS origen,
  5.     D.localidad AS destino
  6.  
  7. FROM transacciones
  8. INNER JOIN localidades AS O ON transacciones.inicio_id=O.id
  9. INNER JOIN localidades AS D ON transacciones.destino_id=D.id
  10.  
  11. WHERE
  12.     transacciones.tipo_ticket_id=14
  13.     AND transacciones.fecha='xxxx-xx-xx'
  14.     AND transacciones.inicio_id=x
  15.     AND transacciones.destino_id=x
__________________
Unset($vida['malRollo']);
  #6 (permalink)  
Antiguo 16/01/2017, 13:18
 
Fecha de Ingreso: febrero-2012
Ubicación: Cancun
Mensajes: 79
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: En vez de mostrar el id, mostrar el nombre

Hola @xerifandtomas!! Si, disculpame. Así también lo he intentado y no lo he logrado. Cuando tu pones :

O.localidad AS origen,
D.localidad AS destino

Yo no tengo dos columnas (O.localidad, D.localidad), solo tengo una (localidad). Y es por eso que no sale. Me da error.

Así es como intento realizarlo:


Código SQL:
Ver original
  1. SELECT
  2. transacciones.TO,
  3. transacciones.obs,
  4. localidades.localidad AS origen,
  5. localidades.localidad AS destino
  6.  
  7. FROM transacciones
  8.  
  9. INNER JOIN localidades AS origen ON transacciones.inicio_id = localidades.localidad_id
  10. INNER JOIN localidades AS destino ON transacciones.destino_id = localidades.localidad_id  
  11.  
  12. WHERE
  13. transacciones.tipo_ticket_id = 14
  14. AND transacciones.inicio_id=x
  15. AND transacciones.destino_id=x

Última edición por agustinpak; 16/01/2017 a las 14:17
  #7 (permalink)  
Antiguo 16/01/2017, 14:53
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: En vez de mostrar el id, mostrar el nombre

A ver prueba así, ejecútalo en phpmyadmin y me dices que error te da:

Código SQL:
Ver original
  1. SELECT
  2.     transacciones.TO,  /* TO es minúscula pero el HIGHLIGHT fw lo convierte  */
  3.     transacciones.obs,
  4.     O.localidad AS origen,
  5.     D.localidad AS destino
  6.  
  7. FROM transacciones
  8. INNER JOIN localidades AS O ON transacciones.inicio_id=O.localidad_id
  9. INNER JOIN localidades AS D ON transacciones.destino_id=D.localidad_id
  10.  
  11. WHERE
  12.     transacciones.tipo_ticket_id=14
  13.     AND fecha = '2017-01-14'

Sí puedes déjanos la estructura de las 2 tablas.
__________________
Unset($vida['malRollo']);
  #8 (permalink)  
Antiguo 16/01/2017, 14:58
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: En vez de mostrar el id, mostrar el nombre

Estaba aclarando lo que respondió xerifandtomas y se me ha adelantado... borro lo que había puesto...

Última edición por rbczgz; 16/01/2017 a las 15:01 Razón: Borrar lo que había escrito porque se me ha adelantado xerifandtomas y no hacía falta mi aclaración.
  #9 (permalink)  
Antiguo 16/01/2017, 15:41
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: En vez de mostrar el id, mostrar el nombre

@rbczgz, yo tampoco es que le haya explicado mucho, jeje. Quizás tu aclaración le hubiese venido bien.

Cita:
Cuando tu pones :

O.localidad AS origen,
D.localidad AS destino

Yo no tengo dos columnas (O.localidad, D.localidad), solo tengo una (localidad). Y es por eso que no sale. Me da error.
La O y la D en este caso representa alias de la tabla localidades, no de la columna, si te fijas en cada uno de los INNER estamos asignando alias a la tabla localidades.

como el campo localidad coincide para origen y destino, le asignamos un alias al campo localidad con origen y destino.

Esta parte se puede interpretar como:

O.localidad AS origen ...
origen es el alias del campo localidad de la tabla O,

INNER JOIN localidades AS O ON ...
O es un alias de la tabla localidades


Hacemos lo mismo para el destino.
__________________
Unset($vida['malRollo']);
  #10 (permalink)  
Antiguo 16/01/2017, 16:15
 
Fecha de Ingreso: febrero-2012
Ubicación: Cancun
Mensajes: 79
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: En vez de mostrar el id, mostrar el nombre

Genial!! Funciona perfecto!!

Si, la verdad es que me confundí e interprete mal lo que me explicabas. No sabia que se le podía aplicar el alias de esa forma. Muy bueno!

Muchas gracias por la ayuda y la explicación, ahora se como hacerlo!

Gracias a todos lo que respondieron.

Saludos!!

Etiquetas: fecha, mysql, nombre, registro, select, tabla, vez
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 05:10.