[Php-avanzado] Actualizar pagina desde otra

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Vie Jun 18 23:16:13 ART 2010


Hola Leandro,

	tenés un problema en el orden de las llamadas.
	Fijate que en show.php, mostrás los productos solo si if
(isset($_SESSION['id'])){
	El $_SESSION['id'] se determina en login.php, 
  if (($pass==$usuario['pass'])&&($usuario['id_tip_user']==2)){
	$_SESSION['id']=$usuario['id'];
	etc

	pero login.php incluido después de categorias.php que incluye a
art_show.php, que a su vez incluye a show.php, que cuando se ejecuta, no
pasa por el isset($_SESSION['id'])

	Como es una variable de sesión, la segunda vez que vas a la página, sí
está seteada y por eso ves que al recargar sí se ven las cosas...

	Ahora bien, esto te pasa porque tenés un código endiabladamente
complejo!!!
	La idea del concepto de layout, es que tengas muchas, repito, muchas
páginas, y que al tener todas el mismo layout, sea fácil cambiarle lo
que muestran adentro, porque en su cuerpo incluyen diferentes cosas...
tu aplicación siempre le muestra al usuario index.php en el url, con lo
que tu sitio es imposible de bookmarkear (perdón por el anglicismo) y
además te ganaste un montón de complejidad innecesaria, porque no agrega
funcionalidad.

	Dicen los que sabes que "depurar el código es mucho más difícil que
escribirlo, por eso, si escribimos el código más complejo de que somos
capaces, no seremos capaces de depurarlo si tiene un error". 
	Este principio fue elevado a "metodología de programación" y se llama
KISS.

	Solución: el código de login tiene que estar arriba del todo (lo que
además es lógico, porque si no la aplicación te permite hacer lo que
esté antes del login aunque no estés logueado)

	Seguimos!




El vie, 18-06-2010 a las 21:15 +0000, Leandro Schereik escribió:
> Hola Leo te agrego index.php y art_show.php la query esta bien genera
> lo correcto.
> El sabado no puedo ir pero en la semana si en que dias y horarios
> podria pasar?
> 
> 
> index.php
> ---------
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
>  "http://www.w3.org/TR/html4/loose.dtd">
> <html>
> <head>
> <title>Inicio</title>
> <meta http-equiv="content-type" content="text/html; charset=UTF-8">
> <link rel="stylesheet" type="text/css" href="css/styles.css">
> </head>
> 
> <body>
> 
> <!-- Wrapper -->
> <div id="wrapper">    
>     
>     <!-- Header -->
>     <div id="header">    
>         <? include("header.php"); ?>
>     </div>
>     <!-- Header -->
>     
>     <!-- Content -->
>     <div id="content">
>         <img src="images/tail-top.gif">
>     
>         <!-- Categorias -->
>         <div id="categorias">
>           
>           <?  include("categorias.php"); ?>
>         </div>
>         <!-- Categorias -->
>         
>         <!-- Medio -->
>         <div id="medio">
>     
> 
>         </div>
>         <!-- Medio -->
>     
>             
>     
>         <!-- Carrito -->
>         <div id="carrito">
>             <? include("login.php"); ?>
>         
>          </div>
>         <!-- Carrito -->    
>     
>     
>     </div>
>     <!-- Content -->
>     
> 
> </div>
> <!-- Wrapper -->
> 
> <? // session_destroy(); ?>    
> </body>
> 
> art_show.php
> -------------
> 
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
>  "http://www.w3.org/TR/html4/loose.dtd">
> <html>
> <head>
> <title>Inicio</title>
> <meta http-equiv="content-type" content="text/html; charset=UTF-8">
> <link rel="stylesheet" type="text/css" href="css/styles.css">
> </head>
> 
> <body>
> <!-- Wrapper -->
> <div id="wrapper">    
>     
>     <!-- Header -->
>     <div id="header">    
>         <? include("header.php"); ?>
>     </div>
>     <!-- Header -->
>     
>     <!-- Content -->
>     <div id="content">
>         <img src="images/tail-top.gif">
>     
>         <!-- Categorias -->
>         <div id="categorias">
>           
>           <?  include("categorias.php"); ?>
>         </div>
>         <!-- Categorias -->
>         
>         <!-- Medio -->
>         <div id="medio">
>             <? include("show.php"); ?>
>         </div>
>         <!-- Medio -->
>         
>             
>     
>         <!-- Carrito -->
>         <div id="carrito">
>             <? include("login.php"); ?>
>             <? include("micarro.php");?>
>         
>          </div>
>         <!-- Carrito -->    
>     
>     
>     </div>
>     <!-- Content -->
>     
> 
> </div>
> <!-- Wrapper -->
> 
> <? // session_destroy(); ?>    
> </body>
> </html>
> 
> 
> > From: leonardot en pegasusnet.com.ar
> > To: php-avanzado en pato2.fi.mdp.edu.ar
> > Date: Fri, 18 Jun 2010 18:01:14 -0300
> > Subject: Re: [Php-avanzado] Actualizar pagina desde otra
> > 
> > Hola Leandro,
> > 
> > tiene pinta de ser un problema del orden de las inclusiones.
> > 
> > Enviá el index.php, para ver el flujo de las llamadas, y el
> > art_show.php
> > 
> > Fijate también se estás recibiendo el "id" de la categoría para
> armar
> > el primer SELECT * FROM articulos where id_categ='$id' en show.php
> > De hecho, hace un print de esta query, y fijate si se genera o no la
> > query correcta...
> > 
> > También, si andás con tiempo, pasate el sábado entre las 11 y las
> 13hs
> > por la FI, que estamos en la 2da parte de la clase de PHP Inicial,
> > instálas lo que tenés hecho hasta ahora en el server de la facu, y
> lo
> > vemos juntos con el código corriendo.
> > 
> > Seguimos!
> > 
> > El vie, 18-06-2010 a las 16:26 +0000, Leandro Schereik escribió:
> > > Hola Leo paso algo de codigo por aca asi me puedo explicar mejor.
> > > Cuando me logueo desde index.php esta perfecto ya que cuando hago
> > > click en el menu categoria me lleva a art_show.php y carga
> show.php
> > > con los datos de session y carga los articulos junto con la imagen
> de
> > > comprar el mismo.
> > > El problema surge cuando cuando estoy en art_show.php?1,
> > > art_show.php?2, .. art_show.php?N con el comprador sin iniciar
> sesion
> > > al hacerlo, se loguea y no aparecen las imagenes para poder
> comprar el
> > > articulo y el usuario esta logueado, actulizo la pagina con f5 y
> carga
> > > articlos con las imagenes. 
> > > Me explico?
> > > 
> > > 
> > > 
> > > 
> > > categorias.php :
> > > --------------
> > > <!-- Esta dentro de index.php y arma un menu con las categorias,
> le
> > > pasa a art_show.php?id el id de la categoria a mostrar sus
> articulos
> > > -->
> > > 
> > > <p class="p">Categorias<p>
> > > <br>
> > > <ul class="list">
> > > <?
> > > include_once("conexion.php");
> > > 
> > > //selecciona todos los nombres de las categorias, si no hay
> categorias
> > > emite un mensaje
> > > $sql=mysql_query("SELECT * FROM categorias ORDER BY nom");
> > > 
> > > while($categ=mysql_fetch_row($sql)){
> > > ?>
> > > <li><span><a href="art_show.php?id=<?=$categ[0];?>"><?
> > > echo($categ[1]."<br>"); ?></a></span></li> 
> > > 
> > > <?
> > > }
> > > mysql_close();
> > > 
> > > 
> > > ?>
> > > </ul>
> > > 
> > > 
> > > login.php
> > > ---------
> > > 
> > > <?php 
> > > include("funciones.php");
> > > 
> > > $_SESSION['user'] = (isset($_SESSION['user'])) ?
> > > $_SESSION['user'] : '';
> > > 
> > > 
> > > if (isset($_POST["log"])){
> > > $user=$_POST["user"];
> > > $pass=$_POST["pass"];
> > > include("conexion.php");
> > > $sql=mysql_query("SELECT * FROM compradores WHERE
> > > user='$user'");
> > > $usuario=mysql_fetch_array($sql);
> > > mysql_close();
> > > if (($pass==$usuario['pass'])&&($usuario['id_tip_user']==2)){
> > > $_SESSION['id']=$usuario['id'];
> > > $_SESSION['user']=$usuario['user'];
> > > $_SESSION['pass']=$usuario['pass'];
> > > $_SESSION['nom']=$usuario['nom'];
> > > $_SESSION['ape']=$usuario['ape'];
> > > $_SESSION['tel']=$usuario['tel'];
> > > $_SESSION['email']=$usuario['email'];
> > > 
> > > 
> > > }
> > > else{
> > > echo("Nombre de Usuario o Contraseña incorrectas.");
> > > }
> > > 
> > > }
> > > ?>
> > > 
> > > <? if ($_SESSION['user']==""){ ?> 
> > > <form name="login" method="post" action="">
> > > <table>
> > > <tr>
> > > <td>Usuario </td>
> > > <td><input type="text" name="user" id="user"></td>
> > > 
> > > </tr>
> > > <tr> 
> > > <td>Password</td>
> > > <td><input type="password" name="pass"
> > > id="pass"></td> 
> > > 
> > > </tr>
> > > <tr>
> > > <td></td>
> > > <td><input type="submit" name="log" id="log"
> > > value="Login"
> onclick="javascript:window.opener.location.reload();"> 
> > > <input type="button" name="reg" id="reg"
> > > value="Registrarse" onClick="location.href ='comp_alta.php'">
> > > </td>
> > > </tr>
> > > </table>
> > > 
> > > <?
> > > }
> > > else{
> > > echo("Nombre: ".$_SESSION['nom']."
> > > ".$_SESSION['ape']);
> > > ?> <br /><br />
> > > <input type="button" name="logout" id="logout"
> > > value="Logout" onClick="location.href ='logout.php'"> 
> > > <input type="button" name="editar" id="editar"
> > > value="Editar Datos" onclick="location.href ='comp_edit.php'"> <?
> > > }
> > > 
> > > ?>
> > > </form>
> > > 
> > > 
> > > 
> > > show.php
> > > ---------
> > > <!-- Dentro de art_show.php -->
> > > 
> > > 
> > > <form action="" method="get" name="carro"> 
> > > <?
> > > // id de la categoria a buscar sus articulos
> > > if (isset($_REQUEST["id"])){
> > > $id=$_REQUEST["id"];
> > > 
> > > include("conexion.php");
> > > $sql=mysql_query("SELECT * FROM articulos where id_categ='$id'");
> > > //$cant: cantidad de filas consultadas para mostrar articulos o
> > > mensaje error (sin articulos)
> > > $cant=mysql_num_rows($sql);
> > > if ($cant > 0){
> > > while($art=mysql_fetch_array($sql)){
> > > //verifica stock para listar solo articulos con stock
> > > mayor a 0
> > > if($art["stock"]>0){ 
> > > if (isset($_SESSION['id'])){
> > > if (isset($_SESSION['carro']))
> > > $carro=$_SESSION['carro'];
> > > else
> > > $carro=array();
> > > 
> > > // si no esta id del articulo en el carro lo
> > > muestra con la imagen de agregar
> > > if (!in_array($art["id"],$carro)){
> > > ?>
> > > 
> > > <div id="show_art">
> > > <div id="show_img">
> > > <img src="<?=$art["img1"];?>"
> > > height="75" width="75"/><br>
> > > </div>
> > > <div id="show_titulo" >
> > > <h3><?=$art["nom"];?></h3>
> > > </div>
> > > <div id="show_detalle">
> > > Precio:$<?=$art["precio"];?>
> > > Stock:<?=$art["stock"];?> 
> > > </div>
> > > <div id="show_carrito">
> > > <!-- y finaliza por -->
> > > <a href="agregar.php?id=<?=
> > > $art["id"];?>"><img src="images/agregar.png" /></a>
> > > 
> > > </div>
> > > 
> > > </div>
> > > <?
> > > } 
> > > else{
> > > 
> > > ?>
> > > <div id="show_art">
> > > <div id="show_img">
> > > <img src="<?=$art["img1"];?>"
> > > height="75" width="75"/><br>
> > > </div>
> > > <div id="show_titulo" >
> > > <h3><?=$art["nom"];?></h3>
> > > </div>
> > > <div id="show_detalle">
> > > Precio:$<?=$art["precio"];?>
> > > Stock:<?=$art["stock"];?> 
> > > </div>
> > > <div id="show_carrito">
> > > <!-- y finaliza por -->
> > > <a href="borrar.php?id=<?=
> > > $art["id"];?>">boorrar</a>
> > > </div>
> > > 
> > > </div>
> > > <?
> > > }//cierra else (!esta($carro,$art["id"])){
> > > }//cierra if (isset($_SESSION['user'])){
> > > else{ //if (isset($_SESSION['user'])){
> > > ?>
> > > <div id="show_art">
> > > <div id="show_img">
> > > <img src="<?=$art["img1"];?>"
> > > height="75" width="75"/><br>
> > > </div>
> > > <div id="show_titulo" >
> > > <h3><?=$art["nom"];?></h3>
> > > </div>
> > > <div id="show_detalle">
> > > Precio:$<?=$art["precio"];?>
> > > Stock:<?=$art["stock"];?> 
> > > </div>
> > > <div id="show_carrito">
> > > <p>Debe estar logueado para
> > > realizar compras.</p><!-- y finaliza por -->
> > > 
> > > 
> > > </div>
> > > 
> > > </div>
> > > <?
> > > }
> > > 
> > > }
> > > } // cierra if($art["stock"]>0)
> > > }// cierra while($art=mysql_fetch_array($sql))
> > > 
> > > else{
> > > echo("No hay articulos para la categoria seleccionada.");
> > > }// cierra if ($cant > 0){
> > > 
> > > }//cierra if (isset($_REQUEST["id"])){
> > > 
> > > ?>
> > > </form>
> > > 
> > > 
> > > Saludos
> > > 
> > > Leandro 
> > > 
> > > 
> > > 
> > > > From: leonardot en pegasusnet.com.ar
> > > > To: php-avanzado en pato2.fi.mdp.edu.ar
> > > > Date: Thu, 17 Jun 2010 11:15:49 -0300
> > > > Subject: Re: [Php-avanzado] Actualizar pagina desde otra
> > > > 
> > > > Hola Leandro,
> > > > 
> > > > se me escapa el por qué de esta necesidad tan particular....
> > > > 
> > > > A priori, si en show.php hay un include con un login, basta que
> el
> > > > formulario de login tenga en su action al propio show.php, para
> que,
> > > > cuando el usuario se loguea, vaya al servidor, se autentifique,
> y al
> > > > recargarse naturalmente show.php, se mostrará el contenido sin
> > > necesidad
> > > > de tanta complicación!
> > > > 
> > > > La lógica de show.php es simple: si no está autentificado, se
> > > incluye
> > > > login.php, y si sí está autentificado, se incluye el
> articulos.php
> > > (o
> > > > como se llame) para mostrar el artículo correspondiente.
> > > > 
> > > > Qué esto esté en un <div> o en cualquier otro elemento HTML no
> > > cambia
> > > > la secuencia de ejecución del script.
> > > > 
> > > > O es muy fácil, o me perdí de algo ;-)
> > > > 
> > > > Saludos!
> > > > 
> > > > 
> > > > PD: no cuelgues el recuperatorio!
> > > > 
> > > > El jue, 17-06-2010 a las 05:02 +0000, Leandro Schereik escribió:
> > > > > Hola a todos:
> > > > > tengo un sitio maqueteado con div y dentro de esos div
> includes.
> > > > > 
> > > > > Una de las paginas del sitio es show.php que muestra articulos
> con
> > > una
> > > > > imagen para comprar dicho articulo la idea es que la imagen se
> > > muestre
> > > > > si el comprador inicio sesion (hasta ahi todo bien). 
> > > > > 
> > > > > La consulta es la siguiente: como puedo hacer para que al
> iniciar
> > > > > sesion (dentro de un div en show.php tengo un
> > > include("login.php"))
> > > > > forzar que actualice la pagina (show.php) asi entran las
> variables
> > > de
> > > > > session con datos y muestra la imagen para poder comprar el
> > > producto,
> > > > > ya que inicio sesion y dichas imagenes no aparecen, actualizo
> la
> > > > > pagina con F5 y ahi si.
> > > > > 
> > > > > Investigando un poco encontre que en el evento onclick del
> > > formulario
> > > > > login podia hacer lo siguiente con javascript: 
> > > > > <input type="submit" name="log" id="log" value="Login"
> > > > > onclick="javascript:window.opener.location.reload();"> y de
> esa
> > > manera
> > > > > forzar a que se actualice la pagina pero no esta funcionando.
> > > > > 
> > > > > Espero haber sido claro
> > > > > 
> > > > > Muchas Gracias 
> > > > > 
> > > > > Leandro Schereik
> > > > 
> > > > -- 
> > > > 
> > > > Leonardo Tadei
> > > > leonardot en pegasusnet.com.ar
> > > > http://blog.pegasusnet.com.ar
> > > > Firma pública:
> http://www.pegasusnet.com.ar/LeonardoTadei-public.key
> > > > 
> > > > _______________________________________________
> > > > Php-avanzado mailing list
> > > > Php-avanzado en pato2.fi.mdp.edu.ar
> > > > http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> > > 
> > > 
> > >
> ______________________________________________________________________
> > > Acceder a tu casilla ahora es mucho más rápido. Ahora Hotmail es
> un
> > > 70% más veloz. Conocé más
> > > _______________________________________________
> > > Php-avanzado mailing list
> > > Php-avanzado en pato2.fi.mdp.edu.ar
> > > http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> > -- 
> > 
> > 
> > Leonardo Tadei
> > leonardot en pegasusnet.com.ar
> > Pegasus Tech Supply
> > Tel: (+54)(+223) 471-2880
> > La Salle 1131 - Mar del Plata - Argentina
> > http://www.pegasusnet.com.ar / http://blog.pegasusnet.com.ar
> > http://www.prometeustech.com.ar / http://www.grupopegasus.com
> > Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
> > 
> > 
> > _______________________________________________
> > Php-avanzado mailing list
> > Php-avanzado en pato2.fi.mdp.edu.ar
> > http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> 
> 
> ______________________________________________________________________
> No importa si es pesado o liviano. Con Hotmail Skydrive tenés 25 GB
> para guardar todo. Clic aquí
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
-- 


Leonardo Tadei
leonardot en pegasusnet.com.ar
Pegasus Tech Supply
Tel: (+54)(+223) 471-2880
La Salle 1131 - Mar del Plata - Argentina
http://www.pegasusnet.com.ar / http://blog.pegasusnet.com.ar
http://www.prometeustech.com.ar / http://www.grupopegasus.com
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
                



Más información sobre la lista de distribución Php-avanzado