我有以下代码:
if($_POST['id']=="id")
{
$nomb_idm=$_POST['nombre'];
$n_idm=$_POST['id'];
$nivel_ide=$_POST['nivel'];
$pass_ide=$_POST['pass'];
$correo_idm= $_POST['correo'];
$usuario_ide= $_POST['usuario'];
$idfto=$_POST['id'];
$ide_consult = "SELECT * FROM usuarios WHERE id=".$idfto."" ;
$ide_result = $conexion->query($ide_consult);
while( $ide_fila = $ide_result->fetch_array() )
{ $idm=$ide_fila['id_foto'];}
if($idfto===$idm){
$msj="El usuario existe , crear con un numero de registro diferente o borrar el existente";
header("Location: index.php?msj=".$msj."");
}else{
$ide_permisos = "INSERT INTO permisos(id, nivel, smenu, status)
SELECT permisos_default.nivel,permisos_default.smenu,permisos_default.status
FROM permisos_default
WHERE permisos_default.nivel LIKE '%{$nivel_ide}%'";
$ide_p_result = $conexion->query($ide_permisos);
$msj="Usuario Creado con Exito";
header("Location: index.php?msj=".$msj."");
}
}
使用此代码,我所做的是,当我发送用户的 id 时,我使用它来为我称为权限的表分配权限,但通过用户级别从表中获取 permissions_default。
代码插入用户但没有在权限表中插入权限。
我的问题与此代码有关:
$ide_permisos = "INSERT INTO permisos(id, nivel, smenu, status)
SELECT permisos_default.nivel,permisos_default.smenu,permisos_default.status
FROM permisos_default
WHERE permisos_default.nivel LIKE '%{$nivel_ide}%'";
$ide_p_result = $conexion->query($ide_permisos);
请有任何建议或帮助
太感谢了。!
您遇到的问题是您没有将
id
用户添加到查询中:这样,您所在级别模板的每个元素都将
permisos_default
使用permisos
所需id
用户之一进行复制。别名id
不是必需的,但它对于调试每个值的位置或该数字所指的位置很有用。在线示例:https ://www.db-fiddle.com/f/ihomAdT8uTaUrjAvr6oAhG/0
让我们分别看一下每条指令:
指示了四列,而在 中
INSERT
您只选择了三列。查询不会那样工作。如果它是类型,或者您可以在.SELECT
id
AUTO_INCREMENT
SERIAL
INSERT
还需要注意以下几点:
SELECT
与INSERT
INSERT
如果尝试创建重复行,代码可能会失败INSERT
执行。SELECT
WHERE
它们是需要考虑的事情。
笔记:
如果您传入的变量
LIKE
来自外部源(表单或其他),则您的代码容易受到 SQL 注入的攻击。强烈建议使用准备好的查询来避免这种情况。