Foros del Web » Programando para Internet » PHP »

Que falla?

Estas en el tema de Que falla? en el foro de PHP en Foros del Web. Supuestamente este script deberia conseguir la ip del visitante ( lo hace ) y si no esta en la base de datos introducirla y si ...
  #1 (permalink)  
Antiguo 10/12/2004, 10:02
 
Fecha de Ingreso: julio-2004
Mensajes: 46
Antigüedad: 13 años, 4 meses
Puntos: 0
Que falla?

Supuestamente este script deberia conseguir la ip del visitante ( lo hace ) y si no esta en la base de datos introducirla y si lo esta pues no hacerlo. Pero a veces aunque este en la base de datos la introduce de todas maneras. Entonces no se por que debe ser. Me podriais decir por que es ? He revisado todo y no encuentro que puede ser.

Código:
<?php
include("proxycache.php");
include ("infobdc.php");
$ip = getIP();
 
?>

<?
$conn = mysql_connect("$host","$userp","$pass"); 
mysql_select_db("$dbname",$conn); 


$ssql = "SELECT * FROM votos "; 

$rs = mysql_query($ssql,$conn); 

$row = mysql_fetch_array($rs);{ 
 	if ($row['IP'] == $ip) { 
	    echo ("Ya habias votado");
	}
else {
$sql = "INSERT INTO votos (IP) ".
  "VALUES ('$ip')";
$result = mysql_query($sql) or die (mysql_error());
echo ("Voto aceptado");
	}
} 

mysql_free_result($rs); 
mysql_close($conn); 

?>

Gracias por todo.
  #2 (permalink)  
Antiguo 10/12/2004, 10:58
Avatar de camargo  
Fecha de Ingreso: abril-2002
Ubicación: Kerétaro, Méjiko
Mensajes: 1.045
Antigüedad: 15 años, 8 meses
Puntos: 2
mm, y de donde especificas $ip: ???

Código PHP:
<?
$conn 
mysql_connect("$host","$userp","$pass"); 
mysql_select_db("$dbname",$conn); 

$ip $_SERVER['REMOTE_ADDR'];


$ssql "SELECT * FROM votos "

$rs mysql_query($ssql,$conn); 

