SQLSTATE[HY093]: Invalid parameter number: parameter was not de
Résolu
chabinot
Messages postés
391
Statut
Membre
-
chabinot Messages postés 391 Statut Membre -
chabinot Messages postés 391 Statut Membre -
Bonjour,
Voici les sources :
1 - profile.php
2 - Source du formulaire :
3 - Source de la classe Database.php
Image de la table users

Et enfin le message que j'ai quand je lance le formulaire :
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in D:\serveur\www\boom\class\Database.php:29 Stack trace: #0 D:\serveur\www\boom\class\Database.php(29): PDOStatement->execute(Array) #1 D:\serveur\www\boom\profile.php(46): Database->prepare('UPDATE users\r\n ...', Array) #2 {main} thrown in D:\serveur\www\boom\class\Database.php on line 29
J'ai beau retourné le problème dans tous les sens, je ne trouve pas l'erreur que j'ai pu faire.
Si vous avez une idée ?
Cordialement
Voici les sources :
1 - profile.php
// Traitement du formulaire soumis
if (isset($_POST['update'])) {
// Tous les champs ont été remplis ?
if (not_empty(['name', 'city', 'country', 'sex', ])) {
extract($_POST);
$req = $bdd->prepare(
"UPDATE users
SET name = :name, city = :city, country = :country,
sex = :sex, twitter = :twitter, github = :github,
available_for_hiring = :available_for_hiring, bio = :bio
WHERE id = :id",
['name' => $name, 'city' => $city, 'country => $country',
'sex' => $sex, 'twitter' => $twitter, 'github' => $github,
'available_for_hiring' => !empty($available_for_hiring) ? '1' : '0',
'bio' => $bio, 'id' => get_session('user_id')
]);
set_flash("Votre profil a été mis à jour", "success");
} else {
$error = $errors->setError("Veuillez remplir tous les champs marqués d'un (*).");
save_input_data();
}
}
2 - Source du formulaire :
<form data-parsley-validate method="post" autocomplete="off">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="name">Nom <span class="text-danger">*</span></label>
<input type="text" name="name" id="name" class="form-control" placeholder="Votre nom" required="required">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="city">Ville <span class="text-danger">*</span></label>
<input type="text" name="city" id="city" class="form-control" placeholder="Ville" required="required">
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="country">Pays <span class="text-danger">*</span></label>
<input type="text" name="country" id="country" class="form-control" placeholder="Pays" required="required">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="sex">Genre <span class="text-danger">*</span></label>
<select name="sex" id="sex" class="form-control" required="required">
<option value="H">Homme</option>
<option value="F">Femme</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="twitter">Twitter</label>
<input type="text" name="twitter" id="twitter" class="form-control">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="github">Github</label>
<input type="text" name="github" id="github" class="form-control">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="available_for_hiring"></label>
<input type="checkbox" name="available_for_hiring" id="available_for_hiring">
Disponible pour emploi?
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="bio">Biographie <span class="text-danger">*</span></label>
<textarea name="bio" id="bio" cols="30" rows="10" class="form-control" placeholder="Je suis amoureux de la programmation..." required="required"></textarea>
</div>
</div>
</div>
<input type="submit" class="btn btn-primary" value="Valider" name="update">
</form>
3 - Source de la classe Database.php
<?php
class Database
{
private $db_host = 'localhost';
private $db_name = 'boom';
private $db_port = 3309;
private $db_charset = 'utf8';
private $db_user = 'root';
private $db_password = '';
private $dsn;
private $pdo;
private $error;
public function __construct()
{
$this->dsn = "mysql:host={$this->db_host};dbname={$this->db_name};port={$this->db_port};charset={$this->db_charset}";
try {
$this->pdo = new PDO($this->dsn, $this->db_user, $this->db_password);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo $this->error = 'Erreur: ' . $e->getMessage();
}
}
public function prepare(String $stmt, Array $fields = []) {
$req = $this->pdo->prepare($stmt);
var_dump($fields);
$req->execute($fields);
return $req;
}
public function is_already_in_use(String $field, String $value, String $table):bool
{
$req = $this->pdo->prepare("SELECT id FROM $table WHERE $field = ?");
$req->execute([$value]);
$count = $req->rowCount();
$req->closeCursor();
return $count;
}
}
Image de la table users
Et enfin le message que j'ai quand je lance le formulaire :
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in D:\serveur\www\boom\class\Database.php:29 Stack trace: #0 D:\serveur\www\boom\class\Database.php(29): PDOStatement->execute(Array) #1 D:\serveur\www\boom\profile.php(46): Database->prepare('UPDATE users\r\n ...', Array) #2 {main} thrown in D:\serveur\www\boom\class\Database.php on line 29
J'ai beau retourné le problème dans tous les sens, je ne trouve pas l'erreur que j'ai pu faire.
Si vous avez une idée ?
Cordialement
A voir également:
- Uncaught pdoexception: sqlstate[hy093]: invalid parameter number: parameter was not defined
- Sqlstate[hy093]: invalid parameter number: parameter was not defined ✓ - Forum PHP
- Invalid bios image ✓ - Forum BIOS
- Invalid signature detected check secure boot policy in setup - Forum Windows 10
- Hard disk serial number changer - Télécharger - Personnalisation
- Sqlstate[hy093]: invalid parameter number: number of bound variables does not match number of tokens ✓ - Forum PHP