entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Formato al nombre de la sesión / form

Buenas.

Tengo un form donde los usuarios pueden loguearse:

<form action="" method="post">
<fieldset>
<div class="form-group">
<input style="width:300px;height:32px;float:center;font-size:13px;margin-left:150px;" class="form-control" placeholder="Nombre de usuario" name="username" type="text"> 
</div>
<div class="form-group">
<input style="width:300px;height:32px;float:center;font-size:13px;margin-left:150px;" class="form-control" placeholder="Contraseña" name="password" type="password">
</div>
<div style="width:300px;height:32px;float:center;font-size:13px;margin-left:150px;" class="checkbox">
<label>
<input name="remember" type="checkbox" value="Recordar sesión.">Recordar sesión.
</label>
</div>
<center><input type="submit" id="BotonEntrar" name="userlogin" class="BotonEntrar" value=""></center>
</fieldset>
</form>

El nombre de los usuarios YA ESTÁ FIJADO, y SIEMPRE sigue el siguiente formato en la base de datos: Nombre_Apellido. Por ejemplo: Juan_Carlos.

El problema es que, si en el input del login los usuarios ponen noMBre_ApeLlido (sin seguir el formato de mayúsculas en las iniciales) después en el $_SESSION['USER:NAME'] = $_POST['username']; se verá mal el nombre cuando lo inserte en la web. Dirán, ¿por qué no insertas el de la base de datos que arriba mencionaste que ya estaba formateado? Necesito ingresar sí o sí el de la sesión.

<?php
        if( isset( $_POST['userlogin'] ) )
        {
          if( $player = GetVarPlayer( $_POST['username'] ) )
          {
            if( $_POST['password'] == $player['password'] )
            {
              if( isset( $_POST['nologout'] ) ) {setcookie("NOLOG:USER", $_POST['username'], time()+3600*24);}
              function protege($texto) 
              {
                    $texto = str_replace("'", "\'", $texto);
                    $texto = htmlspecialchars($texto);
                    $texto = htmlentities($texto);
                    $texto = trim($texto); 
                    return $texto;
              }
              $user=protege($_POST['username']);
              $pass=protege($_POST['password']);
              $sql_check = mysql_query("SELECT * FROM smf_members WHERE member_name='".$_POST['username']."'");
              $user_temp = mysql_fetch_array($sql_check);
              $contrasena=sha1(strtolower($user).$pass);
              if($user_temp['passwd'] != $contrasena) {$sql_update = mysql_query("UPDATE smf_members SET passwd='".$contrasena."' WHERE member_name='".$_POST['username']."'");}

              $_SESSION['USER:NAME'] = $_POST['username']; 
?>

¿Puedo darle una restricción más estricta al input en cuanto al formato que elegí o puedo formatearlo yo al hacer el $_SESSION['USER:NAME'] = $_POST['username']; para que quede bien (Nombre_Apellido)? ¿Qué me aconsejarían y cómo podría hacerlo?

2 Respuestas

3votos

cobasESP Puntos19650

Al recoger la variable en PHP pasa todas las letras a minuscula:

$nombre = $_POST['username'];
$nombre = strtolower($nombre);
$_SESSION['USER:NAME'] = $nombre;

Y listo, escriban lo que escriban antes de buscar en la BDD o de mostrarlo se guardara todo con minusculas. Si por el contrario quieres todo en minusculas y la primera letra en mayusculas, para que quede capitalizado y mas vistoso puedes usar:

$nombre = $_POST['username'];
$nombre = ucfirst($nombre);
$_SESSION['USER:NAME'] = $nombre;

0voto

Leonardo-Tadei comentado

Si no veo mal @cobasESP, la estrategia que plateás no funciona cuando el nombre de usuario son dos palabras, ya que tiene que verse como Nombre_Apellido.

En tu primer caso se vería nombre_apellido y en el segundo caso Nombre_apellido.

Habría que primero dividir el string y luego aplicar ucfirst() a cada parte, para luego reconstruirlo.

2votos

Leonardo-Tadei Puntos227320

Hola @KevinLeyes

habíamos charlado de esto en otro post hace un tiempo. La mejor solución, a mi criterio, es no tener ese problema, asignando a la sesión el valor de la DB en lugar del valor del formulario:

...
$sql_check = mysql_query("SELECT * FROM smf_members WHERE member_name='".$_POST['username']."'");
$user_temp = mysql_fetch_array($sql_check);
$contrasena=sha1(strtolower($user).$pass);
if($user_temp['passwd'] != $contrasena) {$sql_update = mysql_query("UPDATE smf_members SET passwd='".$contrasena."' WHERE member_name='".$_POST['username']."'");}

$_SESSION['USER:NAME'] = $user_temp['username']; 

Esto, asumiendo que el campo de la tabla que contiene el usuario se llame 'username' (y si no, lo reemplazás por el nombre del campo que usás)

Saludos cordiales!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta