Menu

Erreur Unknown Requète SQL [Résolu]

LaChaux78 291 Messages postés lundi 25 juillet 2016Date d'inscription 27 mai 2018 Dernière intervention - 11 déc. 2017 à 23:26 - Dernière réponse : yg_be 5631 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 27 mai 2018 Dernière intervention
- 14 déc. 2017 à 21:30
Bonjour,
Avec ma requète j'ai un message d'erreur que je n'arrive pas à résoudre, pouvez-vous me donner votre avis s'ils vous plait. Je vous remercie.
$requete = "SELECT nom,prenom,email,annee,".TBMANIF.".publier
FROM ".TBADH."
LEFT JOIN ".TBPERS."
ON ".TBPERS.".idpers = ".TBADH.".idpers
WHERE ".TBMANIF.".publier = false
AND annee = '$aadh'
AND ".TBADH.".idclas = 2";
$resultat = ExecRequete($requete,$connexion);

Erreur dans la requête!
Unknown column 'cdc_manifestations.publier' in 'field list'
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
jordane45 21212 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 27 mai 2018 Dernière intervention - 11 déc. 2017 à 23:30
1
Merci
Bonjour,

Déjà .. quand tu as un souci de requête ... commence par en faire un ECHO et regarde ce que ça donne...
Lorsque je vois :
SELECT nom,prenom,email,annee,".TBMANIF.".publier
FROM ".TBADH."
LEFT JOIN ".TBPERS."

Tu vois bien que tu as la table TBADH et la table TBPERS ... mais tu essaies de récupérer le champ publier de la table TBMANIF
Normal que ça plante.

Merci jordane45 1

a aidé 24700 internautes ce mois-ci

Commenter la réponse de jordane45
LaChaux78 291 Messages postés lundi 25 juillet 2016Date d'inscription 27 mai 2018 Dernière intervention - 12 déc. 2017 à 08:57
0
Merci
Bonjour
En fait je suis obligé de faire 2 requètes à ton avis? ou il y a une autre possibilité.
			$requete = "SELECT publier
						FROM ".TBMANIF."
						WHERE ".TBMANIF.".publier = false";
			$resultat = ExecRequete($requete,$connexion);

			$requete = "SELECT nom,prenom,email,annee
						FROM ".TBADH."
							LEFT JOIN ".TBPERS."
								ON ".TBPERS.".idpers = ".TBADH.".idpers
						WHERE annee = '$aadh'
						AND ".TBADH.".idclas = 2";
			$resultat = ExecRequete($requete,$connexion);

Merci
Reivax962 3224 Messages postés jeudi 16 juin 2005Date d'inscription 18 mai 2018 Dernière intervention - 12 déc. 2017 à 11:14
Bonjour,

Pas nécessairement. Tout dépend de la relation qui relie la table TBMANIF et les tables TBADH et/ou TBPERS. Y a-t-il un champ qui fasse le lien entre elles ?

Xavier
Reivax962 3224 Messages postés jeudi 16 juin 2005Date d'inscription 18 mai 2018 Dernière intervention - 12 déc. 2017 à 14:24
Sans lien entre ces tables, le mettre dans la clause WHERE n'a aucun sens. Qu'est-ce que tu espères obtenir ?
Commenter la réponse de LaChaux78
LaChaux78 291 Messages postés lundi 25 juillet 2016Date d'inscription 27 mai 2018 Dernière intervention - 12 déc. 2017 à 13:36
0
Merci
Bonjour
Justement il n'y a pas de lien entre la table TBMANIF et les 2 autres tables. Et j'ai une clause WHERE de cette table en fait.
jordane45 21212 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 27 mai 2018 Dernière intervention - 12 déc. 2017 à 13:45
On ne comprend plus rien ...
Commence déjà par :

- Nous montrer les REQUETES sql (sans le code php )
(donc suite à un echo ... )

- Nous montrer la structure de tes tables (nous faire un dump par exemple)

- Nous expliquer EXACTEMENT ce que tu souhaites obtenir.