$row mysql_fetch_array($rs);{ 
     if (
$row['IP'] == $ip) { 
        echo (
"Ya habias votado");
    }
else {
$sql "INSERT INTO votos (IP) ".
  
"VALUES ('$ip')";
$result mysql_query($sql) or die (mysql_error());
echo (
"Voto aceptado");
    }


mysql_free_result($rs); 
mysql_close($conn); 

?>

creo q asi debe funcionar
__________________
http://www.chorcha.com
  #3 (permalink)  
Antiguo 10/12/2004, 11:01
Avatar de baklao  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Ana - Isla de Margarita
Mensajes: 482
Antigüedad: 13 años
Puntos: 0
Hola aqui te mando un ejemplo a ver si lo puedes adaptar a tus necesidades:
Código PHP:
 <?php
class Usuariosenlinea
{
/*
    * @param string $servidor el host para conectar, usualmente localhost
    * @param string $basededatos el nombre de la base de datos
    * @param string $nombredb el nombre de la tabla, preferentemente no editar
    * @param string $usuario usuario de la base de datos
    * @param string $pass la contraseña de la base de datos
*/

   
var $servidor ''
   var 
$basededatos '';
   var 
$nombredb '';
   var 
$usuario '';
   var 
$pass '';
  
## Fin de Conexion ##

  
var $e_rror;
  
//Segundos para borrar de la base de datos a los usuarios inactivos
  
var $segundos 120;
  var 
$ahora 0;

    
//CONSTRUCTOR
    
function Usuariosenlinea() {

    
$this->recargar();

    }

    function 
cuantos() {

    return 
$this->ahora;

    }

    function 
enlinea() {

        if(
$this->ahora == 1) {

    echo 
$this->ahora;
        }
        else
        {
    echo 
$this->ahora;
        }

    }

        function 
ipreal(){

            if (
$real_ip getenv('HTTP_X_FORWARDED_FOR')){

                
$explode_real_ip explode(","$real_ip);
                return 
trim($explode_real_ip[0]);
            }
            else
            {
            return 
getenv('REMOTE_ADDR');
            }
        }

        function 
error(){

        return 
$this->e_rror mysql_error();

        }

        function 
recargar() {

            
$tiempo_actual time();
            
$tiempo_final $tiempo_actual $this->segundos;
            
$ip $this->ipreal();

        @
mysql_connect($this->servidor$this->usuario$this->pass)
        or die(
'Error al Intentar Conectar con la base de datos '.$this->error().'');

        @
mysql_select_db($this->basededatos)
        or die(
'Error Seleccionando la base de datos '.$this->error().'');

        
$result mysql_query("SELECT ip FROM $this->nombredb WHERE ip='$ip'")
        or die(
'Error de lectura en la base de datos '.$this->error().'');

        if(
mysql_num_rows($result) == 0){

//aqui deberias poner para insertar tu ip que de hecho ya lo hace en la tabla
        
mysql_query("INSERT INTO $this->nombredb VALUES ('$tiempo_actual','$ip','$_SERVER[REQUEST_URI]')")
        or die(
'Error al Insertar en la base de datos '.$this->error().'');

        }
        else

        {
// aqui pondrias tu echo de ya has votado
        
mysql_query("UPDATE $this->nombredb SET timestamp='$tiempo_actual' where ip='$ip'")
        or die(
'Error al Insertar en la base de datos '.$this->error().'');
        }
        
mysql_close();

        }

}

?>
Salu2. y suerte

Bye
__________________
Atte. Mohamed :aplauso:
  #4 (permalink)  
Antiguo 10/12/2004, 11:46
 
Fecha de Ingreso: julio-2004
Mensajes: 46
Antigüedad: 13 años, 4 meses
Puntos: 0
Cita:
Iniciado por camargo
mm, y de donde especificas $ip: ???

Código PHP:
<?
$conn 
mysql_connect("$host","$userp","$pass"); 
mysql_select_db("$dbname",$conn); 

$ip $_SERVER['REMOTE_ADDR'];


$ssql "SELECT * FROM votos "

$rs mysql_query($ssql,$conn); 

$row mysql_fetch_array($rs);{ 
     if (
$row['IP'] == $ip) { 
        echo (
"Ya habias votado");
    }
else {
$sql "INSERT INTO votos (IP) ".
  
"VALUES ('$ip')";
$result mysql_query($sql) or die (mysql_error());
echo (
"Voto aceptado");
    }


mysql_free_result($rs); 
mysql_close($conn); 

?>

creo q asi debe funcionar

$ip viene de GetIP();

Código:
<?php 

function getIP() { 
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
       $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    elseif (isset($_SERVER['HTTP_VIA'])) { 
       $ip = $_SERVER['HTTP_VIA']; 
    } 
    elseif (isset($_SERVER['REMOTE_ADDR'])) { 
       $ip = $_SERVER['REMOTE_ADDR']; 
    } 
    else { 
       $ip = "unknown"; 
    } 
  return $ip;      
  } 
?>
  #5 (permalink)  
Antiguo 10/12/2004, 11:50
 
Fecha de Ingreso: julio-2004
Mensajes: 46
Antigüedad: 13 años, 4 meses
Puntos: 0
Lo que falla es el IF , que a veces me dice que si existe en la base de datos y otras veces me dice que no existe.


Gracias.
  #6 (permalink)  
Antiguo 10/12/2004, 12:14
Avatar de baklao  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Ana - Isla de Margarita
Mensajes: 482
Antigüedad: 13 años
Puntos: 0
Porque no usas la funcion que tengo en mi clase para tomar la ip ??? te puede servir
__________________
Atte. Mohamed :aplauso:
  #7 (permalink)  
Antiguo 10/12/2004, 12:38
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 13 años
Puntos: 43
en esta parte:

Código PHP:
$row mysql_fetch_array($rs);{ 
    if (
$row['IP'] == $ip) { 
        echo (
"Ya habias votado"); 
    } 
else { 
$sql "INSERT INTO votos (IP) "
  
"VALUES ('$ip')"
$result mysql_query($sql) or die (mysql_error()); 
echo (
"Voto aceptado"); 
    } 

Solo esta leyendo la primera fila de la tabla debido a eso si tu ip es diferente a la del primer campo esta se guarda.
  #8 (permalink)  
Antiguo 10/12/2004, 12:41
 
Fecha de Ingreso: julio-2004
Mensajes: 46
Antigüedad: 13 años, 4 meses
Puntos: 0
Cita:
Iniciado por jahepi
en esta parte:

Código PHP:
$row mysql_fetch_array($rs);{ 
    if (
$row['IP'] == $ip) { 
        echo (
"Ya habias votado"); 
    } 
else { 
$sql "INSERT INTO votos (IP) "
  
"VALUES ('$ip')"
$result mysql_query($sql) or die (mysql_error()); 
echo (
"Voto aceptado"); 
    } 

Solo esta leyendo la primera fila de la tabla debido a eso si tu ip es diferente a la del primer campo esta se guarda.
Y como lo podria arreglar?

Gracias.
  #9 (permalink)  
Antiguo 10/12/2004, 13:00
 
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona - España
Mensajes: 270
Antigüedad: 15 años
Puntos: 0
Hola Rave4C, lo puedes arreglar con un simple While que recorra todas las tuplas de tu base de datos para compararlas
Saludos.
  #10 (permalink)  
Antiguo 10/12/2004, 13:20
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 13 años
Puntos: 43
Intenta algo como esto, ojalá te sirva.

Código PHP:
<? 
$conn 
mysql_connect("$host","$userp","$pass"); 
mysql_select_db("$dbname",$conn); 
$ip $_SERVER['REMOTE_ADDR']; 
$encontrada false;
$ssql "SELECT * FROM votos"
$rs mysql_query($ssql,$conn); 
while(
$row mysql_fetch_array($rs)){ 
    if (
$row['IP'] == $ip) { 
         
$encontrada true;
                   }
        } 
if(
$encontrada){
echo (
"Ya habias votado");}
else{
$sql "INSERT INTO votos (IP) "
  
"VALUES ('$ip')"
$result mysql_query($sql) or die (mysql_error()); 
echo (
"Voto aceptado"); 
    } 
mysql_free_result($rs); 
mysql_close($conn); 
?>

Suerte!
  #11 (permalink)  
Antiguo 10/12/2004, 14:15
 
Fecha de Ingreso: julio-2004
Mensajes: 46
Antigüedad: 13 años, 4 meses
Puntos: 0
Funciona.

Gracias a todos :)
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 13:46.