Foros del Web » Programando para Internet » PHP »

evitar recargar pagina en PHP

Estas en el tema de evitar recargar pagina en PHP en el foro de PHP en Foros del Web. hola amigos, estoy intentando hacer una tienda online con php y html, el problema que tengo es que cada vez que pulso sobre el boton ...
  #1 (permalink)  
Antiguo 28/12/2013, 05:20
 
Fecha de Ingreso: noviembre-2013
Mensajes: 7
Antigüedad: 10 años, 5 meses
Puntos: 0
evitar recargar pagina en PHP

hola amigos,
estoy intentando hacer una tienda online con php y html, el problema que tengo es que cada vez que pulso sobre el boton añadir (input) de cualquier articulo m vuelve a cargar la pagina, me explico, si por ejemplo tengo 20 articulos y estoy en el 15 al pulsar en añadir la pagina no se queda donde estoy me vuelve al principio.
HAY AGUNA MANERA DE EVITARLO,
muchas gracias.

dejo el codigo por si es de ayuda.

<?php include ("conexion.php");?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>


<!-<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>

<link rel="stylesheet" href="tienda.css"/>
<title>Documento sin título</title>

<script type="text/javascript">
$(window).scroll(function()
{
if ($(this).scrollTop() >20)
{
$(".container").addClass("fixed");
$("#body").addClass("fijada");
}else{
$(".container").removeClass("fixed");
$("#body").addClass("fijada");
}
});
</script>
</head>

<body id="body">

<div class="cabeceralogo">
<a href="tienda_carrito.php">Ver carrito</a>
</div>

<?php $a=verproductos()?>

</body>

</html>

/********************************* pagina conexion.php ****************************/

<?php include ("conectar.php");// conectamos con la b.d.

// AQUI SOLO QUIERO QUE VAYA GUARDANDO LOS ARTICULOS SIN MOSTRARLOS, SOLO CUANDO PRESIONE EN EL ACCESO DIRECTO TIENDA_CARRITO.PHP
session_start();
if(isset($_POST['comprar']))
{
$imagen=$_POST['imagen'];
$id=$_POST['id_txt'];
$nombre=$_POST['titulo'];
$precio=$_POST['precio'];
$descripcion=$_POST['descripcion'];
$mi_carrito[]=array('id'=>$id,'imagen'=>$imagen,'nombre'=>$nomb re,'precio'=>$precio,'descripcion'=>$descripcion); // ALMACENA MAS DE UNA FILA
//$mi_carrito=array('id'=>$id,'nombre'=>$nombre,'pre cio'=>$precio,'cantidad'=>$cantidad); //SOLO ALMACENA UNA FILA
}
if(isset($_SESSION['carrito']))
{

$mi_carrito=$_SESSION['carrito'];
if(isset($_POST['id_txt']))
{
$id=$_POST['id_txt'];
$imagen=$_POST['imagen'];
$nombre=$_POST['titulo'];
$precio=$_POST['precio'];
$descripcion=$_POST['descripcion'];

$posicion=-1; // porque el array empieza de cero, si existe ese articulo, estara en la posicion 0,1,2, etc.

for($i=0;$i<count($mi_carrito);$i++)
{
if($id==$mi_carrito[$i]['id']) //$id el articulo que introduce el cliente es = a la posicion $i cogemos id
{
$posicion=$i;

}

}
if ($posicion<>-1) // si es distinto es xq el producto ya existe ya ha sido seleccionado una vez
{
//$cuanto=$mi_carrito[$posicion]['cantidad']+$cantidad;
//$mi_carrito[$posicion]=array('id'=>$id,'imagen'=>$imagen,'nombre'=>$nomb re,'precio'=>$precio,'cantidad'=>$cuanto);
}
else
{
$mi_carrito[]=array('id'=>$id,'imagen'=>$imagen,'nombre'=>$nomb re,'precio'=>$precio,'descripcion'=>$descripcion);// añadimos a la cesta el producto bien xq no se habia añadido o xq no habia nada en la cesta.
}
}
}
if(isset($mi_carrito))
$_SESSION['carrito']=$mi_carrito;

?>

/************** aqui selecciono todos los articulos de la b.d. ************/
<?php

function verproductos() // muestro los productos de la tabla
{?>


<?php


$consulta=mysql_query("SELECT * FROM productos"); //selecciona todos los productos de la tabla.

while($filas=mysql_fetch_array($consulta))
{

$id= $filas['id'];
$imagen= $filas['imagen'];
$nombre=$filas['nombre'];
$descripcion=$filas['descripcion'];
$precio=$filas['precio'];
$existencias=$filas['existencias'];
$fecha=$filas['fecha'];

?>



<table id="tabla" width="225" border="0">
<tr>
<td class="imagen"><img src="<?php echo $imagen; ?>" width="200px" height="175px" /> </td>
</tr>
<tr align="left">
<td id="titulo" width="225" ><?php echo $nombre ?></td>
</tr>
<tr>
<td id="descripcion" width="225" ><?php echo $descripcion ?></td>
</tr>
<tr>
<td id="precio" width="225"><?php echo $precio?>€
<form action="" method="post" name="comprar">
<input name="id_txt" type="hidden" value="<?php echo $id ?>" />
<input name="imagen" type="hidden" value="<?php echo $imagen ?>" />
<input name="titulo" type="hidden" value="<?php echo $nombre ?>" />
<input name="descripcion" type="hidden" value="<?php echo $descripcion ?>" />
<input name="precio" type="hidden" value="<?php echo $precio ?>" />
<input name="comprar" type="submit" value="Comprar" />
</form>


</td>
</tr>


<?php }?>
</table>


<?php }?>

</body>
</html>
  #2 (permalink)  
Antiguo 28/12/2013, 08:01
Avatar de moriorGames  
Fecha de Ingreso: diciembre-2013
Ubicación: Barcelona
Mensajes: 37
Antigüedad: 10 años, 4 meses
Puntos: 3
Respuesta: evitar recargar pagina en PHP

He estado revisando el código y nos falta mucha información para poder decirte qué es lo que pasa. Pero me da la sensación de que lo que pretendes hacer es una tienda donde añadir productos vía AJAX. En ese caso tendrás que bindear ese botón input añadir para hacer una llamada ajax y responder con un javascript. Algo al estilo.

Código PHP:
<form>
<
input type="button" id="add_button" value="Add product" />
</
form>

Y luego en el javascript algo como:

<
script>
$(
document).ready(function(){
      $(
'#add_button').click(function(event){
         
event.preventDefault();

        $.
ajax({
            
type'POST',
            
urlurl// Tu url de destino
            
data: {data'data'}, // los datos que se mandan por POST
            
asynctrue,
            
success: function(result){
                     
// El codigo que vas a hacer funcionar cuando tenga exito el ajax
            
},
            
error: function() {
                     
// El codigo que vas a hacer cuando falle el ajax
            
}
        });
    });
});
</script> 
Es esto lo que necesitabas?
__________________
Mi juego de estrategia medieval si lo entras hazme llegar tu opinión por favor, siempre la tengo en cuenta.

Última edición por moriorGames; 28/12/2013 a las 08:03 Razón: me olvidé una cosilla
  #3 (permalink)  
Antiguo 28/12/2013, 09:22
 
Fecha de Ingreso: noviembre-2013
Mensajes: 7
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: evitar recargar pagina en PHP

hola, ante todo gracias por haber contestado. para serte sincero soy novato en muchos aspectos todavía y mucho más en java o ajax lenguajes que todavía no he empezado a estudiarlos, por eso AJAX me queda grande. algo entiendo de lo que me has escrito, el problema es que no sabría en que parte añadiría el codigo que me has puesto, pero me has aclarado algo importante y que he visto, que AJAX evita recargar la pagina, cosa importante ya que es lo que quiero. te agradezco me digas si seria algo asi , si donde me has dicho de colocar los datos los puedo poner como en php, y si colocaria el scrip en mi pagina principal.

muchas gracias.


<form>
<input type="button" id="add_button" value="Add product" />
</form>

Y luego en el javascript algo como:

