Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO consulta PHP - MYSQL -

Estas en el tema de consulta PHP - MYSQL - en el foro de PHP en Foros del Web. buen día amigos, les cuento q estoy tratando de hacer un sistemas de pedidos para un restaurant ;ya que es un trabajo de la universidad ...
  #1 (permalink)  
Antiguo 17/08/2014, 09:15
 
Fecha de Ingreso: agosto-2014
Ubicación: peru
Mensajes: 24
Antigüedad: 9 años, 8 meses
Puntos: 0
Pregunta consulta PHP - MYSQL -

buen día amigos, les cuento q estoy tratando de hacer un sistemas de pedidos para un restaurant ;ya que es un trabajo de la universidad ojala alguien pueda ayudarme.

tengo una tabla pedidos en donde guardo la información de los pedidos, tanbien tengo una tabla que se llama detalle pedidos la que me guarda los detalles de cada pedido de la tabla pedidos y una tabla carta donde almaceno la información de lo platos. tengo la necesidad de hacer 2 consultas :

1° la primera es para que el detalle_pedido guarde el id de la tabla pedidos; dicho id es pasado por el GET y de esta forma lograr que cada pedido tenga su propio detalle.

$codped = $_GET['id'];
$sql = "SELECT * FROM detalle_pedidos WHERE pedidos_id=$codped ORDER BY cant,comentario"
$res = mysql_query($sql)


2° la segunda es para jalar datos de otra tabla (carta) para esto utilizo el NNER JOIN .

$sql = "SELECT * FROM detalle_pedidos det
INNER JOIN carta ca
ON det.carta_id = ca.idcarta";
$res = mysql_query($sql);


Bueno si pongo las consultas una a la vez si se llegan a realizar ; es decir si me corre el código pero solo si las pongo por separado una a la vez, o bien una o bien la otra.

lo que quiero lograr y en lo que necesito ayuda es como hacer que estas dos consultas se unan en una sola fusionarlas o de lo contrario ejecutarlas las dos consultas para lograr imprimir en pantalla
los datos de la tabla carta y detalle_pedidos ligados a cada pedido de la tabla pedidos

esta es la parte en donde visualizo en pantalla los datos requeridos .

Como seria esta parte ?

<?php while ($fila = mysql_fetch_assoc($res)) : ?>

<tr>
<td><?php echo $fila['id'] ?></td>
<td><?php echo $fila['cant'] ?></td>
<td><?php echo utf8_encode($fila['descripcion'])?></td>
<td><?php echo utf8_encode($fila['comentario'])?></td>
<td><?php echo $fila['estado'] ?></td>
<td>&nbsp;</td>
</tr>
<?php endwhile?>

estuve probando y guarda todo bien en la tabla pero la variable descripción en detalle_pedidos se comparte para todos los pedidos y así no debe ser cada pedidos debe tener su propio detalle, es decir la variable descripción necesita del ($res1)para que se mantenga con el ID de pedidos y tanbien necesita el ($res2) para que busque en la otra tabla Carta don de se encuentran la descripción de los platos; de forma seria en este caso .
aquí esta el código completo:

<?php
$codped = $_GET['id'];

require("conexion.php");
$sql1 = "SELECT * FROM detalle_pedidos WHERE pedidos_id=$codped ORDER BY cant,comentario";
$sql2 = "SELECT * FROM detalle_pedidos det
INNER JOIN carta ca
ON det.carta_id = ca.idcarta";

$res1= mysql_query($sql1);
$res2 = mysql_query($sql2);
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<title>Detalle Pedidos</title>
</head>
<body>
<h2 align="center">Detalle Pedidos</h2>
<table width="800px" align="center" border="1">
<tr>
<th>Id</th>
<th>Cant.</th>
<th>Nombre de Plato</th>
<th>Comentario</th>
<th>Estado</th>
<th>Acción</th>
</tr>
<?php while ($fila = mysql_fetch_assoc($res)) : ?>

<tr>
<td><?php echo $fila['id'] ?></td>
<td><?php echo $fila['cant'] ?></td>
<td><?php echo utf8_encode($fila['descripcion'])?></td>
<td><?php echo utf8_encode($fila['comentario'])?></td>
<td><?php echo $fila['estado'] ?></td>
<td>&nbsp;</td>
</tr>
<?php endwhile?>

</table>
<a href="nuevodetallepedido.php?id=<?php echo $codped?>">Nuevo Detalle</a>
<?php
mysql_close();
?>
</body>
</html>


gracias de antemano.
  #2 (permalink)  
Antiguo 17/08/2014, 18:24
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: consulta PHP - MYSQL -

supongo que solo necesitas hacer esto
Código PHP:
Ver original
  1. $sql2 = "SELECT * FROM detalle_pedidos det
  2. INNER JOIN carta ca
  3. ON det.carta_id = ca.idcarta WHERE pedidos_id='$codped'";
