Erreur Unknown Requète SQL

Résolu
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
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'

10 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 583 Date d'inscription   Statut Membre Dernière intervention   32
 
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   Statut Membre Dernière intervention   1 011
 
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   Statut Membre Dernière intervention   1 011
 
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 583 Date d'inscription   Statut Membre Dernière intervention   32
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 583 Date d'inscription   Statut Membre Dernière intervention   32
 
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   Statut Membre Dernière intervention   1 011
 
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 583 Date d'inscription   Statut Membre Dernière intervention   32
 
Comment ça je ne comprends pas.....
0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 
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   Statut Membre Dernière intervention   1 011
 
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 583 Date d'inscription   Statut Membre Dernière intervention   32
 
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 583 Date d'inscription   Statut Membre Dernière intervention   32
 
Bonjour,
Merci pour tes explications, je regarde tous ça.
0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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   Statut Membre Dernière intervention   1 011
 
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 583 Date d'inscription   Statut Membre Dernière intervention   32
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
bonsoir, peux-tu marquer comme résolu (via la roue dentée à droite du titre)?
0