<script>
$(document).ready(function(){
$('#add_button').click(function(event){
event.preventDefault();

$.ajax({
type: 'POST',
url: url, www.conexion.php
data: {data: '$imagen=$_POST['imagen'];
$id=$_POST['id_txt'];
$nombre=$_POST['titulo'];
$precio=$_POST['precio'];
$descripcion=$_POST['descripcion'];'}
,
async: true,
success: function($mi_carrito[]=array('id'=>$id,'imagen'=>$imagen,'nombre'=>$nomb re,'precio'=>$precio,'descripcion'=>$descripcion){

},
error: function() {
// El codigo que vas a hacer cuando falle el ajax
}
});
});
});
</script>
  #4 (permalink)  
Antiguo 28/12/2013, 09:29
Avatar de moriorGames  
Fecha de Ingreso: diciembre-2013
Ubicación: Barcelona
Mensajes: 37
Antigüedad: 10 años, 4 meses
Puntos: 3
Respuesta: evitar recargar pagina en PHP

Exacto, con AJAX, vas a poder hacer peticiones al servidor para guardar o extraer cosas de la base de datos sin tener que recargar la página. Lo vas a hacer de forma "asíncrona".

Para ello deberás incluir un javascript en la página. Imagina que este es el archivo, te pongo un ejemplo:

javascript.js

$(document).ready(function(){
$('#add_button').click(function(event){
event.preventDefault();

$.ajax({
type: 'POST',
url: 'http://www.tudominio.com/aplicacion/script_ajax.php', // Tu url de destino
data: {nombre: 'juan', apellido: 'garcia', edad: '18'}, // los datos que se mandan por POST
async: true,
success: function(result){
// El codigo que vas a hacer funcionar cuando tenga exito el ajax
},
error: function() {
// El codigo que vas a hacer cuando falle el ajax
}
});
});
});

Es simplemente un ejemplo.

De todas formas, si se te queda un poco grande, te recomiendo que no te pongas aún con el AJAX. Cuando se empieza es algo confuso entender el flujo de trabajo asíncrono. O eso, o empieza a leer manuales, ahora no tengo ninguno a mano, pero seguro que en esta misma web encontrarás muy buena referencias para empezar con ajax.

Espero poder aclararte dudas. Cualquier otra cosa avisa :)
__________________
Mi juego de estrategia medieval si lo entras hazme llegar tu opinión por favor, siempre la tengo en cuenta.
  #5 (permalink)  
Antiguo 28/12/2013, 09:37
 
Fecha de Ingreso: noviembre-2013
Mensajes: 7
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: evitar recargar pagina en PHP

jajaj, a ver si lo voy entendiendo, mi pagina principal es TIENDA-ONLINE.PHP esta llama a una funcion que esta en la pagina CONEXION.PHP aqui se hace todo me muestra todos los articulos de la base de datos y si pulso en comprar dentro de CONEXION.PHP recoge los datos enviados por POST y los almacena en el array.
entonces tal y como lo pongo estaria bien lo aceptaría así en codigo php?

gracias.

data: {data: '$imagen=$_POST['imagen'];
$id=$_POST['id_txt'];
$nombre=$_POST['titulo'];
$precio=$_POST['precio'];
$descripcion=$_POST['descripcion']
;'},
async: true,

success: function($mi_carrito[]=array('id'=>$id,'imagen'=>$imagen,'nombre'=>$nomb re,'precio'=>$precio,'descripcion'=>$descripcion){
  #6 (permalink)  
Antiguo 28/12/2013, 09:50
Avatar de moriorGames  
Fecha de Ingreso: diciembre-2013
Ubicación: Barcelona
Mensajes: 37
Antigüedad: 10 años, 4 meses
Puntos: 3
Respuesta: evitar recargar pagina en PHP

M... no es tan sencillo de explicar, de verdad. Me encantaría poder sentarme a tu lado y poder dedicarte una hora para explicarte correctamente cómo hacerlo. Por desgracia eso no es posible y la verdad es que no es fácil explicarte todo el proceso que debes seguir para hacer una correcta petición AJAX y obtener la respuesta que necesitas. Por eso te estoy dando respuestas orientativas.

Por un lado necesitas un archivo php que es el que printa el carrito de la compra. Por otro lado necesitas otro script php que printará el resultado de la acción que se realizará sobre él y la printará, seguramente, en formato json (un formato compatible entre php y javascript).

Por otro lado necesitarás un archivo javascript para ejecutar la acción dinámica de enviar datos al servidor y, la acción dinámica de actualizar los datos de tu página (carrito) cuando tenga la respuesta.

Mi recomendación es que busques la respuesta en manuales, y/o ejemplos en internet, empieces con algo básico (enviar un id y recibir un nombre de producto) y luego amplies tu conocimiento.

Mira, te he googleado un poco y te he encontrado este enlace que parece un ejemplo bastante completo, pero está en inglés, no sé si te será de ayuda.

http://www.lennu.net/2012/06/25/jquery-ajax-example-with-json-response/
__________________
Mi juego de estrategia medieval si lo entras hazme llegar tu opinión por favor, siempre la tengo en cuenta.
  #7 (permalink)  
Antiguo 28/12/2013, 09:58
 
Fecha de Ingreso: noviembre-2013
Mensajes: 7
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: evitar recargar pagina en PHP

ok te entiendo, muchas gracias, hare lo que dices buscare informacion y empezare haciendo eso.
  #8 (permalink)  
Antiguo 28/12/2013, 18:55
 
Fecha de Ingreso: noviembre-2013
Mensajes: 7
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: evitar recargar pagina en PHP

Cita:
Iniciado por moriorGames Ver Mensaje
M... no es tan sencillo de explicar, de verdad. Me encantaría poder sentarme a tu lado y poder dedicarte una hora para explicarte correctamente cómo hacerlo. Por desgracia eso no es posible y la verdad es que no es fácil explicarte todo el proceso que debes seguir para hacer una correcta petición AJAX y obtener la respuesta que necesitas. Por eso te estoy dando respuestas orientativas.

Por un lado necesitas un archivo php que es el que printa el carrito de la compra. Por otro lado necesitas otro script php que printará el resultado de la acción que se realizará sobre él y la printará, seguramente, en formato json (un formato compatible entre php y javascript).

Por otro lado necesitarás un archivo javascript para ejecutar la acción dinámica de enviar datos al servidor y, la acción dinámica de actualizar los datos de tu página (carrito) cuando tenga la respuesta.

Mi recomendación es que busques la respuesta en manuales, y/o ejemplos en internet, empieces con algo básico (enviar un id y recibir un nombre de producto) y luego amplies tu conocimiento.

Mira, te he googleado un poco y te he encontrado este enlace que parece un ejemplo bastante completo, pero está en inglés, no sé si te será de ayuda.

http://www.lennu.net/2012/06/25/jquery-ajax-example-with-json-response/
  #9 (permalink)  
Antiguo 28/12/2013, 18:57
 
Fecha de Ingreso: noviembre-2013
Mensajes: 7
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: evitar recargar pagina en PHP

hola de nuevo espero no molestar, solo un favor, he visto un tutorial y he probado lo siguiente pero no me hace nada, y lo tengo como en el tutorial, te agradeceria si le pudieras echar un vistazo. muchas gracias.

<?php
include ("conectar.php");
session_start();?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<script type="text/javascript">
function CreateXmLHttp(){
if (window.XMLHttpRequest){
XmlHttp=new XMLHttpRequest();
} else if (window.ActiveXobject){
XmlHttp= new ActiveXobject("Microsoft.XMLHttp");
}
}
</script>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>

<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>

<link rel="stylesheet" href="tienda.css"/>
<title>Documento sin título</title>

</head>

<body id="body">


<?php


$consulta=mysql_query("SELECT * FROM productos"); //selecciona todos los productos de la tabla.

while($filas=mysql_fetch_array($consulta))
{

$id= $filas['id'];
$imagen= $filas['imagen'];
$nombre=$filas['nombre'];
$descripcion=$filas['descripcion'];
$precio=$filas['precio'];
$existencias=$filas['existencias'];
$fecha=$filas['fecha'];

?>

<table id="tabla" width="225" border="0">

<tr>
<td id="imagen"><img src="<?php echo $imagen; ?>" width="200px" height="175px" /> </td>
</tr>
<tr align="left">
<td id="titulo" width="225" ><?php echo $nombre ?></td>
</tr>
<tr>
<td id="descripcion" width="225" ><?php echo $descripcion ?></td>
</tr>
<tr>
<td id="precio" width="225"><?php echo $precio?>€
<form action="" method="post" name="comprar">
<input name="id_txt" type="hidden" value="<?php echo $id ?>" id="id_txt"/>
<input name="imagen" type="hidden" value="<?php echo $imagen ?>" id="imagen"/>
<input name="titulo" type="hidden" value="<?php echo $nombre ?>" id="titulo"/>
<input name="descripcion" type="hidden" value="<?php echo $descripcion ?>" id="descripcion"/>
<input name="precio" type="hidden" value="<?php echo $precio ?>" id="precio"/>
<input type="button" value="Comprar" id="comprar" onclick="comprar()"/>

</form>


</td>
</tr>


<?php }?>
</table>



</body>

<script type="text/javascript">
<!--document.getElementById("id_txt").focus();-->

function comprar(){
var titulo= document.getElementById("titulo").value;


CreateXmLHttp();
xmlHttp.onreadystatechange = procesardatos;
xmlHttp.open("POST","procesa.php");
xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlHttp.send("titulo="+titulo);
}

function procesardatos(){
if(xmlHttp.readystate==4 && xmlHttp.status==200){
alert(xmlHttp.responseText);
}
}
</script>
</html>
  #10 (permalink)  
Antiguo 29/12/2013, 04:19
Avatar de moriorGames  
Fecha de Ingreso: diciembre-2013
Ubicación: Barcelona
Mensajes: 37
Antigüedad: 10 años, 4 meses
Puntos: 3
Respuesta: evitar recargar pagina en PHP

Hola de nuevo :)

Veo que lo que estás intentando hacer es hacer peticiones AJAX con javascript nativo, eso te va a ser bastante complicado. Te puedes ahorrar mucha faena si usas las funciones de Jquery para hacer peticiones ajax. Encima he visto que ya tienes el jquery incluido en tu código.

De verdad, te recomiendo el enlace que te pasé. Fíjate que tiene una demo y es exactamente lo que necesitas, ejecutar acciones sin recargar la página. Mira:

http://www.lennu.net/demo/jqueryajax/
__________________
Mi juego de estrategia medieval si lo entras hazme llegar tu opinión por favor, siempre la tengo en cuenta.

Etiquetas: fecha, html, select, sql, tabla
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:47.