8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai un code erreur sur une requette préparée et je n'arrive pas à savoir ce qui cloche :

<?php
	//déclaration des variables à ajouter à la base :
		$nomimage = "{$_POST['titre']}.png";
		$date = $_POST['dateconcert'];
		$nomconcert = $_POST['nomconcert'];
		$adresse = $_POST['adresseconcert'];
		$lien = $_POST['lienconcert'];
					
	include('../database.php'); //= connexion à la base via les fichiers prédéfinis

	//requette préparée pour inserée les données saisies en récupérant les variables
		$req = $bd->prepare('INSERT INTO Table_dates_concerts ( nomimagedate, date, nomconcert, adresse, lien ) VALUES( :nomimage, :date, :nomconcert, :adresse, :lien )');
		$req->execute(array(
			'nomimagedate' => $nomimage,
			'date' => $date,
			'nomconcert' => $nomconcert,
			'adresse' => $adresse,
			'lien' => $lien
		));
?>


Par avance, je vous remercie vivement de votre aide.
Voici le message d'erreur :

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in /homepages/5/d443982591/htdocs/admin/concerts_admin.php:95 Stack trace: #0 /homepages/5/d443982591/htdocs/admin/concerts_admin.php(95): PDOStatement->execute(Array) #1 {main} thrown in /homepages/5/d443982591/htdocs/admin/concerts_admin.php on line 95

Merci d'avance
L'as tu lu ce message d'erreur? Parce qu'il te donne quand même pas mal d'indications, du moins des pistes.
J'avoue que j'ai un peu de mal avec l'anglais.
Apparemment, il y a problème sur le nombre de paramètres.
Si je comprend bien, il y en a un qui commence a 1 et un autre a zéro. Je ne sais pas trop pourquoi...

J'ai essayé de changer les noms de mes colonnes. Au départ j'avais nom_image_date que j'ai transformé en nomimagedate. J'avais la colonne nom a la place de nomconcert. J'ai vérifié les fautes d'orthographe etc...

Et y'a cette histoire de 5 que je ne sais pas a quoi ça correspond.

Je patauge? Ok je me noie. Lol

J'ai essayé de chercher la solution a cette erreur sur Google, mais bien souvent il s'agit d'une faute de frappe. Sauf si je suis vraiment fatigué, il ne me semble pas en avoir fait.

Bref, je sais pas quoi faire.
Et si c'est parce qu'il me manquait une valeur ?

Quand je charge ma page, j'ai l'erreur qui s'affiche. Je pense que c'est normal vue que je ne fait pas la vérifications des champs et si tout va bien seulement, le traitement de ma requête.
Le traitement se fait tout de suite.

Je vais mettre la vérification des champs dans une condition et si tout est ok, passer ma requête.

Du coup mes variables sont vides, d'où l'absence de paramètre peut être.
Modifié par Alexbass (09 Oct 2014 - 08:37)
Le message d'erreur ne te dit pas qu'il y a un mauvais nombre d'arguments mais qu'il ne trouve pas l'argument à binder. Si tu n'as pas de faute de frappe, il te manque effectivement quelque chose...

Dans ton execute, il te faut mettre les ":" aussi:


$req = $bd->prepare('INSERT INTO Table_dates_concerts ( nomimagedate, date, nomconcert, adresse, lien ) VALUES( :nomimage, :date, :nomconcert, :adresse, :lien )');
		$req->execute(array(
			':nomimage' => $nomimage,
			':date' => $date,
			':nomconcert' => $nomconcert,
			':adresse' => $adresse,
			':lien' => $lien
		));

Modifié par jacqueminv (09 Oct 2014 - 11:11)
Aie, j'ai toujours mon erreur :

Fatal error : Uncaught exception 'PDOException »avec le message' SQLSTATE [HY093]: nombre de paramètre non valide: le paramètre n'a pas été défini" dans /homepages/5/d443982591/htdocs/admin/concerts_admin.php:161 Stack trace: # 0 / pages d'accueil / 5 / d443982591 / htdocs / admin / concerts_admin.php (161): PDOStatement-> execute (Array) # 1 {main} jeté dans /homepages/5/d443982591/htdocs/admin/concerts_admin.php en ligne 161

Les tests peuvent ce faire via ce lien :
http://www.theviewers.fr/admin/concerts_admin.php

Les images seront supprimées et si on arrive à insérer des données dans la table mysql, pas de panique, c'est une table test qui sera supprimée après mise en production.
J'ai réussi en changeant le nom de ma colonne "nomimagedate" en "nomimage".

Le code devient donc :

//déclaration des variables à ajouter à la base :
	$nomimage = "{$_POST['titre']}.png";
	$date = $_POST['dateconcert'];
	$nomconcert = $_POST['nomconcert'];
	$adresse = $_POST['adresseconcert'];
	$lien = $_POST['lienconcert'];
					
include('../database.php'); //= connexion à la base via les fichiers prédéfinis

//requette préparée pour inserée les données saisies en récupérant les variables
	$req = $bd->prepare('INSERT INTO test (nomimage, date, nomconcert, adresse, lien) VALUES(:nomimage, :date, :nomconcert, :adresse, :lien)');
	$req->execute(array(
		'nomimage' => $nomimage,
		'date' => $date,
		'nomconcert' => $nomconcert,
		'adresse' => $adresse,
		'lien' => $lien
	));


Merci de votre aide.
Je reviendrais surrement dès que je vais attaquer la partie modification d'une date de concert. Smiley smile
Tu as bien vérifié que les paramètres dans le insert correspondent à ceux dans le execute? Je dis ça parce que en écrivant ma réponse précédente j'ai vu que "nomimage" était utilisé dans le insert mais "nomimagedate" dans le execute...
Je pense qu'il faut faire correspondre le noms des variables aux nom des colonnes de la table sql.
Non, ce qui est important c'est que le nom du paramètre utilisé dans la requête soit le même que le nom du paramètre utilisé dans le execute. Ta variable php peut être nommée n'importe comment.
Tu as complètement raison.

la première partie de prépare correspond au nom des colonnes de la table.
La second partie (VALUES), permet via l'array, de définir les valeurs de chaque paramètre.

Ainsi, dans l'execute, il faut faire correspondre les VALUES et les variables qui contiennent les valeurs.
Les noms des colonnes de la table n'interviennent pas dans l'execute.

Ce que je n'avais pas saisi au départ. Smiley smile
Modifié par Alexbass (09 Oct 2014 - 12:08)
Je clos ce sujet, j'en ouvre un autre pour améliorer ma page d'ajout de données.
Merci beaucoup déjà pour l'aide apportée.