Erreur Unknown Requète SQL

Résolu/Fermé
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 - 11 déc. 2017 à 23:26
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 - 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'
A voir également:

10 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
11 déc. 2017 à 23:30
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.
1
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
12 déc. 2017 à 08:57
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
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
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
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
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 ?
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
12 déc. 2017 à 13:36
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.
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
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....
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
12 déc. 2017 à 14:46
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)) {
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
12 déc. 2017 à 14:58
Et dans TBMANIF, tu n'as qu'une seule ligne ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
12 déc. 2017 à 15:13
Comment ça je ne comprends pas.....
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
12 déc. 2017 à 15:24
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)) {
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
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
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
13 déc. 2017 à 07:19
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.
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
13 déc. 2017 à 09:39
Bonjour,
Merci pour tes explications, je regarde tous ça.
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
13 déc. 2017 à 14:55
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

}
}
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
13 déc. 2017 à 15:47
Faut vraiment que tu te mettes à appliquer les conseils qui sont donnés ici :
https://forums.commentcamarche.net/forum/affich-37584947-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...
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
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.
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
13 déc. 2017 à 23:24
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
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
14 déc. 2017 à 21:30
bonsoir, peux-tu marquer comme résolu (via la roue dentée à droite du titre)?
0