Foros del Web » Programando para Internet » PHP »

Script funciona cuando quiere

Estas en el tema de Script funciona cuando quiere en el foro de PHP en Foros del Web. Hola: Tengo un contador de visitas en un página que en local funciona perfectamente, pero en el servidor funciona cuando quiere. Este es el código, ...
  #1 (permalink)  
Antiguo 12/11/2011, 05:04
Avatar de lvfp  
Fecha de Ingreso: septiembre-2005
Ubicación: España
Mensajes: 337
Antigüedad: 18 años, 7 meses
Puntos: 4
Sonrisa Script funciona cuando quiere

Hola:

Tengo un contador de visitas en un página que en local funciona perfectamente, pero en el servidor funciona cuando quiere. Este es el código, supongo que tendrá muchas cosas mejorables (no soy ni mucho menos experto en php)


<?php
session_start();
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
?>

<?php
mysql_select_db("MiDB", $con);
$result = mysql_query("SELECT numero FROM visitas WHERE contador ='contador'");
while($row = mysql_fetch_array($result))
{
$conta = $row['visitas'];
}
if(isset($_SESSION['contador'])){

}else{
$conta = $conta + 1;
mysql_query("UPDATE visitas SET visitas =" . $conta ."
WHERE contador = 'contador'");}
echo $conta ;
$_SESSION['contador'] = $conta;
mysql_close($con);
?>

Tengo una base de datos con una tabla llamada visitas con dos campos, numero y contador, numero es donde almaceno la cantidad de visitas.

Este script está incluido en el pié de la página con un include, el pie de página a su vez esta con otro include en cada página de la web.

La web es www.franbalseirofotografia.com


Gracias.
  #2 (permalink)  
Antiguo 12/11/2011, 07:27
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Script funciona cuando quiere

¿Estas verificando en remoto que la sesión si se esta iniciando ? ¿Que condición usas para cerrar la sesión?

Cita:
if(isset($_SESSION['contador'])){
}
No entiendo para que haces esto. No me parece lógico verificar si existe una sesión para no hacer ningún tipo de acción.

Cita:
$result = mysql_query("SELECT numero FROM visitas WHERE contador ='contador'");
while($row = mysql_fetch_array($result))
{
$conta = $row['visitas'];
}
Esto esta mal. Nunca se debe llamar en un fetch array a la tabla sino al campo de la tabla que se desea ver. Supongo que en número estara el número de visitas de la pagina, esto deberia ir así.

Código PHP:
$conta $row['numero']; 
Espero que por este lado puedas revisar tu script para poder mejorarlo.
  #3 (permalink)  
Antiguo 12/11/2011, 09:24
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Script funciona cuando quiere

<?php
session_start();
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("MiDB", $con);

$sql= "SELECT numero FROM visitas WHERE contador= 'contador' ";
$mysql_query = mysql_query($sql) or die ();
$row = mysql_fetch_array($mysql_query);

$conta = $row['visitas'];
if($conta)
{
die('error: ' . mysql_error());
}else{

$conta = $conta + 1;
mysql_query("UPDATE visitas SET visitas = $conta WHERE contador = 'contador'");

$_SESSION['contador'] = $conta;
}

if(isset($_SESSION['contador'])){

AQUI SUPUESTAMENTE SI NO HAY SESION NO HACES NADA CREO ENTENDER

}else{

aqui se muestra lo que kieras si hay sesion


}


LA SESSION DEBES HACERLA ANTES DE EL ISSET DE SEESION te lo he puesto el el if del $conta
mysql_close($con);

?>


prueba haber y lo cuentas ademas deberias usar mysql_real_escape_strings y htmlentities

Última edición por webankenovi; 12/11/2011 a las 11:24
  #4 (permalink)  
Antiguo 13/11/2011, 03:49
Avatar de lvfp  
Fecha de Ingreso: septiembre-2005
Ubicación: España
Mensajes: 337
Antigüedad: 18 años, 7 meses
Puntos: 4
Respuesta: Script funciona cuando quiere

Gracias por vuestras respuestas (ya os decía que no soy un experto en php) :)

Mi idea es comprobar si es la primera visita a la web en esta sesión,

si lo es, al valor de visitas acumulado hasta entonces en la DB le suma 1, lo muestra en el contador y actualiza la DB

si no lo es, no hace nada y muestra el valor de la base de datos

Hay un error en e código que puse:

mysql_query("UPDATE visitas SET visitas =" . $conta ."

lo correcto, como yo lo tengo es:

mysql_query("UPDATE numero SET visitas =" . $conta ."


Gracias y un saludo
  #5 (permalink)  
Antiguo 13/11/2011, 17:06
Avatar de lvfp  
Fecha de Ingreso: septiembre-2005
Ubicación: España
Mensajes: 337
Antigüedad: 18 años, 7 meses
Puntos: 4
Respuesta: Script funciona cuando quiere

Bien, recomponiendo un poco el script me queda así:

Código PHP:
<?php

    session_start
();

$con mysql_connect("localhost","root","");
if (!
$con)
  {
  die(
'Could not connect: ' mysql_error());
  }
?>

<?php
mysql_select_db
("miDB"$con);
$result mysql_query("SELECT numero FROM visitas");
$row mysql_fetch_array($result);
 
  
$conta $row['visitas']; //aquí saco las visitas hasta este momento

if(isset($_SESSION['contador'])){ //si esta variable estaba inicializada no hace nada
        
}else{ //si no suma una visita y lo graba en la DB
        
$conta $conta 1;
        
mysql_query("UPDATE visitas SET numero =" $conta);
}

$_SESSION['contador'] = 1
echo 
$conta//
mysql_close($con);

?>
Ahora funciona en todos los navegadores menos en chrome que falla. La cuestión es que he comprobado que a veces pasa por las dos ramas del IF , con lo que alguna vez actualiza sumando una nueva visita en la misma sesión.

Empiezo a ponerme de los nervios
  #6 (permalink)  
Antiguo 14/11/2011, 01:49
Avatar de waldragon  
Fecha de Ingreso: mayo-2010
Mensajes: 735
Antigüedad: 14 años
Puntos: 55
Respuesta: Script funciona cuando quiere

Yo la estoy viendo en IE y suma una visita por cada pagina que veo, eso es lo que quieres?

Última edición por waldragon; 14/11/2011 a las 01:59
  #7 (permalink)  
Antiguo 14/11/2011, 03:55
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años
Puntos: 261
Respuesta: Script funciona cuando quiere

Código PHP:
Ver original
  1. <?php
  2.  
  3. //conect db
  4. $con = mysql_connect("localhost", "root", "root");
  5. if( !$con )
  6.     die('Could not connect: ' . mysql_error());
  7. ?>
  8.  
  9. <?php
  10. //select db
  11. $db = mysql_select_db("forosdelweb", $con);
  12. if( !$db )
  13.     die('Not select: ' . mysql_error()); // <-- tambien puedes comprobar si la DB está seleccionada correctamente.
  14.  
  15. $result = mysql_query("SELECT numero FROM visitas");
  16. $row = mysql_fetch_array($result);
  17.  
  18. //$conta = $row['visitas']; <-- si le pones el nombre del campo en vez del de la tabla igual te trae datos...
  19. $conta = $row['numero']; //aquí saco las visitas hasta este momento | Ahora si!
  20.  
  21. if( !isset($_SESSION['contador']) ) // con añadir ! antes de isset quitamos la primera parte del if
  22. //{
  23.     //si esta variable estaba inicializada no hace nada
  24. //}
  25. //else
  26. {
  27.     ////si no está definda suma una visita y lo graba en la DB
  28.     $conta = $conta + 1;
  29.     mysql_query("UPDATE visitas SET numero =" . $conta);
  30. }
  31.  
  32. $_SESSION['contador'] = 1;
  33. echo $conta; //
  34. ?>
Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #8 (permalink)  
Antiguo 14/11/2011, 10:19
Avatar de lvfp  
Fecha de Ingreso: septiembre-2005
Ubicación: España
Mensajes: 337
Antigüedad: 18 años, 7 meses
Puntos: 4
Respuesta: Script funciona cuando quiere

Muchas gracias, parece que ahora funciona.

Tengo que aclarar que aunque tu comentario sarcástico de la línea 19 tiene razón el código lo tenía bien, lo que pasa es que cambié ciertos nombres para el código de ejemplo y puse mal el nombre del campo.

Y ahora que funciona el cliente me ha dicho que mejor lo sacamos :)


Saludos y gracias a todos.

Etiquetas: mysql, 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 17:16.