Lo
Lo
<head>
<meta name="viewport" content="width=device-width">
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="css/bootstrap.css" type="text/css" media="all">
<link rel="stylesheet" href="css/tbapi.css" type="text/css" media="all">
<link rel="stylesheet" href="css/.css">
</head>
<body>
<div class="container mb-4">
<a href="php/cerrar.php" class="btn-danger btn my-2"> Cerrar cesión</a>
<div id="dataList_wrapper" class="dt-container dt-bootstrap5">
<div class="row mt-2 justify-content-between">
<div class="d-md-flex justify-content-between align-items-center dt-layout-
start col-md-auto me-auto">
<div class="dt-length">
<select aria-controls="dataList" class="form-select form-select-sm" id="dt-
length-0"><option value="10">10</option><option value="25">25</option><option
value="50">50</option><option value="100">100</option></select>
<label for="dt-length-0"> entries per page</label>
</div>
</div>
<div class="d-md-flex justify-content-between align-items-center dt-layout-end
col-md-auto ms-auto">
<div class="dt-search">
<label for="dt-search-0">Search:</label>
<input type="search" class="form-control form-control-sm" id="dt-search-0"
placeholder="" aria-controls="dataList">
</div>
</div>
</div>
<div class="row mt-2 justify-content-between dt-layout-table">
<div class="d-md-flex justify-content-between align-items-center col-12 dt-
layout-full col-md">
<div id="dataList_processing" class="dt-processing card" role="status"
style="display: block;">
<div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<table id="dataList" class="table table-striped nowrap w-100 dataTable dtr-
inline" aria-describedby="dataList_info">
<colgroup>
<col data-dt-column="0">
<col data-dt-column="1">
<col data-dt-column="2">
<col data-dt-column="3">
<col data-dt-column="4">
</colgroup>
<thead bgcolor="#6cd8dc">
<tr class="">
<th data-dt-column="0" rowspan="1" colspan="1" class="dt-orderable-asc dt-
orderable-desc dt-ordering-asc" aria-sort="ascending"><span class="dt-column-
title">Id</span><span class="dt-column-order" role="button" aria-label="Id:
Activate to invert sorting" tabindex="0"></span></th>
<th data-dt-column="1" rowspan="1" colspan="1" class="dt-orderable-asc dt-
orderable-desc"><span class="dt-column-title">Usuario</span><span class="dt-column-
order" role="button" aria-label="Usuario: Activate to sort"
tabindex="0"></span></th>
<th data-dt-column="2" rowspan="1" colspan="1" class="dt-orderable-asc dt-
orderable-desc"><span class="dt-column-title">correo</span><span class="dt-column-
order" role="button" aria-label="correo: Activate to sort"
tabindex="0"></span></th>
<th data-dt-column="3" rowspan="1" colspan="1" class="dt-orderable-asc dt-
orderable-desc"><span class="dt-column-title">contrasena</span><span class="dt-
column-order" role="button" aria-label="contrasena: Activate to sort"
tabindex="0"></span></th>
<th data-dt-column="4" rowspan="1" colspan="1" class="dt-orderable-
none"><span class="dt-column-title">iv</span><span
class="dt-column-order"></span></th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="5" class="dt-empty">Loading...</td>
</tr>
</tbody>
<tfoot>
<tr>
<th data-dt-column="0" rowspan="1" colspan="1"><span class="dt-column-
title">Id</span></th>
<th data-dt-column="1" rowspan="1" colspan="1"><span class="dt-column-
title">Usuario</span></th>
<th data-dt-column="2" rowspan="1" colspan="1"><span class="dt-column-
title">correo</span></th>
<th data-dt-column="3" rowspan="1" colspan="1"><span class="dt-column-
title">contrasena</span></th>
<th data-dt-column="4" rowspan="1" colspan="1"><span class="dt-column-
title">iv</span></th>
</tr>
</tfoot>
</table>
</div>
</div>
<div class="row mt-2 justify-content-between">
<div class="d-md-flex justify-content-between align-items-center dt-layout-
start col-md-auto me-auto">
<div class="dt-info" aria-live="polite" id="dataList_info"
role="status"></div>
</div>
<div class="d-md-flex justify-content-between align-items-center dt-layout-end
col-md-auto ms-auto">
<div class="dt-paging">
<nav aria-label="pagination"></nav>
</div>
</div>
</div>
</div>
</div>
<script>
// Initialize DataTables API object and configure table
var table = $("#dataList").DataTable({
processing: true,
serverSide: true,
responsive: true,
ajax: "server/fetchData.php",
// responsive: true,
columnDefs: [{ orderable: false, targets: 4 }]
})
$(document).ready(function () {
// Draw the tble
table.draw()
})
</script>
</body>
</html>
initComplete: function () {
this.api()
.columns()
.every(function () {
var column = this
var title = column.footer().textContent
column.search(this.value).draw()
}
})
})
}
$('#example').DataTable({
initComplete: function () {
this.api()
.columns()
.every(function () {
var column = this;
var title = column.footer().textContent;
try {
if (strlen($usuario) < 3) {
// Validaciones adicionales del lado del servidor (ejemplos)
$data = [
"data" => "El campo Usuario requiere al menos 3 carácteres",
];
echo json_encode($data);
exit();
}
if (!filter_var($correo, FILTER_VALIDATE_EMAIL)) {
errorjson("E-mail no válido", "El servidor no valida este correo:
$correo");
$conn = null;
exit();
}
if (strlen($contrasena) < 6) {
errorjson("No admitido", "Se requiere al menos 6 carácteres");
$conn = null;
exit();
}
$comprobar_usuario = $conn->prepare(
"SELECT * FROM usuarios WHERE usuario = :usuario",
);
$comprobar_usuario->bindParam(":usuario", $usuario);
$comprobar_usuario->execute();
$test_usuario = $comprobar_usuario->fetchaLl(PDO::FETCH_ASSOC);
if ($test_usuario) {
// Usuario encontrad
errorjson("Ya existe", " Se ha detectado un doble de este usuario:
$usuario");
$conn = null;
exit();
}
$comprobar_correo = $conn->prepare(
"SELECT * FROM usuarios WHERE correo = :correo",
);
$comprobar_correo->bindParam(":correo", $correo);
$comprobar_correo->execute();
$test_correo = $comprobar_correo->fetchaLl(PDO::FETCH_ASSOC);
if ($test_correo) {
// correo encontrado
errorjson("Ya existe", "Se ha detectado otro doble de este correo:
$correo");
$conn = null;
exit();
}
// Cifrado de correo (OpenSSL)
$clave = openssl_random_pseudo_bytes(32); // Genera una clave segura
$semilla = openssl_random_pseudo_bytes(16); // Genera un IV seguro
//crear los datos encriptados a partir de los cifrados generados
$correo_encriptado = openssl_encrypt(
$correo,
"AES-256-CBC",
$clave,
0,
$semilla,
);
$clave_hexadecimal = bin2hex($clave);
$semilla_hexadecimal = bin2hex($semilla);
// Hash de contraseña
$contrasena_hash = password_hash($contrasena, PASSWORD_DEFAULT);
$correo_original = $correo;
// Insertar en la base de datos
$stmt = $conn->prepare(
"INSERT INTO usuarios (usuario, correo, contrasena, clave_cifrado, iv,
correo_e) VALUES (?, ?, ?, ?, ?, ?)",
);
$stmt->execute([
$usuario,
$correo_original,
$contrasena_hash,
$clave_hexadecimal,
$semilla_hexadecimal,
$correo_encriptado,
]);
$id_usuario_insertado = $conn->lastInsertId();
?>