Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

problema con contador a DB

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI
Mensaje Lun Sep 04, 2006 1:55 pm
romerodg
Perlero Nuevo
Perlero Nuevo
Registrado: 31 Ago 2006
Mensajes: 5
problema con contador a DB Responder citando

Hola

hice esto en Perl::

Perl:
use DBI;
use Oraperl;
$ENV{"ORACLE_HOME"} = "/opt/oracle/product/9.2.0";

$dbh = DBI-> connect("dbi:Oracle:host=algunhost;sid=algunSID", "esquema", "secreto");
DBI-> errstr;

my $ipuser =$ENV{"REMOTE_ADDR"};

$user_exists = "select ip from hit_cri where ip = '$ipuser'";
$sth = $dbh->prepare($user_exists);
$rv = $sth->execute;
my $userip = $sth->fetchrow_array;
$sth->finish;
if ($userip$ipuser) {
    $value = "select main from hit_cri where ip = '$ipuser'";
    $stha = $dbh->prepare($value);
    $rva = $stha->execute;
    my $value_keep = $stha->fetchrow_array();
    $stha->finish;

    $increase = "update hit_cri set main = $value_keep + 1 where ip = '$ipuser'";
    $sthb = $dbh->prepare($increase);
    $rvb = $sthb->execute;
    $sthb->finish;
}
else {
    $new = "insert into hit_cri values(seq_visitor.nextval, '$ipuser', 1, 0, 0, 0, 0, 0, 1)";
    $sthc = $dbh->prepare($new);
    $rvc = $sthc->execute;
    $sthc->finish;
}
$dbh->disconnect;


El problema que tengo es que no funciona.

Si cambio el valor de $ipuser por un valor "normal" (tipo "algo"), funciona el if. Pero si lo uso con un browser no anda. No hace nada.

Probé de todo, pero no me sale.
Por favor, ayudenme.
Gracias
Mensaje Lun Sep 04, 2006 2:26 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

El carácter '=' designa una asignación, no una comparación.

Cambia '=' por 'eq' si estás comparando cadenas de caracteres.

Ultima edición por explorer el Lun Sep 04, 2006 3:49 pm, editado 1 vez
Mensaje Lun Sep 04, 2006 3:46 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Otra cosa... el fetchrow_array...

Esta función devuelve una lista de valores, cada una de ellos es cada una de las filas del resultado del SELECT. Al asignar su valor de retorno a una variable escalar ($userip), realmente lo que estás haciendo es guardando el $userip el último valor de esa lista.

Digamos que es completamente legal lo que estás haciendo, si sabes lo que estás haciendo. Pero es poco oscuro para el resto de la gente...

Un poco más claro hubiera sido:
Perl:
my $userip = ($sth->fetchrow_array)[0];
que es decir que nos quedamos con el primer valor de la lista de valores devueltos.
Mensaje Mar Sep 05, 2006 8:22 am
romerodg
Perlero Nuevo
Perlero Nuevo
Registrado: 31 Ago 2006
Mensajes: 5
No me funciona Responder citando

He seguido tu sugerencia, explorer. Pero no he obtenido buenos resultados.
El tema es que cuando reemplazo $ENV("REMOTE_ADDR") por un cadena del tipo "169.168.184.102", funciona perfectamente.
La verdad es que la lógica parece ser la correcta, no es así?

Saludos
Mensaje Mar Sep 05, 2006 8:39 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Coloca

use warnings;
use strict;

al principio del programa.

Dejando aparte que tanto $ENV{REMOTE_ADDR} como $ENV{"REMOTE_ADDR"} deberían funcionar (atención, llaves en vez de paréntesis), otra explicación es que %ENV no contiene ese valor.
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group