Buongiorno a tutti,
ho un form di registrazione con vari dati(identificativi del'Utente e a quale Ufficio fa parte) che alcuni dati (username, password, nome, email) andranno nella tabella myphp users e altri (codice_dip, username, titolo, nome, direzione, area, unita, ufficio, ruolo, posizione) andranno nella tabella posizione.
premetto che prima esisteva solo la prima tabella(users) e andava tutto, ora mi restituisce un errore nella pagina register.php che vi allego, ho provato ha togliere la password e l'errore si ripete.
vi ricopio l'errore:
Le Credenziali sono state inviate alla casella e-mail .
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /membri/arrigo/php/register.php:88 Stack trace: #0 /membri/arrigo/php/register.php(88): PDOStatement->bindParam(':password', '$2y$10$LuGTj3Po...', 2) #1 {main} thrown in /membri/arrigo/php/register.php on line 88
Vi allego i 2 codici:
register.html
<!DOCTYPE html>
<html>
<head>
<link rel="icon" href="images/logo.ico" />
<title>Registrazione Utente</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans&display=swap">
<link rel="stylesheet" href="css/style-registrazione.css">
</head>
<body>
<form autocomplete="on" method="post" action="php/register.php">
<h1>Registrazione Utente</h1>
<input type="text" id="codice_dip" placeholder="Codice Dipendente" name="codice_dip" >
<input type="text" id="titolo" placeholder="Titolo" name="titolo" >
<input type="text" id="nome" placeholder="Nome" name="nome" required>
<input type="text" id="email" placeholder="E-mail" name="email" required>
<input type="text" id="username" placeholder="Username" name="username" maxlength="50" required>
<input type="hidden" id="password" value="1234" name="password" required >
<center>
<p>Direzione </p>
<select nome="direzione" id="direzione" size="5" required>
<option>Direzione Generale</option>
<option>Direzione Amministrativa</option>
<option>Direzione Commerciale</option>
<option>Direzione Risorse Umane ed Organizzazione</option>
<option>Direzione Sistemi Infdormativi Digitali</option>
</select>
<br>
<br>
</center>
<input type="text" id="area" placeholder="Area" name="area" >
<input type="text" id="unita" placeholder="Unita'" name="unita" >
<input type="text" id="ufficio" placeholder="Ufficio" name="ufficio">
<center>
<p> Ruolo </p>
<select nome="ruolo" id="ruolo" size="1">
<option>Amministrativo</option>
<option>Tecnico</option>
<option>Funzionario</option>
<option>Alta Professionalita'</option>
<option>Dirigente</option>
<option>Direttore</option>
<option>Direttore Operativo</option>
</select>
<p> Posizione </p>
<select nome="posizione" id="posizione" size="1" >
<option>Amministrativo</option>
<option>Tecnico</option>
<option>Funzionario</option>
<option>Dirigente</option>
</select>
</center>
<br>
<br>
<button type="submit" name="register">Crea</button>
</form>
</body>
</html>
register.php
<?php
require_once('database.php');
if (isset($_POST['register'])) {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
$nome = $_POST['nome'] ?? '';
$email = $_POST['email'] ?? '';
$codice_dip = $_POST['codice_dip'] ?? '';
$titolo = $_POST['titolo'] ?? '';
$direzione = $_POST['direzione'] ?? '';
$area = $_POST['area'] ?? '';
$unita = $_POST['unita'] ?? '';
$ufficio = $_POST['ufficio'] ?? '';
$ruolo = $_POST['ruolo'] ?? '';
$posizione = $_POST['posizione'] ?? '';
$isUsernameValid = filter_var(
$username,
FILTER_VALIDATE_REGEXP, [
"options" => [
"regexp" => "/^[a-z\d.]{3,20}$/i"
]
]
);
$pwdLenght = mb_strlen($password);
if (empty($username) || empty($password)) {
$msg = 'Compila tutti i campi %s';
} elseif (false === $isUsernameValid) {
$msg = 'Lo username non è valido. Sono ammessi solamente caratteri
alfanumerici e l\'underscore. Lunghezza minina 3 caratteri.
Lunghezza massima 20 caratteri';
} elseif ($pwdLenght < 3 || $pwdLenght > 20) {
$msg = 'Lunghezza minima password 3 caratteri.
Lunghezza massima 20 caratteri';
} else {
$password_hash = password_hash($password, PASSWORD_BCRYPT);
$query = "
SELECT id
FROM users
WHERE username = :username
";
$testo_mail="Registrazione Utente:\r\n
Credenziali Utente Registrato:\r\n
Nome:$nome\r\n
Username:$username\r\n
Password:$password";
/* creazione oggetto e testata mail */
$mail_headers = "From: XXXXXXXX <XXXXXXX@XXXXX.IT>\r\n";
$mail_headers .= "Reply-To: " . "XXXXXXXX@XXXXXXX.IT" . "\r\n";
$oggetto="Credenziali Utente: $username";
/* invio mail */
if(mail($email, $oggetto, $testo_mail, $mail_headers))
{echo 'Le Credenziali sono state inviate alla casella e-mail ', $email, ".
" ;}
else
{echo 'Problema riscontrato, E-mail non inviata.
';}
$check = $pdo->prepare($query);
$check->bindParam(':username', $username, PDO::PARAM_STR);
$check->execute();
$user = $check->fetchAll(PDO::FETCH_ASSOC);
if (count($user) > 0) {
$msg = 'Username già in uso %s';
} else {
$query = "
INSERT INTO users
VALUES (0, :username, :password, :nome, :email)
";
$query = "
INSERT INTO posizione
VALUES (:codice_dip, :username, :titolo, :nome, :direzione, :area, :unita, :ufficio, :ruolo, :posizione)
";
$check = $pdo->prepare($query);
$check->bindParam(':username', $username, PDO::PARAM_STR);
$check->bindParam(':password', $password_hash, PDO::PARAM_STR);
$check->bindParam(':nome', $nome, PDO::PARAM_STR);
$check->bindParam(':email', $email, PDO::PARAM_STR);
$check->bindParam(':codice_dip', $codice_dip, PDO::PARAM_STR);
$check->bindParam(':titolo', $titolo, PDO::PARAM_STR);
$check->bindParam(':direzione', $direzione, PDO::PARAM_STR);
$check->bindParam(':area', $area, PDO::PARAM_STR);
$check->bindParam(':unita', $unita, PDO::PARAM_STR);
$check->bindParam(':ufficio', $ufficio, PDO::PARAM_STR);
$check->bindParam(':ruolo', $ruolo, PDO::PARAM_STR);
$check->bindParam(':posizione', $posizione, PDO::PARAM_STR);
$check->execute();
if ($check->rowCount() > 0) {
$msg = '
Registrazione eseguita con successo <a href="../login.html">Vai alla Pagina di accesso</a> <a href="../register.html">Registra un altro Utente</a>';
} else {
$msg = 'Problemi con l\'inserimento dei dati %s';
}
}
}
printf($msg, '<a href="../register.html">torna indietro</a>');
}
Vi ringrazio in anticipo.