Pregunta:
Fecha: 05-05-2017 07:17:12
(En Español)
Este es el archivo prestamos.php donde lista todos los prestamos y tiene un enlace donde dice "ver abonos" que es donde me lleva al archivo abono_esepcifico.php donde hace el proceso de mostrar solo los abonos del determinado prestamos y me lleva al listado de los abonos al archivo abonos.php
Este es el archivo prestamos.php:
Este es el archivo donde realizo las consulta:
abono_especifico.php
Este es el archivo que me lista los abonos, abonos.php
Se les agradecería una pronta respuesta.
Votos: 0 - Respuestas: 3 - Vistas: 22 Compartir en: Google Facebook Twitter LinkedIn Link
¿Cómo hacer una consulta de una tabla con llaves foráneas de un determinado id?[No resuelta]
Cordial saludos, el problema que tengo es sobre una consulta. Quiero que me busque todos los abonos de un prestamo en especifico. La consulta que tengo me arroja son todos los abonos de todos los prestamos, la verdad no se cual es el error logico.Este es el archivo prestamos.php donde lista todos los prestamos y tiene un enlace donde dice "ver abonos" que es donde me lleva al archivo abono_esepcifico.php donde hace el proceso de mostrar solo los abonos del determinado prestamos y me lleva al listado de los abonos al archivo abonos.php
Este es el archivo prestamos.php:
<?php require('../conexion.php'); include('../menu/menu.php'); $con=Conectar(); //recibimos variable que llegan por metodo post o en el arreglo post extract ($_REQUEST); if (!isset ($_REQUEST['x'])) // si se desconoce la variable x se asigna el valor de 0 $x=0; $sql="SELECT id_prestamo, pre_cliente, fecha, monto, forma_de_pago, fiador, cliente.cedula,cliente.nombre, cliente.apellido from prestamo inner join cliente on prestamo.pre_cliente=cliente.id_cliente ORDER BY id_prestamo ASC"; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Prestamos</title> <meta name="viewport" content="wid=device-wid, user-scalable=no, initial- scale=1.0, minium-scale=1.0"> </head> <body> <div class="container col-lg-12" > <br> <div class="panel panel-success"> <div class="panel-heading" align="center"><h3>PRESTAMOS</h3></div> <div class="panel-body"> <div class="row" align="center"> <button type="button" class="btn btn-success" data-toggle="modal" data- target="#nuevo"> Nuevo prestamo </button></div> <br> <!-- clase para colocar tabla responsive--> <div class="table-responsive"> <table id="grid" class="table table-hover table-condensed table-bordered nowrap dt-responsive" cellpadding="0"> <thead> <tr class="active"> <th>Cedula</th> <th>Cliente</th> <th>Monto $ </th> <th>No Cuotas</th> <th>Interes %</th> <th>Fecha Prestamo</th> <th>Fiador</th> <th>Forma de pago</th> <th>Saldo actual</th> <th>Abonos</th> <th>Opciones</th> </tr> </thead> <?php $stmt=$con->prepare($sql); $resultado=$stmt->execute(); $rows=$stmt->fetchAll(\PDO::FETCH_OBJ); foreach ($rows as $prestamo) { ?> <tr> <td><?php echo $prestamo->cedula?></td> <td><?php echo $prestamo->nombre." ".$prestamo->apellido?></td> <td><?php echo $prestamo->monto?></td> <td></td> <td></td> <td><?php echo $prestamo->fecha?></td> <td><?php echo $prestamo->fiador?></td> <td><?php echo $prestamo->forma_de_pago?></td> <td></td> // este es el enlace que me lleva al archivo para hacer el proceso del query <td><a href="../abonos/abono_especifico.php?id_prestamo=<?php echo $prestamo->id_prestamo ?>">Ver abonos</a> <button type="button" class="btn btn-success btn-sm"><a href="../abonos/frm_abonar.php?id_prestamo=<?php echo $prestamo->id_prestamo ?>" style="text-decoration: none; color:#000;" >Abonar</button></a> </td> <td align="center"><a href="frm_editar.php?id_prestamo=<?php echo $prestamo- >id_prestamo?>"><span class="glyphicon glyphicon-check" title="Editar"> </span></a> <a href="eliminar.php?id_prestamo= <?php echo $prestamo->id_prestamo?>"> <span class="glyphicon glyphicon-remove" title="Eliminar"></span></a></td> <?php } ?> </tr> </table> </div> <div align="center"> <br /><br /> <?php if ($x==1) { echo '<div class="alert alert-success alert-dismissable" data- dismiss="alert" style="width:300px">Se actualizado el prestamo correctamente</div>'; } if ($x==2) { echo '<div class="alert alert-danger alert-dismissable" data-dismiss="alert" style="width:300px">Problemas al actualizar el prestamo</div>'; } if ($x==3) { echo '<div class="alert alert-success alert-dismissable" data- dismiss="alert" style="width:300px">Se ha eliminado el prestamo correctamente</span>'; } if ($x==4) { echo '<div class="alert alert-success alert-dismissable" data- dismiss="alert" style="width:300px">Problemas al eliminar el prestamo, Primero elimina el prestamo</div>'; } if ($x==5){ echo '<div class="alert alert-success alert-dismissable" data- dismiss="alert" style="width:300px">Se ha agregado el prestamo correctamente </div>'; } if ($x==6){ echo '<div class="alert alert-success alert-dismissable" data- dismiss="alert" style="width:300px">Problemas al agregar el prestamo</div>'; } ?> </div> </div> </div> </div> </body> </html>
Este es el archivo donde realizo las consulta:
abono_especifico.php
<?php //archivo para la conexion require "../conexion.php"; $con=Conectar(); $prestamo=$_REQUEST['id_prestamo']; $sql="SELECT a.id_abono, a.abo_prestamo, a.fecha, a.cantidad, a.observacion, p.pre_cliente, c.cedula,c.nombre, c.apellido from abono a, prestamo p, cliente c where a.abo_prestamo='$prestamo' and p.pre_cliente=c.id_cliente ORDER BY id_abono ASC"; $resultado=$con->prepare($sql); $resultado->execute(); if ($resultado){ header ("location: abonos.php?x=7");//x=5 abonos encontrado }else{ header ("location: abonos.php?x=8");//x=6 error al buscar el abono } $resultado->closeCursor(); ?>
Este es el archivo que me lista los abonos, abonos.php
<?php require('../conexion.php'); include('../menu/menu.php'); $con=Conectar(); //recibimos variable que llegan por metodo post o en el arreglo post extract ($_REQUEST); if (!isset ($_REQUEST['x'])) // si se desconoce la variable x se asigna el valor de 0 $x=0; $sql="SELECT a.id_abono, a.abo_prestamo, a.fecha, a.cantidad, a.observacion, p.pre_cliente, c.cedula,c.nombre, c.apellido from abono a, prestamo p, cliente c where a.abo_prestamo=p.id_prestamo and p.pre_cliente=c.id_cliente ORDER BY id_abono ASC"; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Abonos</title> <meta name="viewport" content="wid=device-wid, user-scalable=no, initial- scale=1.0, minium-scale=1.0"> </head> <body> <div class="container" > <br> <div class="panel panel-success"> <div class="panel-heading" align="center"><h3>ABONOS</h3></div> <div class="panel-body"> <div class="table-responsive"> <table id="grid" class="table table-bordered table-hover table-condensed"> <thead> <tr class="active"> <th>Cedula</th> <th>Cliente</th> <th>Descripcion</th> <th>Fecha</th> <th>Abono $</th> <th >Saldo $</th> <th>Opciones</th> </tr> </thead> <?php $stmt=$con->prepare($sql); $resultado=$stmt->execute(); $rows=$stmt->fetchAll(\PDO::FETCH_OBJ); foreach ($rows as $abono) { ?> <tr> <td><?php echo $abono->cedula?></td> <td><?php echo $abono->nombre. " ".$abono->apellido?></td> <td><?php echo $abono->observacion?></td> <td><?php echo $abono->fecha?></td> <td><?php echo $abono->cantidad?></td> <td></td> <td align="center"><a href="frm_editar.php?id_prestamo=<?php echo $prestamo- >id_prestamo?>"><span class="glyphicon glyphicon-check" title="Editar"> </span></a> <a href="eliminar.php?id_prestamo= <?php echo $prestamo->id_prestamo?>"> <span class="glyphicon glyphicon-remove" title="Eliminar"></span></a></td> <?php } ?> </tr> </table> <div align="center"> <br /><br /> <?php if ($x==1) { echo '<span style="color:black">Se actualizado el Abono correctamente</span>'; } if ($x==2) { echo '<span style="color:black">Problemas al actualizar el Abono</span>'; } if ($x==3) { echo '<span style="color:black">Se ha eliminado el Abono correctamente</span>'; } if ($x==4) { echo '<span style="color:black">Problemas al eliminar el Abono</span'; } if ($x==5){ echo '<span style="color:black">Se ha agregado el Abono correctamente</span'; } if ($x==6){ echo '<span style="color:black">Problemas al agregar el Abono</span>'; } if ($x==7){ echo '<span style="color:black">Abonos encontrados</span>'; } if ($x==8){ echo '<span style="color:black">Problema al encontrar los abonos</span>'; } ?> </div> </div> </div> </div> </div> </body> </html> Por ultimo dejo el archivo de conexion.php <?php function Conectar(){ $conn=null; $host='localhost'; $db='prestamos'; $us='root'; $pass=''; try { $conn= new PDO('mysql:host='.$host.';dbname='.$db, $us, $pass); } catch (PDOException $e) { echo ":( Error al conectar a la base de datos".$e; exit; } return $conn; } ?>
Se les agradecería una pronta respuesta.
Votos: 0 - Respuestas: 3 - Vistas: 22 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 06-05-2017 09:12:59 Hola Juan
He mirado por arriba el codigo.
Te voy a dar unos tips para que investigues un poco y que te puedan guiar para resolver el problema con las buenas prácticas del uso del lenguaje.
1. Haz una prueba en PHPMYADMIN de la consulta SELECT para saber si el resultado que te arroja es el esperado.
2. Es desaconsejado el uso de extract() según la doc oficial de PHP hablan de un problema de su uso "Cuidado con la función extract de php"
3. Es desaconsejado el uso de $_REQUEST, evitar las superglobales es mas saludable utilizar GET/POST/Cookie según corresponda, en tu caso seria $_GET
4. Creo que no se deberia utilizar header() en tu proyecto ya que no cumple con su propósito. Explicación del uso de header () con locaction (Es para redireccionamiento). En tu caso deberia ser require_once() o include_once() según sea el caso. Diferencias entre include, include_once, require y require_once
Teniendo en cuenta todo ello habría que reescribir todo el codigo.
Espero que te sirva como punto de partida.
Este es mi punto de vista, alguien más podría hacer más luz sobre el tema
Saludos Votos: 1 - Link respuesta -
Fecha: 10-05-2017 03:39:40 Hola, en tu caso agregaría 2 tablas más.
Abonos --> id int primary key, descripcion varchar(30)
prestamos --> id int primary key, descripcion varchar(30)
abonosxprestamos --> id int auto_increment, id_abono int (fk de abonos), id_prestamo (fk de prestamos)
primary key(id, id_abono, id_prestamo)
De esa forma puedes hacer un select seleccionando los abonos de determinado prestamo
por ej...
select id_abono from abonosxprestamos where id_prestamo = ...
Eso si, deberías modificar un poquito el php.
Pero no tendrías problemas! Un saludo Votos: 1 - Link respuesta -
Fecha: 10-05-2017 09:24:37 Hola Juan. Mirando el código que estas presentando, principalmente en el sql, noto que no estas usando el JOIN para unir las tablas en las consultas, como si lo haces en el archivo: prestamos.php.
Un dato que resulta importante es con que motor de bases de datos estas trabajando. Si estas trabajando con MySql, como comento Walter, es recomendable realizar en PHPMYADMIN o en WORKBENCH las consultas a modo de QUERY, con el fin de verificar que nos presente los datos que estamos necesitando.
Verifica que la base de datos la tengas bien normalizada, esto quiere decir que contenga las tablas necesaria para dichas consultas.
Según entiendo tu consulta tendría que ser algo similar a esta:
$sql="SELECT a.id_abono, a.abo_prestamo, a.fecha, a.cantidad, a.observacion, p.pre_cliente, c.cedula,c.nombre, c.apellido from abono a join prestamo p on a.abo_prestamo=p.id_prestamo join cliente c on p.pre_cliente=c.id_cliente where a.abo_prestamo='$variable' ORDER BY id_abono ASC";
Saludos. Votos: 0 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión