Foros del Web » Programando para Internet » PHP »

modificar if para No permitir mas que numeros, letras y guiones

Estas en el tema de modificar if para No permitir mas que numeros, letras y guiones en el foro de PHP en Foros del Web. Saludos a todos Tengo un sistema de perfiles de usuario y estoy mejorándolo permitiendo al usuario editar su propio perfil. El problema está en el ...
  #1 (permalink)  
Antiguo 16/04/2016, 07:08
Avatar de jearj  
Fecha de Ingreso: julio-2008
Mensajes: 72
Antigüedad: 15 años, 9 meses
Puntos: 0
modificar if para No permitir mas que numeros, letras y guiones

Saludos a todos

Tengo un sistema de perfiles de usuario y estoy mejorándolo permitiendo al usuario editar su propio perfil.

El problema está en el tema de la seguridad, no consigo impedir cierto tipo de caracteres que no quiero que se inserten en los campos del form.

Para mí, que lo más importante es solucionar esto:
Código PHP:
Ver original
  1. if(!preg_match("/^[a-zA-Z0-9\-_]+$/", $usuario_nombre)){

Tampoco consigo poner un mínimo y máximo de caracteres.
Si hay alguna sugerencia será bienvenida

Aquí os dejo el código:

Código PHP:
Ver original
  1. //Verificar que contenga caracteres permitidos
  2. if(!preg_match("/^[a-zA-Z0-9\-_]+$/", $usuario_nombre)){
  3.     $errores[]=true;
  4.     $_SESSION['error1']="El Nick solo puede contener letras, numeros, guion";
  5. }
  6.  
  7. //Comprobar que el texto tenga un mínimo de 4 caracteres
  8. $minimocaracteres=4;
  9. if (strlen($usuario_nombre)<$minimocaracteres){
  10. $errores[]=true;
  11.     $_SESSION['error1']=" Minimo 4 caracteres";


Gracias de antemano por leerme
  #2 (permalink)  
Antiguo 16/04/2016, 13:45
Avatar de jearj  
Fecha de Ingreso: julio-2008
Mensajes: 72
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: modificar if para No permitir mas que numeros, letras y guiones

Quizás no os he dado suficiente información, aquí os dejo un poco mas


-- Archivo para editar el nick------> editarUsuario.php
Código PHP:
Ver original
  1. <?php session_start();error_reporting(E_ALL ^ E_NOTICE); ?>
  2.  
  3. // Incluimos la conexión.
  4. include_once("db.php");
  5.  
  6. <form action="ValidarUsuario.php" method="post">
  7.         <?php
  8.                 if($_GET['error1']=='usuario'){
  9.         echo '<font color="#FF0000">Tienes que poner un Nombre de usuario<br /></font>';
  10.         }
  11.                 if($_GET['error2']=='usuario'){
  12.         echo '<font color="#FF0000">El Nombre de usuario solo puede contener letras, numeros y guiones<br /></font>';
  13.         }
  14.                 if($_GET['error3']=='usuario'){
  15.         echo '<font color="#FF0000">El Nombre de usuario debe ser entre 4 y 15 caracteres<br /></font>';
  16.         }
  17.                 ?>
  18. <input type="hidden" name="id" value="<?php echo  $_SESSION['id'];?>">
  19. <input type="text" name="usuario" value="<?php echo $_SESSION['usuario'];?>">
  20. <input type="submit" value="Guardar">
  21. </form>


-- Del Archivo ValidarUsuario.php
Código PHP:
Ver original
  1. //Comprobar que el nombre de usuario no esté vacio
  2. $usuario=$_POST['usuario'];
  3. if($usuario=='') {
  4.         header('Location: editarUsuario.php?error1=usuario');
  5.     $errores[]=true;
  6. return $errores;
  7.         }
  8.  
  9. //Verificar que contenga caracteres permitidos
  10. if(!preg_match("/^[a-zA-Z0-9\-_]+$/", $usuario)){
  11.         header('Location: editarUsuario.php?error2=usuario');
  12.     $errores[]=true;
  13. return $errores;
  14. }
  15.  
  16. //Comprobar que el texto tenga un mínimo de 4 caracteres
  17. $minimocaracteres=4;
  18. if (strlen($usuario)<$minimocaracteres){
  19.         header('Location: editarUsuario.php?error3=usuario');
  20.     $errores[]=true;
  21. return $errores;
  22. }

He buscado en este foro y en otros atreves del google y he probado de todo pero siempre salen errores.

Solo me devuelve el error1 (Tienes que poner un Nombre de usuario) es el único que funciona correctamente

después de mucho tiempo no he visto mas que solicitar vuestra ayuda.

Última edición por jearj; 17/04/2016 a las 00:40
  #3 (permalink)  
Antiguo 17/04/2016, 02:31
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: modificar if para No permitir mas que numeros, letras y guiones

Creo que lo que buscas es algo así:
Código PHP:
Ver original
  1. <?php
  2.     // recuperamos el usuario introducido
  3.     $usuario=$_POST['usuario'];
  4.  
  5.     /* elimina POST si no lo vas utilizar mas */
  6.     unset($_POST);
  7.  
  8.     /* iniciamos el array */
  9.     $errores[0]=false;
  10.    
  11.     //Comprobar que el nombre de usuario no esté vacio
  12.     if($usuario=='') {
  13.         $errores[0]=true;
  14.         $errores[1]='usuario';
  15.             }
  16.      
  17.     //Verificar que contenga caracteres permitidos
  18.     if(!preg_match("/^[a-zA-Z0-9\-_]+$/", $usuario)){
  19.         $errores[0]=true;
  20.         $errores[2]='usuario';
  21.     }
  22.      
  23.     //Comprobar que el texto tenga un mínimo de 4 caracteres
  24.     $minimocaracteres=4;
  25.     if (strlen($usuario)<$minimocaracteres){
  26.         $errores[0]=true;
  27.         $errores[3]='usuario';
  28.     }
  29.  
  30.     /* comprbamos si ha habido algun error */
  31.     if($errores[0]==true){
  32.         /* eliminamos la bandera si no la necesitas */
  33.         unset($errores[0]);
  34.         /* inicializamos variable y recorremos los valores del array */
  35.         $keyValue='';
  36.         foreach ($errores as $key => $value) {
  37.             $keyValue.='error'.$key.'='.$value.'&';
  38.         }
  39.         /* redireccionamos */
  40.         header('Location: editarUsuario.php?'.$keyValue);
  41.  
  42.         /* Detenemos el script */
  43.         return;
  44.     }

Aun qe no estoy seguro de que es lo que quieres hacer exactamente
__________________
Unset($vida['malRollo']);
  #4 (permalink)  
Antiguo 17/04/2016, 06:33
Avatar de jearj  
Fecha de Ingreso: julio-2008
Mensajes: 72
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: modificar if para No permitir mas que numeros, letras y guiones

Gracias xerifandtomas
Más que nada es el tema de seguridad.
El problema es que no consigo que el nombre de usuario sea entre 4 y 15 caracteres. El error sale pero el nombre lo cambia aunque no cumpla los requisitos (entre 4 y 15 caracteres)

El otro punto es que solo quiero que permita letras, números y guiones, pero del resto de caracteres unos los admite y otros no, y no quiero que se pueda insertar este tipo de caracteres: ><$&Ç*’”?}{ etc.


Esto es lo que no me funciona correctamente:

Código PHP:
Ver original
  1. //Verificar que contenga caracteres permitidos
  2. if(!preg_match("/^[a-zA-Z0-9\-_]+$/", $usuario)){
  3.         header('Location: editarUsuario.php?error2=usuario');
  4.     $errores[]=true;
  5. return $errores;
  6. }
  7.  
  8. //Comprobar que el texto tenga un mínimo de 4 caracteres
  9. $minimocaracteres=4;
  10. if (strlen($usuario)<$minimocaracteres){
  11.         header('Location: editarUsuario.php?error3=usuario');
  12.     $errores[]=true;
  13. return $errores;
  14. }

El de los caracteres no permitidos no limita a letras, números y guiones exclusivamente.

El de limitar el numero de caracteres da el error pero cambia el nombre igualmente aunque sea menor de 4 caracteres. Además el código esta echo para el minino y me gustaría que fuese mínimo y máximo, pero no se como hacerlo.
  #5 (permalink)  
Antiguo 17/04/2016, 11:39
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: modificar if para No permitir mas que numeros, letras y guiones

Pues supongo que te actualiza en la base de datos por qué no cortas el Script adecuadamente.

Muestra el código completo si es posible.

Esos if que están dentro de una función, un include o en que parte del código general se ejecutan?

En el momento que la variable $errores sea true deberías de aplicar un exit para que deje de ejecutarse el código.
__________________
Unset($vida['malRollo']);
  #6 (permalink)  
Antiguo 17/04/2016, 12:27
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 7 meses
Puntos: 31
Respuesta: modificar if para No permitir mas que numeros, letras y guiones

Cita:
Iniciado por jearj
El problema es que no consigo que el nombre de usuario sea entre 4 y 15
Código PHP:
$userName 'us e';
if(!(
preg_match('/^[A-Za-z0-9\-_]{4,15}$/i'$userName))){
echo 
'error';
   }else{
echo 
'Correcto';

__________________
╬-----╬
║☺₧☻║
╬-----╬
  #7 (permalink)  
Antiguo 17/04/2016, 13:29
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: modificar if para No permitir mas que numeros, letras y guiones

Para la longitud también puedes utilizar, si quieres separarlo.
Código PHP:
Ver original
  1. if (strlen($usuario)<4 OR strlen($usuario)>15 ){
En estos casos es recomendable utilizar también trim, para eliminar espacios al inicio o fin.
Código PHP:
Ver original
  1. $usuario=trim($usuario);
  2. if (strlen($usuario)<4 OR strlen($usuario)>15 ){
__________________
Unset($vida['malRollo']);
  #8 (permalink)  
Antiguo 17/04/2016, 15:23
Avatar de jearj  
Fecha de Ingreso: julio-2008
Mensajes: 72
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: modificar if para No permitir mas que numeros, letras y guiones

Gracias amigos

lo he solucionando con el consejo de poner exit como dijiste xerifandtomas

aunque he utilizado return $errores; y va perfecto.

Ahora me ha surgido otro problema que estoy intentando solucionar antes de dejar el código para quien le sirva.

Si esta fuera de mi capacidad os consultare.

Muchas Gracias a todos.

Etiquetas: letras, modificar, numeros, permitir
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 20:12.