簡體   English   中英

查詢多次給出相同的結果

[英]query gives the same result multiple times

我正在做一個 CRUD 並且我正在做編輯部分,我有多個通過外鍵相互關聯的表,例如表 'empleados' 具有屬於 usuarios 表的外鍵 'rela_usuarios' 和我不知道如何關聯它們,所以我將 usuarios 的查詢保存在一個變量中,並將其作為外鍵放在 empleados 上。 這是問題嗎?這是另一回事嗎?

$ididEm= $_POST['idEm'];
$idPer=$_POST['idPer'];
$apellido= $_POST['apellido'];
$nombre= $_POST['nombre'];
$usuario= $_POST['usuario'];
$contraseña= $_POST['contraseña'];
$tipoCon= $_POST['tipoCon'];
$valCon= $_POST['valCon'];
$id_perfil=2;
$id_per_estado=1;


$sql="UPDATE personas " 
 ." SET nombre='$nombre', apellido='$apellido'"
 ." WHERE id_persona=".$idPer;
mysqli_query($conexion, $sql);

$sql="UPDATE tipocontacto"
." SET tipo_decontacto=$tipoCon";
mysqli_query($conexion, $sql);

$sql="UPDATE persona_contacto "
."SET rela_persona=$idPer,id_tipocontacto=$tipoCon, valor='$valCon' ";
mysqli_query($conexion, $sql);

$sql="UPDATE usuarios "
."SET username='$usuario', password='$contraseña', id_perfil=$id_perfil, id_persona=$idPer ";
$rela_usuario=mysqli_query($conexion, $sql);


$sql="UPDATE empleados "
."SET rela_persona=$idPer, id_per_estado=$id_per_estado, rela_usuario=$rela_usuario "
." WHERE id_empleado=".$idEm;

mysqli_query($conexion, $sql);

此外,當我執行此操作時,所有其他記錄都被刪除並被上次更新替換

這是桌子的來源

$sql = "SELECT empleados.`id_empleado`, personas.`id_persona`,apellido, nombre, tipocontacto. id_tipocontacto,`tipo_decontacto`, persona_contacto.`valor`,
usuarios.`id_usuario`,`username`,`password`, perfiles.id AS 'id_perfil', descripcion  
FROM empleados "
."INNER JOIN personas ON empleados.rela_persona=personas.`id_persona` "
."INNER JOIN persona_contacto ON personas.`id_persona`=persona_contacto.`rela_persona` "
."INNER JOIN tipocontacto ON persona_contacto.`id_tipocontacto`=tipocontacto.`id_tipocontacto` "
."INNER JOIN usuarios ON empleados.`rela_usuario`=usuarios.`id_usuario` "
."INNER JOIN perfiles ON usuarios.`id_perfil`=perfiles.`id`  ";

當您的 SELECT 正確時,您可以執行以下代碼,它使用 mysqli 准備好的帶參數的 Statments,這可以防止 sql 注入。

像所有的代碼,這一點必須用測試數據第一測試,以驗證所有工作按預期。

Wesley Smith 也在評論中解釋說你不應該將密碼保存純文本

所以請閱讀https://www.php.net/manual/en/faq.passwords.phphttps://dev.to/anastasionico/good-practices-php-security-how-to-manage-password-18bm

我已經在下面的代碼中使用了密碼散列,請參閱如何在自己的代碼中驗證它的文章

$ididEm= $_POST['idEm'];
$idPer=$_POST['idPer'];
$apellido= $_POST['apellido'];
$nombre= $_POST['nombre'];
$usuario= $_POST['usuario'];
$contraseña= =password_hash($_POST['contraseña'], PASSWORD_DEFAULT);
$tipoCon= $_POST['tipoCon'];
$valCon= $_POST['valCon'];
$id_perfil=2;
$id_per_estado=1;
$query = "UPDATE empleados 
INNER JOIN personas ON empleados.rela_persona=personas.`id_persona` 
INNER JOIN persona_contacto ON personas.`id_persona`=persona_contacto.`rela_persona` 
INNER JOIN tipocontacto ON persona_contacto.`id_tipocontacto`=tipocontacto.`id_tipocontacto` 
INNER JOIN usuarios ON empleados.`rela_usuario`=usuarios.`id_usuario`
INNER JOIN perfiles ON usuarios.`id_perfil`=perfiles.`id`
SET personas.nombre=?,personas.apellido=?
,tipocontacto.tipo_decontacto=?
,persona_contacto.rela_persona=?,persona_contacto.id_tipocontacto=?, persona_contacto.valor=? 
,usuarios.username=?, usuarios.password=?, usuarios.id_perfil=?, usuariosid_persona=? 
,empleados.rela_persona=?, empleados.id_per_estado=?, empleados.rela_usuario=?
WHERE id_empleado=?;"

if ($stmt = mysqli_prepare($conexion, $query)) {
    mysqli_stmt_bind_param($stmt, "ssiiisssiiiiii",$nombre,$apellido,$tipoCon,$idPer,$tipoCon,$valCon,$usuario,$contraseña,$id_perfil,$idPer,$idPer,
    $id_per_estado,$rela_usuario,$idEm);

    /* Anweisung ausführen */
    mysqli_stmt_execute($stmt);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM