the problem I have is the following: I have a form to register in a web, which must send data to two tables (users_data and users_login). The users_data table has as PK idUser The users_login table has as FK idUser, to relate it with users_data. How can I do so that when filling the form, it sends each data to its corresponding table? I attach the code below
HTML - FORM
<div class="container-form">
<h4>REGISTRO DE USUARIO</h4>
<form class="form" method="post" action="./router.php">
<label>Nombre</label>
<input class="controls" type="text" name="nombre" placeholder="Ingrese su nombre" required>
<label>Apellidos</label>
<input class="controls" type="text" name="apellidos" placeholder="Ingrese sus apellidos" required>
<label>Correo electrónico</label>
<input class="controls" type="email" name="email" placeholder="Ingrese su correo electrónico" title="example@example.com" required>
<label>Teléfono</label>
<input class="controls" maxlength="9" minlength="9" name="telefono" title="Sólo números" type="tel" placeholder="Ingrese su número de teléfono" required pattern="[0-9]+">
<label>Fecha de nacimiento</label>
<input class="controls" type="date" name="fnac" placeholder="Ingrese su fecha de nacimiento" required title="DD/MM/YYYY">
<label>Dirección</label>
<input class="controls" type="text" name="direccion" placeholder="Ingrese su dirección">
<label>Sexo</label>
<input class="controls" type="text" name="sexo" placeholder="Ingrese su sexo">
<label>Contraseña</label>
<input class="controls" type="password" name="contrasena" required>
<input class="btn btn-outline-primary btn-lg w-100 mt-4" type="submit" name="registrarse" value="Registrarme">
</form>
<div class="text-center mt-3">
<p>¿Ya tienes una cuenta?</p>
<a class="text-center" href="./login.php">Inicia sesión aqui</a>
</div>
</div>
const SERVIDOR = 'localhost';
const BD = 'trabajo_final_php';
const USUARIO = 'root';
const PASSWORD = 'root';
class DB
{
public static function conn()
{
// conexión a la base de datos
try {
$conn = new PDO("mysql:host=" . SERVIDOR . ";dbname=" . BD, USUARIO, PASSWORD);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $conn;
} catch (PDOException $e) {
echo 'HA FALLADO LA CONEXIÓN: ' . $e->getMessage();
}
}
/**
* Comprueba que un usuario existe en la DB y devuelve un array de objetos con los registros de la tupla (id,nombre,email,contrasena,rol)
* @param type $email;
* @return array
*/
public static function comprobarUsuario($email)
{
$result = [];
$conexion = self::conn();
$sentencia = "SELECT * FROM users_data WHERE email = :email";
$consulta = $conexion->prepare($sentencia);
$consulta->execute(array(":email" => $email));
while ($fila = $consulta->fetch(PDO::FETCH_OBJ)) {
array_push($result, $fila);
}
$consulta->closeCursor();
$conexion = null;
return $result;
}
/**
* Comprueba que un usuario existe en la DB y devuelve un array de objetos con los registros de la tupla (id,nombre,email,contrasena,rol)
* @param type $id;
* @return array
*/
public static function buscarId($id)
{
$result = [];
$conexion = self::conn();
$sentencia = "SELECT * FROM users_data WHERE id = :id";
$consulta = $conexion->prepare($sentencia);
$consulta->execute(array(":id" => $id));
while ($fila = $consulta->fetch(PDO::FETCH_OBJ)) {
array_push($result, $fila);
}
$consulta->closeCursor();
$conexion = null;
return $result;
}
/**
* inserta usuario en la tabla users_data (registro)
* @param type $nombre; @param type $apellidos; @param type $email; @param type $telefono;
* @param type $fnac; @param type $direccion; @param type $sexo; @param type $contrasena;
*/
public static function registrar($nombre, $apellidos, $email, $telefono, $fnac, $direccion, $sexo)
{
$conexion = self::conn();
$sentencia = "INSERT INTO users_data (nombre, apellidos, email, telefono, fnac, direccion, sexo) VALUES (:nombre, :apellidos, :email, :telefono, :fnac, :direccion, :sexo)";
$consulta = $conexion->prepare($sentencia);
$consulta->bindParam(":nombre", $nombre);
$consulta->bindParam(":apellidos", $apellidos);
$consulta->bindParam(":email", $email);
$consulta->bindParam(":telefono", $telefono);
$consulta->bindParam(":fnac", $fnac);
$consulta->bindParam(":direccion", $direccion);
$consulta->bindParam(":sexo", $sexo);
$consulta->execute();
$consulta->closeCursor();
$conexion = null;
}
/**
* inserta en la tabla users_login
* @param type $contrasena
* @param type $rol
*/
public static function loginUsers($contrasena, $rol)
{
$conexion = self::conn();
$sentencia = "INSERT INTO users_login (contrasena, rol) VALUES (:contrasena, :rol)";
$rol = "user";
$consulta = $conexion->prepare($sentencia);
$consulta->bindParam(":contrasena", $contrasena);
$consulta->bindParam(":rol", $rol);
$consulta->execute();
$consulta->closeCursor();
$conexion = null;
}
}
include './DB.php';
class ControllerLogin
{
public function __construct()
{
session_start();
}
/**
* inserta usuario en users_data (registro) si no lo esta ya registrado
* @param type $nombre; @param type $apellidos; @param type $email; @param type $telefono;
* @param type $fnac; @param type $direccion; @param type $sexo; @param type $contrasena;
*/
public function registrarUsuario($nombre, $apellidos, $email, $telefono, $fnac, $direccion, $sexo, $contrasena, $rol)
{
$result = $this->buscarUsuario($email);
if ($result[0]) {
header('location:registro.php?registro=ko');
exit();
} else {
DB::registrar($nombre, $apellidos, $email, $telefono, $fnac, $direccion, $sexo, $contrasena);
DB::loginUsers($contrasena, $rol);
$user = DB::comprobarUsuario($email);
$_SESSION['usuario'] = [$user[0]->id, $user[0]->nombre, $user[0]->rol];
header('location:./ControlPanel.php?registro=ok');
}
}
/**
* comprueba el login con el email y la contraseña
* @param type $email;
* @param type $contrasena;
* @return type
*/
public function comprobarUsuario($email, $contrasena = null)
{
// si encuentra el usuario la variable found devuelve true
$found = false;
$result = DB::comprobarUsuario($email);
if (count($result) === 1) {
if ($email === $result[0]->email && password_verify($contrasena, $result[0]->contrasena)) {
$found = true;
}
}
return [$found, ['id' => $result[0]->id, 'rol' => $result[0]->rol]];
}
/**
* devuelve true si encuentra el usuario mediante el email
* @param type $email;
* @return type
*/
public function buscarUsuario($email)
{
$found = false;
$result = DB::comprobarUsuario($email);
if (count($result) === 1) {
$found = true;
}
return [$found];
}
}
include './controllerLogin.php';
if (isset($_POST['registrarse'])) {
$nombre = htmlspecialchars($_POST['nombre']);
$apellidos = htmlspecialchars($_POST['apellidos']);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$telefono = filter_input(INPUT_POST, 'telefono', FILTER_SANITIZE_NUMBER_INT);
$fnac = htmlspecialchars($_POST['fnac']);
$direccion = htmlspecialchars($_POST['direccion']);
$sexo = htmlspecialchars($_POST['sexo']);
$pass = htmlspecialchars($_POST['contrasena']);
$contrasena = password_hash($pass, PASSWORD_BCRYPT);
$reg = new ControllerLogin();
$reg->registrarUsuario($nombre, $apellidos, $email, $telefono, $fnac, $direccion, $sexo, $contrasena, $rol);
unset($reg);
}
MYSQL
users_data contains the following data: idUser(PK), nombre, apellidos, email, telefono, fecha de nacimiento, direccion, sexo
users-login contains the following data: idLogin(PK), idUser(FK), usuario, contrasena, rol
in the users_login table, I would like the 'usuario' data to be the 'email' with which you register and insert in the users_data table
How can I insert each data in its corresponding table? thank you in advance :)
I don't understand how to do this