Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » problema con contador a DB Responder al tema
Nuevo tema


Página 1 de 1  [ 5 mensajes ] 
 
Nota 2006-09-04 14:55 @663

Perlero Nuevo
Registrado: 2006-08-31 15:33 @690
Mensajes: 5
problema con contador a DB
Hola

hice esto en Perl::

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
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


Nota 2006-09-04 15:26 @685
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
El carácter '=' designa una asignación, no una comparación.

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


Última edición por explorer el 2006-09-04 16:49 @742, editado 1 vez en total

Nota 2006-09-04 16:46 @740
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
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:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
my $userip = ($sth->fetchrow_array)[0];
que es decir que nos quedamos con el primer valor de la lista de valores devueltos.


Nota 2006-09-05 09:22 @432

Perlero Nuevo
Registrado: 2006-08-31 15:33 @690
Mensajes: 5
No me funciona
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


Nota 2006-09-05 09:39 @443
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
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.


Responder al tema  [ 5 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO