Programación Web y Scripting > PHP
Problema Con Archivo
(1/1)
venedan:
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:
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".
Avalon:
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 ---
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-:
Todo el proceso, bien hecho:
--- Código: Text --- $archivo = "texto.txt"; function GuardarIP($ip) {global $archivo;$fp = fopen($archivo,"a"); fwrite($fp,$ip."\n");fclose($fp);} $ip = $_SERVER['REMOTE_ADDR']; if (is_file($archivo)) { // el archivo existe, no está vacío $aux = file_get_contents($archivo); // lee todo el contenido de una sola vez $lista = explode("\n",$aux); // convierte el contenido en un array if (in_array($ip,$lista)) { // si $ip existe en el array lista... echo "Bienvenido de regreso :)"; } else { GuardarIp($ip); echo "Es la primera vez que nos visitas"; } }else { // el archivo está vacío GuardarIp($ip); echo "Es la primera vez que nos visitas";}
Enjoy...
Navegación
Ir a la versión completa