The thing is that I'm trying to insert users using PDO and CRUD and it's giving me an error that I can't solve.
The error is exactly this
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
File containing the form high_users.php:
<form action="administrar_usuario.php" method="POST">
<input type="text" name="nombre" placeholder="Nombre">
<input type="text" name="apellido" placeholder="Apellido">
<input type="text" name="dni" placeholder="DNI">
<input type="text" name="usuario" placeholder="Usuario">
<input type="password" name="contrasena" placeholder="Contraseña">
<input type="email" name="email" placeholder="Correo">
<input type="text" name="direccion" placeholder="Direccion">
<input type="text" name="cod_postal" placeholder="Codigo Postal">
<input type="tel" name="tel" placeholder="Teléfono">
<input type="text" name="fecha_nac" placeholder="Fecha nacimiento">
<input type="text" name="foto" placeholder="foto">
<input type="text" name="curso" placeholder="curso">
<input type='hidden' name='insertar' value='insertar'>
<!--Con esto ejecutamos la funcion de insertar-->
<select name="tipo">
<option value="1">Admin</option>
<option value="2">Administración</option>
<option value="3">Alumno</option>
<option value="4">Profesor</option>
</select>
<input type="submit" name="altaUsuario" value="Crear">
Controller manage_user.php:
<?php
include_once('crud_usuario.php');
include_once('class_usuarios.php');
$crud = new CrudUsuario();
$usuario = new Usuario();
if (isset($_POST['insertar'])) {
$usuario->setIdUsuario(NULL);
$usuario->setDni($_POST['dni']);
$usuario->setNombre($_POST['nombre']);
$usuario->setApellido($_POST['apellido']);
$usuario->setContrasena($_POST['contrasena']);
$usuario->setEmail($_POST['email']);
$usuario->setUsuario($_POST['usuario']);
$usuario->setDireccion($_POST['direccion']);
$usuario->setCodPostal($_POST['cod_postal']);
$usuario->setTel($_POST['tel']);
$usuario->setFechaNac($_POST['fecha_nac']);
$usuario->setFoto($_POST['foto']);
$usuario->setCurso($_POST['curso']);
$usuario->setTipo($_POST['tipo']);
$crud->insertar($usuario);
}
?>
File containing the crud, crud_usuario.php:
<?php
require_once('conexion.php');
class CrudUsuario{
//constructor de la clase
public function __contruct(){}
public function insertar($usuario){
$db=BaseDatos::conectar();
try {
$insert=$db->prepare('INSERT INTO Usuarios values(NULL,:dni,:nombre,:apellido,:contrasena,:email,:usuario,:direccion,:cod_postal,:telefono,:fecha_nac,:foto,:curso,:estado,:tipo)');
$insert->bindValue('id_usuario',$usuario->getIdUsuario());
$insert->bindValue('nombre',$usuario->getNombre());
$insert->bindValue('apellido',$usuario->getApellido());
$insert->bindValue('contrasena',$usuario->getContrasena());
$insert->bindValue('email',$usuario->getEmail());
$insert->bindValue('usuario',$usuario->getUsuario());
$insert->bindValue('direccion',$usuario->getDireccion());
$insert->bindValue('cod_postal',$usuario->getCodPostal());
$insert->bindValue('telefono',$usuario->getTel());
$insert->bindValue('fecha_nac',$usuario->getFechaNac());
$insert->bindValue('foto',$usuario->getFoto());
$insert->bindValue('curso',$usuario->getCurso());
$insert->bindValue('estado',$usuario->getEstado());
$insert->bindValue('tipo',$usuario->getTipo());
$insert->execute();
}
catch (PDOException $e) {
print $e->getMessage ();
}
}
}
?>
You have two errors in the code, one when preparing the SQL query between the data you are receiving, the ones you enter in the SQL query and the ones you assign with
bindValue
and the other when assigning the variables, you are forgetting the colon (put:dni
instead ofdni
in calls tobindValue
).You are putting
id_usuario
instead ofdni
in$insert->bindValue('id_usuario',$usuario->getIdUsuario());
. By doing it wrong you are causing the error that you get, that the parameterid_usuario
is not defined in the prepared query.I imagine that, based on the input data and the SQL, what you want is to associate the value
dni
and obtain it through$usuario->getDni()
.Proof:
Or, I would prefer: