Si mejoraras la estructura de tu aplicación, te resultaria más facil encontrar fallos, modificar cosas, agregar nuevas...
Lo ideal seria que crearas clases, pero si no sabes entonces puedes crear simples funciones en un archivo funciones.php (todas juntas).
Primero comprueba que no haya ningún problem con el user input:
- Comprobar si hay campos vacios (
comprobado).
- Comprobar que no haya input malicioso (
no comprobado).
- Comprobar que las contraseñas coincidan (
comprobado).
- Etc...
Y una vez todas las comprobaciones "pre-insert" se hayan validado, se llama a la función, y esta devuelve el resultado (mensaje para el usuario informandole de que se registró correctamente o false indicando que algo salió mal)
.
Otra cosa muy importante, es usar sentencias preparadas para añadir una importante capa de seguridad.
Te dejo un ejemplo de como usarlas con varias funciónes creadas a partir de tú código y otra función que vas a necesitar en tus formularios:
funciones.php
require('conexion_bd.php');
function isNotEmpty($array, $whiteList) {
foreach ($whiteList as $val) {
if (empty($array[$val])) { return false;
}
}
return true;
}
function verificar_user($nombre) {
if ($stmt = $conexion->prepare('SELECT usuario FROM usuarios WHERE usuario = ? LIMIT 1')) {
$stmt->bind_param('s', $nombre);
$stmt->store_result();
if ($stmt->num_rows === 1) {
// 'Este usuario ya ha sido registrado anteriormente.'
$exit = 'Nombre de usuario ya en uso. Por favor, introduzca otro nombre válido.';
} else $exit = FALSE;
}
return $exit;
}
function registrar_usuario($user_info) {
if ($stmt = $conexion->prepare('INSERT INTO usuario (nombre, apellido, email, usuario, password)
VALUES (?, ?, ?, ?, ?)')) {
$stmt->bind_param('sssss', $user_info['nombre'], $user_info['apellido'], $user_info['email'], $user_info['usuario'], $user_info['password']);
if ($stmt->execute()) {
$exit = 'Usted se ha registrado correctamente.'
} else $exit = FALSE;
}
return $exit;
}
function otra_funcion() {
// code
}
La función isNotEmpty() devolverá false cuando encuentre una variable vacia y se mostrará el error en el formulario.
Por preferencia, primero deberías poner el php y luego el html:
<?php
if (isset($_POST['enviar'])) {
require('funciones.php');
$mensaje = NULL;
$whiteList = ['nombre', 'apellido', 'email', 'reemail', 'usuario', 'password', 'repassword'];
if (isNotEmpty($_POST, $whiteList) === FALSE) {
$mensaje = 'Error. Asegúrese de haber cubierto todos los campos.';
} else {
$user_info = [];
foreach ($whiteList as $val) {
$user_info[$val] = $_POST[$val]; // aquí puedes hacer lo que prefieras (filter_input, preg_match, preg_replace, etc...)
}
$mensaje = verificar_user($user_info['nombre']);
if ($mensaje === FALSE) {
if ($user_info['password'] == $user_info['repassword']) {
$mensaje = registrar_usuario($user_info);
$mensaje = $mensaje ?
header('Location: /index.html?mensaje=' . $mensaje) : 'Ha habido un problema al registrar el usuario, intentelo más tarde.';
} else $mensaje = 'Las claves no son iguales, intente nuevamente.';
}
}
}
if ($mensaje) {
echo $mensaje;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="Text/HTML" charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Nombre página</title>
<link type="text/css" rel="stylesheet" media="all" href="css/style.css" />
<script type="text/javascript" src="js/scripts.js"></script>
</head>
<body>
<header>
</header>
<main>
<form action="" method="POST" class="registro" action="">
<div>
<label>Nombre:</label>
<input type="text" name="nombre"></div><br />
<label>Apellido:</label>
<input type="text" name="apellido"></div><br /><br />
<label>Correo-e:</label>
<input type="email" name="email"></div><br /><br />
<label>Repetir Correo-e:</label>
<input type="email" name="reemail"></div><br /><br />
<label>Usuario:</label>
<input type="text" name="usuario"></div><br /><br />
<div><label>Contraseña:</label>
<input type="password" name="password"></div> <br /><br />
<div><label>Repetir Contraseña:</label>
<input type="password" name="repassword"></div> <br /><br />
<div>
<input type="submit" name="enviar" value="Registrar"></div>
</form>
</main>
<footer>
</footer>
</body>
</html>