Porque es la clave foranea que une ambas tablas
Tambien te recomiento que las claves foraneas las nombres igual que en la tabla de origen es decir que "idcarta" sea igual en "carta" que en "detalle_pedidos" para evitar confusiones.
  #3 (permalink)  
Antiguo 18/08/2014, 14:26
 
Fecha de Ingreso: agosto-2014
Ubicación: peru
Mensajes: 24
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: consulta PHP - MYSQL -

tienes razón amigo oscurogt esto es lo que estaba buscando, tanbien nombre igual a las claves foraneas,

seguramente voy a tener otras interrogantes mas adelante espero y agradesco con anticipación toda ayuda. buenas tardes
  #4 (permalink)  
Antiguo 20/08/2014, 17:21
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: consulta PHP - MYSQL -

Que bueno que hayas despejado tus dudas, lo que yo haría seria lo siguiente:

1. Empezar a utilizar mySqli
y cambiar el código de la siguiente manera:

Código PHP:
Ver original
  1. <?php
  2. $codped = $_GET['id'];
  3. require("conexion.php");
  4. $sql1=$con->query("SELECT det.id, det.cant, ca.descripcion, ca.comentario, det.estado
  5. FROM detalle_pedidos det   
  6. INNER JOIN carta ca
  7. ON det.carta_id = ca.idcarta
  8. WHERE det.pedidos_id='$codped'");
  9. ?>
  10. <!DOCTYPE html>
  11. <html lang="es">
  12. <head>
  13. <meta charset="UTF-8" />
  14. <title>Detalle Pedidos</title>
  15. </head>
  16. <body>
  17. <h2 align="center">Detalle Pedidos</h2>
  18. <table width="800px" align="center" border="1">
  19. <tr>
  20. <th>Id</th>
  21. <th>Cant.</th>
  22. <th>Nombre de Plato</th>
  23. <th>Comentario</th>
  24. <th>Estado</th>
  25. <th>Acción</th>
  26. </tr>
  27. <?php while ($fila = $sql1->fetch_assoc()){?>
  28.  
  29. <tr>
  30. <td><?php echo $fila['id'];?></td>
  31. <td><?php echo $fila['cant'];?></td>
  32. <td><?php echo utf8_encode($fila['descripcion']);?></td>   
  33. <td><?php echo utf8_encode($fila['comentario']);?></td>
  34. <td><?php echo $fila['estado'];?></td>
  35. <td>&nbsp;</td>
  36. </tr>  
  37. <?php }?>
  38.  
  39. </table>
  40. <a href="nuevodetallepedido.php?id=<?php echo $codped;?>">Nuevo Detalle</a>
  41. <?php
  42. $con->close();
  43. ?>
  44. </body>
  45. </html>
Lo demás lo dejo a tu discreción
Cita:
Iniciado por migsbaz Ver Mensaje
tienes razón amigo oscurogt esto es lo que estaba buscando, tanbien nombre igual a las claves foraneas,

seguramente voy a tener otras interrogantes mas adelante espero y agradesco con anticipación toda ayuda. buenas tardes
  #5 (permalink)  
Antiguo 23/08/2014, 08:41
 
Fecha de Ingreso: agosto-2014
Ubicación: peru
Mensajes: 24
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: consulta PHP - MYSQL -

hola me parece mas practica esta forma la cual me sugieres las estoy aplicando pero obtengo un error:

Fatal error: Call to a member function query() on a non-object in E:\xampp\htdocs\Restaurant.mas\detallepedidos.php on line 4

lo aplique de esta forma:

<?php
$idpedidos=$_GET['idpedidos'];
require("conexion.php");
$sql1=$conexion->query("SELECT det.iddetallepedidos, det.idpedidos, det.cantidad, ca.descripcion, det.comentario, det.estadodet
FROM detalle_pedidos det
INNER JOIN carta ca
ON det.idcarta = ca.idcarta
WHERE idpedidos='$idpedidos'");
?>

esta es mi conexion.php


<?php


$conexion=mysql_connect("localhost","root","###### #");
mysql_select_db('restaurant.mas',$conexion);


?>


cual es el error ?

Última edición por migsbaz; 23/08/2014 a las 09:24
  #6 (permalink)  
Antiguo 24/08/2014, 16:30
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: consulta PHP - MYSQL -

tu conexion no está hecha en mysqli debería ser así
Código PHP:
Ver original
  1. <?php
  2. ini_set('default_charset', 'utf-8');
  3. $server = 'localhost';
  4. $user = 'root';
  5. $pass = 'root';
  6. $db = 'base_de_datos';
  7. $conexion = new MySQLi($server,$user,$pass,$db);
  8.     printf("Falló la conexión: %s\n", mysqli_connect_error());
  9.     exit();
  10. }
  11.  
  12. if (!mysqli_set_charset($conexion, "utf8")) {
  13.     printf("Error loading character set utf8: %s\n", mysqli_error($conexion));
  14. } else {
  15.    mysqli_character_set_name($conexion);
  16. }
  17. ?>
  #7 (permalink)  
Antiguo 25/08/2014, 08:47
 
Fecha de Ingreso: agosto-2014
Ubicación: peru
Mensajes: 24
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: consulta PHP - MYSQL -

hola buen dia.

ya cambie mi conexión de la forma sugerida pero me genera un error:

>>>>Fatal error: Call to a member function query() on a non-object in E:\xampp\htdocs\Restaurant.mas\detallepedidos.php on line 4<<<<<

esta es mi consulta en la pagina : detallepedidos.php


<?php
$idpedidos=$_GET['idpedidos'];
require("conexion.php");
$sql1=$conexion->query("SELECT det.iddetallepedidos, det.idpedidos, det.cantidad, ca.descripcion, det.estadodet >>>esta es la linea del error <<<<<<
FROM detalle_pedidos det
INNER JOIN carta ca
ON det.idcarta = ca.idcarta
WHERE idpedidos='$idpedidos'");
?>

de este modo imprimo:

<?php while ($fila = $sql1->fetch_assoc()){?>
<tr>
<td bgcolor="#FFFFCC"><div align="center" class="Estilo3"><?php echo $fila['iddetallepedidos'] ?></div></td>
<td bgcolor="#FFFFCC"><div align="center" class="Estilo6"><?php echo $fila['idpedidos'] ?></div></td>
<td bgcolor="#FFFFCC"><div align="center" class="Estilo5"><?php echo $fila['cantidad'] ?></div></td>
<td bgcolor="#FFFFCC"><div align="left" class="Estilo5"><?php echo $fila['descripcion']?></div></td>
<td bgcolor="#FFFFCC"><div align="center" class="Estilo5"><?php echo $fila['estadodet'] ?></div></td>

<td>&nbsp;</td>
<td bgcolor="#FFFF99"><div align="center"><a href="modificardetalle.php?idpedidos=<?php echo $fila['idpedidos'];?>">Modificar</a> /
<a href="eliminardetalle.php?idpedidos=<?php echo $fila['idpedidos']?>&iddetallepedidos=<?php echo $fila['iddetallepedidos']?>" >Eliminar</a></div></td>

</tr>
<?php }?>

disculpa la molestia estuve intentando resolver el error por mi mismo pero me e liado.
ya que recién estoy dando mis primeros pasos en PHP MYSQL.

espero su ayuda gracias.

Última edición por migsbaz; 25/08/2014 a las 08:52
  #8 (permalink)  
Antiguo 25/08/2014, 13:50
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: consulta PHP - MYSQL -

Parece que tu problema está en el query, proba la consulta en Mysql Workbench o el que utilices para este fin, seguramente no existe algun campo en alguna de las tablas, deberías preguntarte si estan bien escritas tambien, aunque no viene al caso proba cambiar INNER JOIN por LEFT JOIN
  #9 (permalink)  
Antiguo 26/08/2014, 08:43
 
Fecha de Ingreso: agosto-2014
Ubicación: peru
Mensajes: 24
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: consulta PHP - MYSQL -

hola de nuevo y gracias por seguir ayudándome.

te cuento que logre ejecutar las consultas con MYSQLI tuve varios errores de sintaxis ademas de unos nombre errados de los campos en tablas.

- tengo mis pagina ( Pedidos.php) te muestro el código para que lo chekees haber que se puede mejorar.


Pedidos.php:

<?php
require('conexion.php');
$sql=$conexion->query("SELECT ped.idpedidos, ped.fechapedido, ped.estadopedido, mo.nommoz, me.idmesas
FROM pedidos ped
INNER JOIN mesas me
ON ped.idmesas=me.idmesas
INNER JOIN mozos mo
ON ped.idmozos=mo.idmozos");

?>

de esta forma imprimo:

<?php while ($row = $sql->fetch_assoc()){?>
<tr>
<td bgcolor="#F0F0F0"><div align="center" class="Estilo53"><?php echo $row['idpedidos'];?></div> </td>
<td bgcolor="#F0F0F0"><div align="center" class="Estilo44"><?php echo $row['idmesas'];?></div></td>
<td bgcolor="#F0F0F0"><div align="center" class="Estilo44"><?php echo $row['nommoz'];?></div></td>
<td bgcolor="#F0F0F0"><div align="center" class="Estilo49"><span class="Estilo52"><?php echo $row['fechapedido'];?></span></div></td>
<td bgcolor="#F0F0F0"><div align="center" class="Estilo44"><?php echo $row['estadopedido'];?></div></td>
<td>&nbsp;</td>
<td bgcolor="#FFFF99"><div align="center"><a href="detallepedidos.php?idpedidos=<?php echo $row['idpedidos'];?>">Detalle Pedido</a></div></td>
<td>&nbsp;</td>
<td bordercolor="#FFFFFF" bgcolor="#FFFF99"><div align="center"><a href="detallepedidos.php?idpedidos=<?php echo $row['idpedidos'];?>"
></a><a href="modificarpedido.php?idpedidos=<?php echo $row['idpedidos'];?>">Modificar</a> /
<a href="eliminarpedido.php?idpedidos=<?php echo $row['idpedidos'];?>">Eliminar</a> </div></td>
</tr>
<?php } ?>
  #10 (permalink)  
Antiguo 26/08/2014, 17:33
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: consulta PHP - MYSQL -

Me alegra haber sido de ayuda, quizás de mejoras solamente te referís a lo visual, pero eso ya es CCS3 en cuanto a esta linea
Código HTML:
Ver original
  1. <td bgcolor="#FFFF99"><div align="center"><a href="detallepedidos.php?idpedidos=<?php echo $row['idpedidos'];?>">Detalle Pedido</a></div></td>
quizás la podrías manejar con jquery y mandarla por post para que no sea tan vulnerable o codificarla de esta manera
Código PHP:
Ver original
  1. <?php echo base64_encode($row['idpedidos']);?>
y recibir de la siguiente manera
Código PHP:
Ver original
  1. <?php $id=base64_decode($_GET['idpedidos']); ?>
para que tu url no sea vulnerada tan facilmente
  #11 (permalink)  
Antiguo 26/08/2014, 20:37
 
Fecha de Ingreso: agosto-2014
Ubicación: peru
Mensajes: 24
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: consulta PHP - MYSQL -

interesante este ultimo aporte, si había pensado eso pero no sabia q hacer , la seguridad es muy importante, voy a empezar a trabajar en esto tratando de aplicar en mi código el Jquery como tu me sugieres;

mientras tanto tengo una pagina (InsertarDetalle.php); con la cual inserto un nuevo detalle en mi tabla (detallepedidos) ; ¿Como puedo mejorar esta consulta o es que esta bien así ? ¿quizá hay otra forma mas adecuada de realizarla?

gracias de antemano

InsertarDetalle.php:

<?php
$idpedidos=$_GET['idpedidos'];
require('conexion.php');
$cantidad=$_POST['cantidad'];
$carta=$_POST['carta'];
$estadodet=$_POST['estado'];

$sql="INSERT INTO detalle_pedidos (cantidad, idpedidos, idcarta, estadodet) VALUES ('$cantidad', '$idpedidos','$carta','$estadodet')";
$resultado=$conexion -> query($sql);
?>


<?php if($resultado>0){ ?>

<h1>Detalle Guardado</h1>
<?php }else{ ?>
<h1 class="Estilo3">Error al Guardar Detalle</h1>
<?php } ?>

Última edición por migsbaz; 26/08/2014 a las 20:46
  #12 (permalink)  
Antiguo 27/08/2014, 16:34
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: consulta PHP - MYSQL -

La verdad no se que es lo que queres con esta parte
Código PHP:
Ver original
  1. <?php if($resultado>0){ ?>
Digo si queres evitar que se inserten datos o algo asi o es para comprobar si hay error por lo demás está bien hecha la consulta
  #13 (permalink)  
Antiguo 27/08/2014, 19:48
 
Fecha de Ingreso: agosto-2014
Ubicación: peru
Mensajes: 24
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: consulta PHP - MYSQL -

bueno

Código PHP:
Ver original
  1. <?php if($resultado>0){ ?>

lo uso para comprobar si es que se a logrado insertar registros en la base de datos y me imprime en pantalla un mensaje de guardado satisfactorio.

¿usted cree que esta de mas esta parte?

por otro lado como soy nuevo en este foro tengo una interrogante, hay varias dudas que deseo despejar sobre PHP y MYSQL ; usted cree que debería marcar este como tema solucionado y crear otro tema o lo que debería hacer es seguir formulando preguntas en este mismo tema. disculpa tantas pregunta solo quiero hacer las cosas bien. gracias por la atencion amigo oscurogt
  #14 (permalink)  
Antiguo 28/08/2014, 10:19
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: consulta PHP - MYSQL -

Pienso que está bien tu comprobacion, y pienso que tenes que poner como solucionado el tema y seguir haciendo preguntas ya que las nuevas no tienen relacion con la primera. Saldos.

Etiquetas: html, mysql, select, sql, tabla, variable
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:41.