Seulement la.. nous pourrons envisager de te répondre....
Commenter la réponse de LaChaux78
LaChaux78 291 Messages postés lundi 25 juillet 2016Date d'inscription 27 mai 2018 Dernière intervention - 12 déc. 2017 à 14:46
0
Merci
Bonjour
Alors voilà...
J'ai un formulaire, lorsque je renseigne le formulaire, j'envoie un mail aux membres uniquement si je coche via une checkbox qui correspond aux champ "publier" de ma table TBMANIF si publier est à false le mail est envoyé si publier est à true aucun mail ne sera envoyé.
Ensuite je ne souhaite pas envoyer le mail à tous mais seulement à une certaine catégorie de membre.
Voici la condition correspondante à la table TBMANIF
WHERE ".TBMANIF.".publier = false";

Et pour sélectionner certains membres il y a les tables TBADH et TBPERS. Voici ce que ça donne je n'ai pas tout mis la page après la boucle while il y a l'envoi de mail sans interet pour mon problème.
Je vous remercie.
	switch($_POST['haction']) {
		case 'new':
			$requete = "INSERT INTO ".TBMANIF." (lieu,dmanif,event,idhorai,idindem,publier,descmanif,inscrip)
						VALUES ('$lieu','$dmanif','$event','$idhorai','$idindem','$publier','$descmanif','$inscrip')";
			$typenr = "enregistré"; 
			$reqaj = $requete;  
			$resultat = ExecRequete($requete,$connexion);
                    
			$requete = "SELECT publier
						FROM ".TBMANIF."
						WHERE ".TBMANIF.".publier = false";
			$resultat = ExecRequete($requete,$connexion);

			$requete = "SELECT nom,prenom,email,annee
						FROM ".TBADH."
							LEFT JOIN ".TBPERS."
								ON ".TBPERS.".idpers = ".TBADH.".idpers
						WHERE annee = '$aadh'
						AND ".TBADH.".idclas = 4";
			$resultat = ExecRequete($requete,$connexion);

				while ($r = mysql_fetch_object($resultat)) {
Reivax962 3224 Messages postés jeudi 16 juin 2005Date d'inscription 18 mai 2018 Dernière intervention - 12 déc. 2017 à 14:58
Et dans TBMANIF, tu n'as qu'une seule ligne ?
Commenter la réponse de LaChaux78
LaChaux78 291 Messages postés lundi 25 juillet 2016Date d'inscription 27 mai 2018 Dernière intervention - 12 déc. 2017 à 15:13
0
Merci
Comment ça je ne comprends pas.....
Commenter la réponse de LaChaux78
LaChaux78 291 Messages postés lundi 25 juillet 2016Date d'inscription 27 mai 2018 Dernière intervention - 12 déc. 2017 à 15:24
0
Merci
Par contre si je fait comme ça avec l'ancienne syntaxe tout fonctionne bien...
	switch($_POST['haction']) {
		case 'new':
			$requete = "INSERT INTO ".TBMANIF." (lieu,dmanif,event,idhorai,idindem,publier,descmanif,inscrip)
						VALUES ('$lieu','$dmanif','$event','$idhorai','$idindem','$publier','$descmanif','$inscrip')";
			$typenr  = "enregistré"; 
			$reqaj   = $requete;  
			$resultat = ExecRequete($requete,$connexion);
                    
			$requete = "SELECT nom,prenom,email,annee,publier
					FROM ".TBPERS.",".TBADH.",".TBMANIF."
					WHERE ".TBPERS.".idpers = ".TBADH.".idpers
					AND ".TBMANIF.".publier = false
					AND annee='$aadh'
					AND idclas = 4
			$resultat = ExecRequete($requete,$connexion);

				while ($r = mysql_fetch_object($resultat)) {
Reivax962 3224 Messages postés jeudi 16 juin 2005Date d'inscription 18 mai 2018 Dernière intervention - 13 déc. 2017 à 08:40
Bonjour,

Mais en fait, tu sais déjà ce que vaut TBMANIF.publier puisque tu viens de l'insérer...
Donc pourquoi ne pas simplement faire
if ($publier == "ce que tu veux")...


Dans les requête SQL, on ne peut pas faire appel, dans 99,9% des cas, à une table sans donner une clause de jointure. Tu vois bien que tu utilises TBPERS et TBADH en les reliant avec TBPERS.idpers = TBADH.idpers. Il FAUT faire pareil avec TBMANIF sinon tu ne maîtrises pas le résultat de la requête (plus précisément, elle effectuerait un produit cartésien de tes tables, démultipliant le nombre de lignes en résultat)

Xavier
Commenter la réponse de LaChaux78
LaChaux78 291 Messages postés lundi 25 juillet 2016Date d'inscription 27 mai 2018 Dernière intervention - 13 déc. 2017 à 07:19
0
Merci
Bonjour,
Pouvez-vous me dire si avec la nouvelle syntaxe je suis obligé de faire deux requète s'ils vous plait.
Je vous remercie.
Commenter la réponse de LaChaux78
LaChaux78 291 Messages postés lundi 25 juillet 2016Date d'inscription 27 mai 2018 Dernière intervention - 13 déc. 2017 à 09:39
0
Merci
Bonjour,
Merci pour tes explications, je regarde tous ça.
Commenter la réponse de LaChaux78
LaChaux78 291 Messages postés lundi 25 juillet 2016Date d'inscription 27 mai 2018 Dernière intervention - 13 déc. 2017 à 14:55
0
Merci
Bonjour,
Alors j'ai fait comme ça peut tu me dire si c'est cohérent s'il te plait, merci.
Pour te faire une récap...
Si publier est à false la requète SELECT choisit la catégorie de membre pour envoyer le mail sinon juste l'INSERT sera exécuté.
if($_POST['submit']) {
$publier    = $_POST['publier']=='true' ? true : false;
switch($_POST['haction']) {
case 'new':
$requete = "INSERT INTO ".TBMANIF." (lieu,dmanif,event,idhorai,idindem,publier,descmanif,inscrip)
VALUES ('$lieu','$dmanif','$event','$idhorai','$idindem','$publier','$descmanif','$inscrip')";
$typenr = "enregistré"; 
$reqaj = $requete;  
$resultat = ExecRequete($requete,$connexion);
                    
if(!$publier) {
$requete = "SELECT nom,prenom,email,annee
		FROM ".TBADH."
		LEFT JOIN ".TBPERS." ON ".TBPERS.".idpers = ".TBADH.".idpers
		WHERE annee = '$aadh'
		AND ".TBADH.".idclas = 4";
		$resultat = ExecRequete($requete,$connexion);
while ($r = mysql_fetch_object($resultat)) {

ICI SCRIPT POUR ENVOIE DE MAIL

}
}
jordane45 21212 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 27 mai 2018 Dernière intervention - 13 déc. 2017 à 15:47
Faut vraiment que tu te mettes à appliquer les conseils qui sont donnés ici :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Et puis... tu utilises l'ancienne extension mysql qui est OBSOLETE.
Il faut que tu passes à mysqli ou pdo...
Reivax962 3224 Messages postés jeudi 16 juin 2005Date d'inscription 18 mai 2018 Dernière intervention - 13 déc. 2017 à 22:26
Comme le dit Jordane45, cette façon d'utiliser une base en php est quelque peu datée. Penser à tout migrer vers les nouvelles méthodes est indispensable pour la maintenance future de ton application.

Ceci dit, d'un point de vue purement fonctionnel, ce que tu as écrit me semble correct.
Commenter la réponse de LaChaux78
LaChaux78 291 Messages postés lundi 25 juillet 2016Date d'inscription 27 mai 2018 Dernière intervention - 13 déc. 2017 à 23:24
0
Merci
Bonjour,
Merci en ce qui concerne mon soucis cela marche bien.
Pour vos conseils je les suis petit à petit. En fait j'ai toute une partie administration avec un .htaccess et .htpasswd qui est fonctionnel mais obselete j'en suis conscient et j'ai le site de notre association qui est construit en PDO avec requète préparée. Je suis en train d'y regarder mais j'avais fait un gros travail pour la partie admin que migrer vers les nouvelles méthodes me font peur par pour le travail mais étant donné que dans la partie administration l y a souvent des mises à jour à faire alors je ne sais pas trop comment il va falloir aborder le problème car je vais rester avec la partie admin sans aucune mise à jour pendant un certain temps, mais bon j'y réfléchis...
Merci encore
yg_be 5631 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 27 mai 2018 Dernière intervention - 14 déc. 2017 à 21:30
bonsoir, peux-tu marquer comme résolu (via la roue dentée à droite du titre)?
Commenter la réponse de LaChaux78