• Viernes 26 de Abril de 2024, 18:27

Autor Tema:  Problema Con Archivo  (Leído 1302 veces)

venedan

  • Miembro activo
  • **
  • Mensajes: 49
    • Ver Perfil
Problema Con Archivo
« en: Lunes 8 de Octubre de 2007, 04:45 »
0
bueno señores hice un programa en php que copiara la direccion ip del visitante a un archivo de texto y que luego este la leyera para guardarla en un array ok todo fino cuando lo hice pero cuando quiero comparar si la ip del visitante es igual a alguna ip de el array que le dijiera que ya visito la pagina y si no que no ha visitado la pagina pero por mas cosas que le añado siempre me dice que no ha visitado la pagina que puede estar mal en el codigo

<!--php1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>PHP </td></tr><tr><td id='CODE'><!--ephp1--><code>[color= #000000]
[color= #0000BB]<?php

$archivo [/color][color= #007700]= [/color][color= #DD0000]"texto.txt"[/color][color= #007700];

[/color][color= #0000BB]$ip [/color][color= #007700]= [/color][color= #0000BB]$HTTP_SERVER_VARS[/color][color= #007700][&[/color][color= #FF8000]#39;REMOTE_ADDR'];

[/color][color= #0000BB]$fp [/color][color= #007700]= [/color][color= #0000BB]fopen[/color][color= #007700]([/color][color= #0000BB]$archivo[/color][color= #007700],[/color][color= #DD0000]"a"[/color][color= #007700]); 
[/color][color= #0000BB]fwrite[/color][color= #007700]([/color][color= #0000BB]$fp[/color][color= #007700],[/color][color= #0000BB]$ip[/color][color= #007700]);
[/color][color= #0000BB]fwrite[/color][color= #007700]([/color][color= #0000BB]$fp[/color][color= #007700],[/color][color= #DD0000]"\n"[/color][color= #007700]);
[/color][color= #0000BB]fclose[/color][color= #007700]([/color][color= #0000BB]$fp[/color][color= #007700]);

[/color][color= #0000BB]$fp [/color][color= #007700]= [/color][color= #0000BB]fopen[/color][color= #007700]([/color][color= #0000BB]$archivo[/color][color= #007700],[/color][color= #DD0000]"r"[/color][color= #007700]);

while (&[/color][color= #FF8000]#33;feof($fp)) {

[/color][color= #0000BB]$texto [/color][color= #007700]= [/color][color= #0000BB]fgets[/color][color= #007700]([/color][color= #0000BB]$fp[/color][color= #007700]);
[/color][color= #0000BB]$tex[/color][color= #007700][] = [/color][color= #0000BB]nl2br[/color][color= #007700]([/color][color= #0000BB]$texto[/color][color= #007700]);

}

[/color][color= #0000BB]fclose[/color][color= #007700]([/color][color= #0000BB]$fp[/color][color= #007700]);

[/color][color= #0000BB]$cantidad [/color][color= #007700]= [/color][color= #0000BB]count[/color][color= #007700]([/color][color= #0000BB]$tex[/color][color= #007700]);

for ([/color][color= #0000BB]$i[/color][color= #007700]=[/color][color= #0000BB]0[/color][color= #007700];[/color][color= #0000BB]$i[/color][color= #007700]<[/color][color= #0000BB]$cantidad[/color][color= #007700];[/color][color= #0000BB]$i[/color][color= #007700]++) {
if ([/color][color= #0000BB]$tex[/color][color= #007700][[/color][color= #0000BB]$i[/color][color= #007700]] == &[/color][color= #FF8000]#39;$ip ') {
[/color][color= #007700]echo [/color][color= #DD0000]"ya visitastes la pagina"[/color][color= #007700];
break;
}
else {
echo [/color][color= #DD0000]"no has visitado la pagina"[/color][color= #007700];
break;
}
}


[/color][color= #0000BB]?>[/color]
[/color]
</code><!--php2--></td></tr></table><div class='postcolor'><!--ephp2-->

en el archivo de texto esta guardada las ip una por cada linea es decir por ejemplo

127.0.0.1
127.0.0.1
127.0.0.1

los guarda bien en el array pero a la hora de compararla con la ip me dice siempre que ya ha visitado la pagina

de verdad les agradeceria su ayuda

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Problema Con Archivo
« Respuesta #1 en: Lunes 8 de Octubre de 2007, 16:56 »
0
A primera vista la única causa que veo es que estás guardando el IP del cliente y luego lo consultás (Lo he visto a vuelo de pájaro), por lo tanto el IP del cliente siempre va a existir en el archivo a la hora de consultarlo, no se si me explico. La solución: Cambia el orden de tus acciones, primero verificá si existe y después registrá la IP.

Un saludo :beer:

PD: Por Dios, "visitastes" no lleva "S".
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Avalon

  • Miembro MUY activo
  • ***
  • Mensajes: 448
    • Ver Perfil
Re: Problema Con Archivo
« Respuesta #2 en: Lunes 8 de Octubre de 2007, 16:59 »
0
Hola venedan. Hay algún que otro error que está causando que siempre muestre el mensaje de que no has visitado la página.

En primer lugar deberías sustituir

<!--php1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>PHP </td></tr><tr><td id='CODE'><!--ephp1--><code>[color= #000000]
$tex[] = nl2br($texto);[/color]
</code><!--php2--></td></tr></table><div class='postcolor'><!--ephp2-->

por

<!--php1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>PHP </td></tr><tr><td id='CODE'><!--ephp1--><code>[color= #000000]
$tex[] = rtrim($texto);[/color]
</code><!--php2--></td></tr></table><div class='postcolor'><!--ephp2-->

Si haces lo primero $tex[] contendrá algo como 127.0.0.1<br /> y lo que interesa aquí no es sustituir el salto de línea por <br /> sino eliminar ese salto de línea.

En segundo lugar deberías quitar las comillas de $ip al hacer la comparación, sustituyendo esto

Código: Text
  1.  


Por último, el siguiente bucle es incorrecto

<!--php1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>PHP </td></tr><tr><td id='CODE'><!--ephp1--><code>[color= #000000]
for ($i=0;$i<$cantidad;$i++) {
if ($tex[$i] == $ip) {
echo "ya visitastes la pagina";
break;
}
else {
echo "no has visitado la pagina";
break;
}
}[/color]
</code><!--php2--></td></tr></table><div class='postcolor'><!--ephp2-->

Si la primera ip que encuentra en el archivo no coincidiera con la del usuario le diría que no ha visitado la página sin comparar el resto de ips que hay en el archivo.

Deberías hacer algo como esto en su lugar

<!--php1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>PHP </td></tr><tr><td id='CODE'><!--ephp1--><code>[color= #000000]

$nuevo = true;
for ($i=0;$i<$cantidad;$i++) {
  if ($tex[$i] == $ip) {
    $nuevo = false;
    break;
  }
}

if ($nuevo)
  echo "no has visitado la pagina";
else
  echo "ya visitaste la pagina";[/color]
</code><!--php2--></td></tr></table><div class='postcolor'><!--ephp2-->


Espero te sirva.

Salu2,
Avalon

-DriverOp-

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: Problema Con Archivo
« Respuesta #3 en: Martes 9 de Octubre de 2007, 10:32 »
0
Todo el proceso, bien hecho:
Código: Text
  1.  
  2.  
  3. &#036;archivo = &#34;texto.txt&#34;;
  4.  
  5. function GuardarIP(&#036;ip) {
  6. global &#036;archivo;
  7. &#036;fp = fopen(&#036;archivo,&#34;a&#34;);
  8. fwrite(&#036;fp,&#036;ip.&#34;&#092;n&#34;);
  9. fclose(&#036;fp);
  10. }
  11.  
  12. &#036;ip = &#036;_SERVER['REMOTE_ADDR'];
  13.  
  14. if (is_file(&#036;archivo)) { // el archivo existe, no está vacío
  15.  
  16.   &#036;aux = file_get_contents(&#036;archivo);  // lee todo el contenido de una sola vez
  17.   &#036;lista = explode(&#34;&#092;n&#34;,&#036;aux); // convierte el contenido en un array
  18.   if (in_array(&#036;ip,&#036;lista)) { // si &#036;ip existe en el array lista...
  19.      echo &#34;Bienvenido de regreso :)&#34;;
  20.    }
  21.    else {
  22.     GuardarIp(&#036;ip);
  23.     echo &#34;Es la primera vez que nos visitas&#34;;
  24.    }
  25.  
  26. }
  27. else {  // el archivo está vacío
  28.  GuardarIp(&#036;ip);
  29.  echo &#34;Es la primera vez que nos visitas&#34;;
  30. }
  31.  
  32.  

  Enjoy...