Foros del Web » Programando para Internet » PHP »

Leer fichero y coparar contenido

Estas en el tema de Leer fichero y coparar contenido en el foro de PHP en Foros del Web. Hola a todos:.. me dirigo a ustedes para pedirles su ayuda... la verdad esq es super simple todo, pero aún no logro hacerlo... bueno...les cuento... ...
  #1 (permalink)  
Antiguo 10/03/2003, 17:38
 
Fecha de Ingreso: enero-2003
Mensajes: 38
Antigüedad: 14 años, 10 meses
Puntos: 0
Exclamación Leer fichero y coparar contenido

Hola a todos:..
me dirigo a ustedes para pedirles su ayuda...
la verdad esq es super simple todo, pero aún no logro hacerlo...

bueno...les cuento...

quisiera saber como puedo hacer una función o un simple script en php para q cada vez q se coloque una palabra en un input es valor de este pase por un script q recoga ese valor y lo compare con los q estan en un archivo .txt..un estilo así a un script para palabras phoibidas y si encuentra una palabra muestre un mensaje..

Saludos y de antemano gracias por la ayuda.
  #2 (permalink)  
Antiguo 10/03/2003, 18:08
Avatar de sci-fi  
Fecha de Ingreso: marzo-2002
Mensajes: 157
Antigüedad: 15 años, 9 meses
Puntos: 0
hola,

también podrías hacerlo con expresiones regulares, que no son fáciles para este caso pero te ahorrarían un poco de tiempo de execución (creo que sería más rápido que abrir un fichero .txt)... para utilizar las expr. reg., tienes las funciones ereg() y eregi()--- fijate en este foro hay como dos o tres mensajes acerca de eso con varios links para utilizar expresiones regulares, uno de ellos era www.ignside.net/man/php/regex.php, y hay un mensaje solamente dedicado a regexp en general que era éste.

o bien también podrías usar alguna función de cadena, buscas las palabras prohibidas en la variable que recoge el valor del campo, lo haces con stristr(), por ejemplo stristr($campo, $palabra_prohibida), o lo mismo con strstr(), nada más que esta última es case-sensitive (diferencia mayúsculas de minúsculas). stristr() retorna false si no encuentra la subcadena a buscar, por lo que si se da lo contrario, ahí tienes que encontraste una palabra prohibida y puedes enviarle un mensaje al usuario diciéndole que esa palabra no se permite, etc...

podrías crear un array con todas las palabras prohibidas, y crear un bucle donde se llame a una función stristr() para que recorra el campo con cada uno de los componentes del array. por ejemplo

Código PHP:
$prohibidas = array('palabra1''palabra2'etc);
for (
$r=0$r<sizeof($prohibidas); $r++) {
if (
stristr($campo_de_form$prohibidas[$r])) {
// se encontró una, codigo aqui para el caso
}

si no, utilizas ereg() y eregi() con expresiones regulares (tendrías que ver un poco de regexp para esto ya que no sería muy fácil...).

de lo contrario si utilizas un fichero .txt, tendrías que utilizar las funciones de directorios/archivos, como dir(), fopen(), etc, además de usar las de busqueda de cadenas

espero que sirva

saludos
__________________
webdeveloper
http://www.javascripters.com.ar/
diseño web y tecnología

Última edición por sci-fi; 10/03/2003 a las 18:18
  #3 (permalink)  
Antiguo 10/03/2003, 20:55
 
Fecha de Ingreso: enero-2003
Mensajes: 38
Antigüedad: 14 años, 10 meses
Puntos: 0
Hola...de verdad gracias por lo q me diste...me sirvió arto...pero me surgió una duda..
en el bucle for hay un if...pero q pasa si la condición no se cumple o sea...coloco una palabra q no esté en el array y quiero colocar algo así como un else...como tendria q hacerlo???
te pregunto esto porq le coloqué un else pero muestra tanto el if como el else al ejecutarce el bucle...
ojalá puedas ayudarme...

saludos y denuevo gracias.
  #4 (permalink)  
Antiguo 11/03/2003, 06:10
Avatar de sci-fi  
Fecha de Ingreso: marzo-2002
Mensajes: 157
Antigüedad: 15 años, 9 meses
Puntos: 0
bueno, si quieres colocar un else sería así, pero no te va a servir como ya te digo más adelante:

Código PHP:
$prohibidas = array('palabra1''palabra2'etc);
for (
$r=0$r<sizeof($prohibidas); $r++) {
{
if (
stristr($campo_de_form$prohibidas[$r])) {
// se encontró una, codigo aqui para el caso
} else {
// no se encontró la palabra *actual* en el array, código aqui para el caso
}
}

no necesitas en realidad modificar el array, trabaja por defecto. Lo que no esté en el array no se encuentra y entonces se ejecuta lo que va en en el else{}, el problema sería que eso se ejecutará para *cada* palabra que no se encuentre, o sea *cada* vez que no encuentre *cualquiera* de esas palabras (cada vez que se comprueba la condición). Por eso, no necesitas el else. Solamente pon un codigo que redireccione al usuario o inicie una variable que indique que se encontró alguna de las palabras (qué se yo por ejemplo $encontradas = true si se encontró cualquiera), en ese caso, lo que le siga al bucle puedes controlarlo chequeando si está o no $encontradas, o directamente asumir que no se ejecutará si se encontró alguna palabra, por lo que equivale en realidad al else{} nada más que mejor porque sirve para todo el array, por eso no hace falta....

si tienes problemas trata de postear el código ya que lo que me dices en el post anterior no te puedo decir qué pasa sin él

saludos
__________________
webdeveloper
http://www.javascripters.com.ar/
diseño web y tecnología

Última edición por sci-fi; 11/03/2003 a las 06:12
  #5 (permalink)  
Antiguo 11/03/2003, 09:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
PHP ya hace lo que te puso sci-fi en una sola función:

in_array()
http://www.php.net/manual/en/function.in-array.php

Código PHP:
<?
// Las palabras del array seran en minusculas.
$prohibidas = array('tontera1''tontera2'etc);
$palabra="tontera";

if (
in_array(strtolower($palabra),$prohibidas)){
   echo 
"No digas we*";
} else {
   echo 
"Texto valido, no has dicho ninguna we* xD)
}
?>
Con strtolower() convertimos la palabra de entrada en minusculas para que in_array() lo mire en el array (con sus elementos valores en minusculas)

Un saludo,
  #6 (permalink)  
Antiguo 11/03/2003, 11:29
Avatar de sci-fi  
Fecha de Ingreso: marzo-2002
Mensajes: 157
Antigüedad: 15 años, 9 meses
Puntos: 0
ok, creo que me enredé un poco en el post anterior...

está muy buena esa función, inarray().... pero darkNET necesitaba buscar en una cadena normal enviada desde una form; el array se creaba para poner las palabras a buscar y no a la inversa... por eso el bucle...

volviendo a eso lo que me decías, DarkNET, de que se ejecutaba tanto el if como el else, se debía a que, supongamos que 'palabra1' no estaba en $campo_de_form, donde está la cadena enviada por el usuario... entonces, se ejecutaba el else. Pero, para 'palabra2', que sí se enontraba, se ejecutaba el if. Eso sucede porque el else se ejecutaba tantas veces como dura el bucle, o sea para todos los indexes del array. Te daba eso tanto porque 'palabra1' no estaba, pero 'palabra2' sí y se ejecutaban los dos códigos... por eso no te conviene poner un else en ese if, solamente asumí que lo que sigue se ejecuta como si fuera un else. por ejemplo pones:

Código PHP:
if ([se encontro una]) { 
// redireccionás al usuario de vuelta al formulario
header("Location: URL_del_form?prohibido=true"); 
print 
' '; exit(); 
// si $_GET['prohibido'] == true en el form original, 
// le ponés un mensaje 'no se pueden introducir tales palabras,
// no sé, etc' 
}
// de esa forma, lo que siga despues del bucle aquí no se
// ejecutará, o sea que se ejecuta solamente 
// si no se encuentran esas palabras 
no sé si me explico, también podrías hacer
Código PHP:
if ([se encontro una]) { 
$encontradas true; } // chequeas una sola vez 
// en lugar de las multiples veces de bucle del else anterior
if (isset($encontradas) && $encontradas == true) { // haces
// algo sin redireccionar 

saludos
__________________
webdeveloper
http://www.javascripters.com.ar/
diseño web y tecnología
  #7 (permalink)  
Antiguo 11/03/2003, 12:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Un solución sería:

Código PHP:
<?
// Las palabras del array seran en minusculas.
$prohibidas = array('tontera1''tontera2''tontera3');
// Suponemos que $frase es tu campo de tu formulario q quieres validar ...
$frase="Hola voy a decir tontera1, nose que mas poner tontera3";

foreach (
$prohibidas as $palabra_prohibida){
  if (
substr_count($frase,$palabra_prohibida) > 0){
     
// redireccionas a tu formulario y le pasas variable codigo con algun valor que lo gestionaras en tu formulario.
     
header ("location: tuformulario.php?codigo=1");
     exit;
  }
}

echo 
"todo OK";
// si la validación fué corecta puedes continua en este script
// con el proceso de inserccion a tu .txt o lo q corresponda.

?>
La validación se hace con todo el campo ... osese, una frase tipo:
"blablatontera1blabla bla ba" ... es detectada como palabra prohíbida ..

Detetectar solo palabras teniendo en cuenta signos de puntuación como: comas, parentesis, comillas ... sería mejor opción usar una expresión regular. Para que se detecte una palabra prohibida tipo: "bla bla tontera1, bla blabla" pero no; "bla blatontera1bla bla bla" ...


Un saludo,
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 07:59.