Pregunta:
Fecha: 26-02-2018 14:14:53
(En Español)
para ello muestro el código de mi tabla.
Donde en esta tabla el campo perfil esta como UNIQUE KEY, asi que los campos campos no pueden ser repetidos, pero mi problema esta en que no he podido validar desde el front-end, por favor les pido sus apoyos. para ello adjuntare los códigos que he estado haciendo.
Funciones para agregar, editar, evitar duplicados
Código - Action para guardar, editar:
Formulario de Agregar Nuevo:
Formulario para Editar:
Por favor les agradezco sus comentarios y apoyo de antemano. muchas gracias. Votos: 0 - Respuestas: 4 - Vistas: 22 Compartir en: Google Facebook Twitter LinkedIn Link
Como podría impedir el registro duplicado de algún campo en mysql y php [No resuelta]
Hola saludos a todos, en esta oportunidad quisiera pedirlesus comentarios y apoyo, en este caso, les comento,para ello muestro el código de mi tabla.
create table perfiles (
id_perfil int (11) NOT NULL AUTO_INCREMENT,
perfil varchar(50),
created_at datetime,
PRIMARY KEY (`id_perfil`) ,
UNIQUE KEY `perfil` (`perfil`)
);
insert into perfiles (perfil,created_at) value('Admin',NOW());
Donde en esta tabla el campo perfil esta como UNIQUE KEY, asi que los campos campos no pueden ser repetidos, pero mi problema esta en que no he podido validar desde el front-end, por favor les pido sus apoyos. para ello adjuntare los códigos que he estado haciendo.
Funciones para agregar, editar, evitar duplicados
public function add(){
$sql = "insert into ".self::$tablename." (perfil,created_at) ";
$sql .= "value (\"$this->perfil\",$this->created_at)";
return Executor::doit($sql);
}
public function update(){
$sql = "update ".self::$tablename." set perfil=\"$this->perfil\" where id_perfil=$this->id_perfil";
Executor::doit($sql);
}
public static function getByIdPerfil(){ // funcion para validar los campos repetidos
$sql = "select * from ".self::$tablename." where perfil=$perfil";
$query = Executor::doit($sql);
return Model::one($query[0],new PerfilesData());
}
Código - Action para guardar, editar:
if(isset($_GET["op"]) && $_GET["op"]=="add"){
$perfils = new PerfilesData();
$perfils->perfil= $_POST["perfil"];
$perfils->add();
Core::redir("./?view=perfiles&op=all");
}
elseif(isset($_GET["op"]) && $_GET["op"]=="update"){
$perfils = PerfilesData::getById($_POST["id_perfil"]);
$perfils->perfil= $_POST["perfil"];
$perfils->update();
Core::redir("./?view=perfiles&op=all");
}
Formulario de Agregar Nuevo:
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title">Agregar Perfiles</h3>
</div>
<div class="box-body">
<form class="form-horizontal" method="post" action="./?action=perfil&op=add" >
<div class="form-group">
<label class="col-lg-2 control-label">Nombre del Perfil</label>
<div class="col-md-6">
<input type="text" name="perfil" class="form-control" placeholder="Nombre del Perfil" >
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-3 col-lg-10">
<a href="?view=perfiles&op=all" class="btn btn-danger"></i> Cancelar</a>
<button type="submit" class="btn btn-primary ">Agregar </button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
Formulario para Editar:
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title with-border">Actualizar Datos de Perfiles</h3>
</div>
<div class="box-body">
<form class="form-horizontal" method="post" action="./?action=perfil&op=update">
<div class="form-group">
<label class="col-lg-2 control-label">Nombre del Perfil</label>
<div class="col-md-6">
<input type="text" name="perfil" value="<?php echo $perf->perfil;?>" class="form-control" >
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<input type="hidden" name="id_perfil" value="<?php echo $perf->id_perfil;?>">
<a href="?view=perfiles&op=all" class="btn btn-danger"></i> Cancelar</a>
<button type="submit" class="btn btn-primary">Actualizar </button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
Por favor les agradezco sus comentarios y apoyo de antemano. muchas gracias. Votos: 0 - Respuestas: 4 - Vistas: 22 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 27-02-2018 01:28:47 podrías intentar hacer una petición ajax a un archivo/función php que verifique el nombre de perfil en el sistema, y que de acuerdo a la respuesta, active o mantenga desactivado el botón de envío así como las respectivas alertas del sistema hacia el usuario Votos: 2 - Link respuesta
-
Fecha: 28-02-2018 09:07:59 Hola amigo, te doy mi opinion de como yo lo resolveria! Recuerda que cada cabeza es un mundo y puede haber miles de soluciones! Como indicas tu columna Perfil es unica pero podrias insertar muchas combinaciones para el mismo perfil por ejm.: Admin, admin, administrador, Administrator, etc. Primero que nada deberias definir si esto es lo que necesitas, ¡apuesto a que no!
Antes de realizar el insert en tu BD, puedes realizar una busqueda utilizando una coincidencia o una coincidencia exacta en tu columna perfil: (perfil like '%$_POST['perfil']%' ó perfil = '".$_POST['perfil']."' ) de lo que estas recibiendo por POST, si es que tu formulario va con el campo id_perfil vacío, lo que indica que es un nuevo registro; Si encuentras alguna coincidencia termina la ejecución de tu script y muestra un mensaje de alerta al usuario indicando que existe una coincidencia y que intente con otro nombre, la idea es que te asegures que no exista un registro previo, si existe terminas la ejecución y si no continuas y realizas el insert;
En el caso del update seria algo parecido, primero deberias determinar que el nombre de perfil no haya cambiado, y si cambio deberias asegurarte que el nuevo nombre de perfil no este en uso o no haya sido registrado previamente.
Espero haberte ayudado! Saludos!! Votos: 0 - Link respuesta -
Fecha: 28-02-2018 10:10:08 nunca pasen las peticiones directamente a la consulta de sus bases sin antes limpiar los datos que reciben:
MALO:
perfil like '%$_POST['perfil']%' ó perfil = '".$_POST['perfil']."'
Se que es un ejemplo, pero alguien con menos experiencia podría dañar su sistema haciendo esto, pues de esa manera tienes abiertas las puertas para un ataque XSS por ejemplo sin ninguna protección.
Recuerden limpien las variables antes de pasarlas a su consulta. Eviten llegar a un hospital con un infarto por ver sus tablas vacías.
Por otro lado, veo innecesario enviar el formulario sin validarlo antes refrescando así el formulario, lo que indicaría que debes escribir código adicional que detecte el error, lo envíe de vuelta y rellene de nuevo los campos con la data previamente llenada, pues en caso contrario el usuario perdió la información que lleno y debe iniciar de nuevo, reduciendo así la satisfacción en la experiencia de usuario en la web, con un form simple de pocos campos medianamente valdría, pero en un registro con muchos campos y selectores no aplicaría para nada.
Incluso podría das sugerencias de nombres de usuario sin salir de la pagina de acuerdo a la respuesta del ajax al estilo gmail o outllook. Votos: 1 - Link respuesta -
Fecha: 17-03-2018 19:28:50 Gracias, por sus respuestas, haré las pruebas, muchas gracias Votos: 0 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
