Author Topic: Como puedo poner más caracteres no permitidos  (Read 11407 times)

0 Members and 1 Guest are viewing this topic.

Offline exefire

  • Newbie
  • *
  • Posts: 30
  • FotoBomberos.com
    • View Profile
    • FotoBomberos.com
Como puedo poner más caracteres no permitidos
« on: May 21, 2006, 11:02:13 PM »
en un bug publicado hace no mucho tiempo se indicaba agregar el siguiente código en register.php (versión 1.7 y 1.7.1)

Code: [Select]
      elseif (preg_match("#[<>]#", $user_name))
      {
        $msg .= (($msg != "") ? "<br />" : "").$lang['username_bad_characters'];
        $error = 1;
      }

con esto se prohíbe que los usuarios usen los caracteres < y >

Mi pregunta es: como puedo agregar más caracteres a esa lista, o mejor aún, que prohibir todos los caracteres distintos de 0-9 a-z  :?: :?: :?:

esto ya que tengo usuarios con username como: "Juan Nuñez González"

Offline exefire

  • Newbie
  • *
  • Posts: 30
  • FotoBomberos.com
    • View Profile
    • FotoBomberos.com
Re: Como puedo poner más caracteres no permitidos
« Reply #1 on: May 23, 2006, 06:07:27 PM »
Buena, ya que ví que nadie me contestó y que al parecer no lo harían  :roll: me tomé el tiempo de crear la solución  :idea: que yo mismo andaba buscando.... espero que pueda serles de ayuda...

Bueno, lo que hace este MOD es limitar los caracteres que se pueden usar en el campo "Nombre de usuario" cuando alguien se registra.
en mi caso y como viene configurado el mod son letras de la "a" a la "z" (minúsculas todas) numéros del "0" al "9" y dos caracteres extra "-" y "_"   (Las comillas son para demarcar, no cuenta como caracteres válidos. 8O)

Debo decir que este mod genera un formato de nombre de usuario para los FUTUROS USUARIOS, ya que sólo modifica register.php, los usuarios antiguos que no cumplan con este formato no tendrán problemas es seguir iniciando sesión y subiendo fotos.

Además este mod muestra opción como "sugerencia" de nombre de ususario cuando alguien ingresa caracteres no validos. Ejemplo: username: "rescate$911#new YORK" muestra: "Opción: rescate911new_york" que cumple con el formato

Es necesario que esté instalada la actualización de seguridad del 28-02-2006 en que se agrega a register.php el siguiente código:
Code: [Select]
elseif (preg_match("#[<>]#", $user_name))
      {
        $msg .= (($msg != "") ? "<br />" : "").$lang['username_bad_characters'];
        $error = 1;
      }


A modificar:
register.php
includes/constants.php
lang/<tu idioma>/main.php
templates/<tu templates>/register_form.html

register.php
Localizar:
Code: [Select]
  if (isset($HTTP_POST_VARS['user_name'])) {

Insertar arriba:
Code: [Select]
// Función validar nombre de usuario
function comprobar_username($nombre_usuario){
// Máxima longitud username
$long_max = MAX_USER_KEYWORD_LENGTH;
// Mínima longitud username
$long_min = MIN_USER_KEYWORD_LENGTH;
// $sag es la variable que esta función devuelve: return $sag;
$sag = '';
// Se comprueba que la longitud del nombre de usuario se válida.
if (strlen($nombre_usuario)<$long_min){
$sag = 2; // devuelve 2, como diciendo "error 2"
return $sag;
}
if (strlen($nombre_usuario)>$long_max){
$sag = 3; // devuelve 3, como diciendo "error 3"
return $sag;
}
// Se define $permitidos con los caracteres permitidos
$permitidos = "abcdefghijklmnopqrstuvwxyz0123456789-_";
// Se comprueba que los caracteres sean los permitidos
for ($i=0; $i<strlen($nombre_usuario); $i++){
if (strpos($permitidos, substr($nombre_usuario,$i,1))===false){
// Se escribe la variable $sag con todos los caracteres inválidos
$sag = $sag.substr($nombre_usuario,$i,1);
}
}
   
if ($sag != ''){
// Devuelve $sag con todos los caracteres inválidos
return $sag;
}
// Devuelve true si el formato de nombre de usuario está correcto
return true;
  }
// Fin Función validar nombre de usuario

Lolcalizar:
Code: [Select]
elseif (preg_match("#[<>]#", $user_name))
      {
        $msg .= (($msg != "") ? "<br />" : "").$lang['username_bad_characters'];
        $error = 1;
      }

Reemplazar por:
Code: [Select]
// Texto original
// elseif (preg_match("#[<>]#", $user_name))
// Fin Texto original

      elseif (comprobar_username($user_name) != 1)
      {
 
  // ExeFire
$long_car = '';
for ($i=0; $i<strlen(comprobar_username($user_name)); $i++){
$long_car = $long_car.'#';
}

$resultado_func = comprobar_username($user_name);

if(strlen($resultado_func) >= 1 and $resultado_func != 2 and $resultado_func != 3){
$msg .= (($msg != "") ? "<br />" : "").$lang['username_bad_characters'];
$msg .= ": ".$resultado_func;
}
if($resultado_func == 2){
$msg .= (($msg != "") ? "<br />" : ""). $lang['user_name_short'];
}
if($resultado_func == 3){
$msg .= (($msg != "") ? "<br />" : ""). $lang['user_name_long'];
}

// Pasa todo a minúscula
$recom = strtolower($user_name);
// Se le quitan las acentos a las vocales, la ñ en n y espacio en _
$recom = strtr($recom, "áéíóúàèìòùäëïöüâêîôûñ ", "aeiouaeiouaeiouaeioun_");
// Se transforman el resto de los caracteres a #
$recom = strtr($recom,comprobar_username($user_name), $long_car);
// se borran los # creados en el punto anterior
for ($i=0; $i<strlen($recom); $i++){
if (strpos($recom,'#')=== false){
// no se encontraron caracteres inválidos
}else{
$recom = substr($recom, 0,strpos($recom,'#')).substr($recom, strpos($recom,'#')+1);
}
}
// Se eliminan los espacios al final y al principio
$recom = trim($recom);
// Se corta la cadena al máximo dado
$long_max = MAX_USER_KEYWORD_LENGTH;
$recom = substr($recom,0,$long_max);

$username_option = $lang['user_name_option'].$recom;
  // Fin ExeFire
 
// Texto original
// $msg .= (($msg != "") ? "<br />" : "").$lang['username_bad_characters'];
// Fin Texto original
        $error = 1;
      }

Lolcalizar:
Code: [Select]
  "clickstream" => $clickstream,

Reemplazar por:
Code: [Select]
  "lang_user_name_format" => $lang['user_name_format'],
  "long_max" => MAX_USER_KEYWORD_LENGTH, // Máxima longitud username
  "long_min" => MIN_USER_KEYWORD_LENGTH, // Mínima longitud username
  "username_option" => $username_option,
  "clickstream" => $clickstream,
Guardar cambios y cerrar.


includes/constants.php
Lolcalizar:
Code: [Select]
?>
Insertar arriba:
Code: [Select]
// Longitud de letras mínima y máxima para el nombre de usuario
define('MIN_USER_KEYWORD_LENGTH', 5);
define('MAX_USER_KEYWORD_LENGTH', 30);
Guardar cambios y cerrar.


lang/<tu idioma>/main.php
Lolcalizar:
Code: [Select]
?>
Insertar arriba:
Code: [Select]
$lang['user_name_short'] = "El nombre de usuario es muy corto. Mínimo {long_min} caracteres.";
$lang['user_name_long'] = "El nombre de usuario es muy largo. Máximo {long_max} caracteres.";
$lang['user_name_option'] = "Opción: ";
$lang['user_name_format'] = "Formato: a-z 0-9 - _<br>
Mínimo {long_min} caracteres<br>
Máximo {long_max} caracteres";
Guardar cambios y cerrar.


templates/<tu templates>/register_form.html
Lolcalizar:
Code: [Select]
            <td class="row1"><b>{lang_user_name}</b></td>
            <td class="row1"><input type="text" name="user_name" size="30" value="{user_name}" class="input" /></td>

Reemplazar por:
Code: [Select]
            <td valign="top" class="row1"><b>{lang_user_name}</b><br>{lang_user_name_format}</td>
            <td valign="top" class="row1">
<table  border="0" cellspacing="0" cellpadding="0">
<tr>
  <td><input name="user_name" type="text" class="input" value="{user_name}" size="30" /></td>
</tr>
<tr>
  <td><div align="center">{username_option}</div></td>
</tr>
            </table>
</td>
Guardar cambios y cerrar.


Bueno, con eso a mi me funciona a la perfección...

Saludos,
« Last Edit: May 23, 2006, 06:25:08 PM by exefire »

Offline benzo

  • Moderator
  • Hero Member
  • *****
  • Posts: 748
  • El que nada duda, nada sabe. :-)
    • View Profile
Re: Como puedo poner más caracteres no permitidos
« Reply #2 on: May 23, 2006, 10:26:24 PM »
Gracias por compartir tu código.

Puedes añadirlo en este hilo : http://www.4homepages.de/forum/index.php?topic=8246.0

Un saludo.
¡ Antes de actualizar o modificar el script, realiza una copia de seguridad de todos los archivos y datos !

Tenemos una pequeña faq en español, también la faq oficial ( en inglés  ) y un buscador muy hermoso

Offline VonHerzen

  • Newbie
  • *
  • Posts: 42
    • View Profile
Re: Como puedo poner más caracteres no permitidos
« Reply #3 on: July 26, 2008, 06:47:38 PM »

He intentado implementar este MOD en mi galería v., 1.7.4 y no funciona, me sale el siguiente error:
Parse error: syntax error, unexpected T_ELSEIF in /home/www.galeria.com/register.php on line 98

creo que la razón es porque yo NO tengo este código que se dice de parche de seguridad en register.php....

Code: [Select]
      elseif (preg_match("#[<>]#", $user_name))
      {
        $msg .= (($msg != "") ? "<br />" : "").$lang['username_bad_characters'];
        $error = 1;
      }

hace falta en la versión 1.7.4 instalar el parche?  ¿alguien tiene alguna idea?  muchas gracias!