Page 1 sur 2

classe pour supprimer/modifier ds la base -> msg

Posté : 17 mai 2005, 16:07
par KissKool
Bonjour,
pour modifier ou supprimer un rendez-vous j'utilise une classe.
La classe fonctionne mais il y a des petits pbs :

J'ai des msg qui s'affichent
Lorsque je fais une modif ou une suppression, pour chaque enregistrement :
"Unknown column 'NOM_UTIL' in field list"
"Unknown column 'DATE' in field list"
Mais pourtant ca marche



Voici le code de mon formulaire form_suppr_rdv.php qui affiche le tableau avec les différenrts champs :

<?
require("classe_modif.php");

$aujourdhui = Time();
$f_aujourdhui = date("Y/n/d",$aujourdhui);

/// Mise en place du tableau d'affichage
echo "<br><div align=\"center\"><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "<tr><td height=\"22\" align=\"center\" valign=\"middle\" background=\"images/header.gif\">";
echo "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "<tr align=\"center\"><td height=\"22\" class=\"menu\"><h2>MODIFICATION / SUPPRESSION D'UN RENDEZ-VOUS</h2></td></tr>";
echo "</table></td></tr></table></div>";

echo "<br><br><tr align=\"center\"><td width=\"500\" class=\"menu\"><h2 class=\"titre\">Tableau récapitulatif des rendez-vous</h2></td></tr>";
echo "<br><tr align=\"center\"><td width=\"500\" class=\"menu\"><h3>Vous pouvez effectuer des modifications directement dans les champs (Libellé et Heures du rendez-vous) et valider</h3></td></tr>";
echo "<tr align=\"center\"><td width=\"500\" class=\"menu\"><h3>Pour supprimer un rendez-vous, il vous suffit de cocher la case à droite sur la ligne correspondante et valider</h3></td></tr>";

/// Requete sql
$req = "SELECT RENDEZVOUS.CODE_RDV, NOM_UTIL, DATE, LIBELLE_RDV, HEURE_DEB, HEURE_FIN, UTILISATEUR.CODE_UTIL
FROM avoir, rendezvous, utilisateur
WHERE RENDEZVOUS.code_rdv = AVOIR.code_rdv
AND AVOIR.code_util = UTILISATEUR.code_util
AND Date >= '$f_aujourdhui'";

/// En-tête du tableau
$ag3[1]="CODE_RDV";
$ag3[2]="NOM_UTIL";
$ag3[3]="DATE";
$ag3[4]="LIBELLE_RDV";
$ag3[5]="HEURE_DEB";
$ag3[6]="HEURE_FIN";

/// En-tête du tableau
$tete[1]="CODE RENDEZ-VOUS";
$tete[2]="NOM";
$tete[3]="DATE";
$tete[4]="LIBELLE";
$tete[5]="HEURE DEBUT";
$tete[6]="HEURE FIN";

/// Requete de l'affichage
$aff = new affich($req);

require("config/connect.php");

/// $ag3 est un tableau avec les noms des champs(en ordre) de la table concernée, le 2eme argument = l'indice(on commence à 1) de la clé dans le tableau, 3eme argument = au nombre de colonne à afficher
$aff->modif($ag3,"rendezvous","1","6");

/// argument1 = tableau(l'indice de tableau commence à 1) contenant l'entete (exemple nom, prenom ....) le troisieme argument est l'indice de la clé
$aff->supprime($ag3,"rendezvous","1");
$aff->supprime($ag3,"avoir","1");

/// argument1 = requete de l'affichage, argument2=nombre de colonne argument3 = tableau(l'indice de tableau commence à 1) contenant l'entete (exemple nom, prenom ....)
$aff->afficher($req,6,$tete);
?>




Voici le code de ma classe classe_modif.php :

<?
/** classe qui permet permet d'afficher, de modifier ou supprimer le contenu d'une base de donnée */
/** Déclaration de la classe */
class affich {

/** Fonction affiche qui permet d'afficher un tableau */
function affich($re) {
/** Appel au fichier de config pour se connecter à la base de données */
require("config/connect.php");
$resultat = mysql_query($re,$connexion);
/** Si on a un problème de connexion, on affiche le message d'erreur de Mysql sinon on regarde si on trouve des enregistrements */
if(!$resultat) {
echo mysql_error($connexion);
exit(0);
}
$_SESSION['ligne'] = mysql_num_rows($resultat);
}

function afficher($ag1,$ag2,$ag) {
require("config/connect.php");
$resultat = mysql_query($ag1,$connexion);
if(!$resultat)
echo mysql_error($connexion);
else
{
/** Si on a pas d'enregistrements dans la base, on affiche un message d'erreur */
if(mysql_num_rows($resultat)==0) {
echo 'Aucun enregistrement à afficher';
exit(0);
}
/** Calcul de la largeur de la cellule en fonction du nombre de champs à afficher */
$part=100/$ag2;
echo "<form name=\"form1\" action = \"".$_SERVER['PHP_SELF']."\" method=\"POST\">";

/** Mise en page et début du tableau */
echo "<br><table width=\"100%\" border=\"0\"cellspacing=\"0\" cellpadding=\"0\" height=\"30\" background=\"images/header.gif\">";
echo "<tr><td height=\"22\" background=\"images/title.gif\" class=\"menu\">&nbsp;</td></tr>";
echo "<tr><td align=\"center\" valign=\"top\" bgcolor=\"78B1F3\"><table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">";
echo "<tr><td align=\"center\" valign=\"top\" bgcolor=\"#FFFFFF\"><table width=\"100%\" border=\"0\" cellspacing=\"5\" cellpadding=\"0\">";
echo "<tr><td colspan=\"2\">&nbsp;</td></tr>";
$k = 1;
for($i =1;$i<=$ag2;$i++)
/** Affichage des différents champs */
echo "<td width = \"".$part."%\" align=\"center\"><h3>".$ag[$i]."</h3></td>";
echo "<td><h3 class=\"stop\">SUPPRIMER</h3></td></tr> ";

while($row = mysql_fetch_array($resultat,MYSQL_ASSOC)){
echo "<tr>";

/** Boucle qui parcourt et affiche tous les enregistrements trouvés */
for($j =1;$j<=$ag2;$j++){
list($indice,$champ) = each($row);
/** Affichage des différents enregistrements */
echo "<td width = \"".$part."%\" align=\"center\"><input type=\"text\" name = \"".$k.$j."\" value=\"".$champ."\" style =\"font-family: Arial,Verdana,Helvetica;font-size: 15px; color:#330039 ;font-weight:bold;background-color: #DDEEFF;width:100px;\"></td>";
$val = $k.$j;
$_SESSION[$val] = $champs;
}
/** Affichage des cases à cocher */
echo " <td align=\"center\"><input type =\"checkbox\" name = \"bouton".$k."\" value =\"ouiNon\" ></td></tr>";
$k++;
}
/** Fin du tableau */
echo "<tr><td colspan=\"2\">&nbsp;</td></tr><table width=\"100%\" border=\"0\" cellspacing=\"5\" cellpadding=\"0\">";
echo "<td align=\"center\"><input type = \"submit\" value= \"Valider\"></td></tr><tr><td>&nbsp;</td></tr></table>";
echo "</table></td></tr></table></td></tr></table></form>";

echo "<form name=\"retour\" action=\"./index.php?Page=menu_admin\" method=\"POST\"><div align=\"center\"><input type=\"submit\" value=\"Retour\"></div></form>";
}

}

/** Fonction modif qui permet de modifier les enregistrements d'une base de données */
function modif($colonne,$base,$cle,$nb) {
if ($_POST[$cle."1"] != "") {
require("config/connect.php");

for($i=1;$i<=$_SESSION['ligne'];$i++) {
for($j=1;$j<=$nb ;$j++){
$req = "update ".$base." set ".$colonne[$j]." = \"".$_POST[$i.$j]. "\" where ".$colonne[$cle]." = \"".$_POST[$i.$cle]."\"";
$resultat = mysql_query($req,$connexion);
if(!$resultat) echo mysql_error($connexion);
}
}
}
}

/** Fonction supprime qui permet de supprimer des enregistrements d'une base de données */
function supprime($colonne,$base,$cle) {
if ($_POST[$cle."1"] != ""){
require("config/connect.php");
for($i =1;$i<=$_SESSION['ligne'];$i++){
$bouton = "bouton".$i;
if($_POST[$bouton]== "ouiNon") {
$req = "DELETE FROM ".$base." WHERE ".$colonne[$cle]." = \"".$_POST[$i.$cle]."\"";
$resultat = mysql_query($req,$connexion);
if(!$resultat) echo mysql_error($connexion);
}
}
}
}

}

?>

Posté : 17 mai 2005, 16:15
par ouckileou
fiou... la moindre des choses c'est de mettre tant de code entre balises
, sinon c'est illisible

ensuite ça :
[quote]
"Unknown column 'NOM_UTIL' in field list"
"Unknown column 'DATE' in field list" [/quote]

ce sont des erreurs SQL, qui te disent que les champs que tu tentes de manipuler n'existent pas...

tu es sûr que tout marche comme tu veux ?  :roll:

Posté : 17 mai 2005, 16:20
par ouckileou
tu te serais inscrit tu pourrais éditer ton message et présenter du code propre...

Image

pourquoi les 3/4 des gens ne s'inscrivent pas :?:

Posté : 17 mai 2005, 16:21
par Cyrano
Salut,
Utilise donc les boutons pour envoyer du code : [ PHP ] ou [ code ], ce sera notablement plus lisible.

Pour l'erreur, ça vient peut-être de ta requête:
$req = "SELECT RENDEZVOUS.CODE_RDV, NOM_UTIL, DATE, LIBELLE_RDV, HEURE_DEB, HEURE_FIN, UTILISATEUR.CODE_UTIL
FROM avoir, rendezvous, utilisateur
WHERE RENDEZVOUS.code_rdv = AVOIR.code_rdv
AND AVOIR.code_util = UTILISATEUR.code_util
AND Date >= '". $f_aujourdhui ."'";
Tu utilises des noms de tables en minuscule ET en Majuscule: le serveur de base de données est parfois sensible à ce genre de détails: créis les noms exactement commes ils sont dans la base. Il est probable que ça fonctionnera mieux.

Posté : 17 mai 2005, 16:27
par KissKool
Bah en fait, on ne peut pas modifier ds les champs qui font reference au Code_RDV, NOM_UTIL et a DATE mais c'est pas grav on supprime l'enregistrement. Je veux juste modifier le libellé et les heures du rdv et ca marche.

Mais a mon avis, C'est pour ca que jobtien les msg pour le code_rdv et le nom d'utilisateur car c est pas modifiable. Le code-rdv est auto-incrementé.

Mais sinon comment faire pour juste afficher alor le nom et la date mais pas ds un champ ?

Posté : 17 mai 2005, 16:31
par ouckileou
sauf erreur, il me semble que tu peux très bien modifier un champ auto-incrémenté
ton erreur est "champ inconnu champ1 dans fieldlist"

si ton champ n'était pas modifiable a priori ce ne serait pas cette erreur de toute façon...
donc c'est que tu essayes de manipuler des champs qui n'existent pas

regarde sur quelle requête ça fait ça : affiche là et éventuellement montre la ici
essaye ce que t'as dit Cyrano

sinon je ne vois pas trop ce que tu veux faire dans ta dernière question

Posté : 17 mai 2005, 16:31
par Cyrano
Ce n'est pas dans ta base que je suggérais la modification mais dans ta requête.

Quant à modifier quelque chose dans la base, ce serait du coté de l'UPDATE et les règles sont les mêmes: il faut utiliser les noms tels qu'ils sont définis dans la base. Donc si c'est UTILISATEUR.CODE_UTIL, ce n'est pas la table utilisateur mais UTILISATEUR et ce n'est pas le champ code_util mais CODE_UTIL

Posté : 17 mai 2005, 16:39
par KissKool
Non, l'erreur ne vient pas que ca soit ecri en minuscule ou en majuscule j'obtiens tjrs le meme msg :
Unknown column 'nom_util' in field list
Unknown column 'date' in field list

Posté : 17 mai 2005, 16:40
par Cyrano
donc c'est que ces champs n'existent pas.... es-tu connecté sur la bonne base au moins ?

Tu as ce message où ? on dirait un retour de phpMyAdmin...?

Posté : 17 mai 2005, 16:44
par KissKool
Oui bien sur je suis connecté a ma base 'planning'

Il suffit que je fasse une petite modif, par exemple l'heure de debut et de valider et j'ai des lignes de messages qui s'affichent.
Je peux modifier soir l heure de debut soit l heure de fin soit le libellé.
En fait, ca me met ce message un certain nombre de fois selon le nombre de rdv que j'ai ds ma base.
Si j'ai 10 rdv, il me met 10 fois le msg quelquesoit ce que je modifie

Posté : 17 mai 2005, 17:52
par ouckileou
je crois qu'on a bien compris ce que tu faisais : une requête
et ce que ça donnait : une erreur SQL

et si tu as une requête qui provoque une erreur, si tu l'exécute x fois tu auras x fois l'erreur...

est-ce que tu n'exécutes pas plusieurs requêtes différentes à la fois ?

affiche à l'écran TOUTES les requêtes qui sont envoyées à MySQL et vérifie les champs que tu manipules

Posté : 18 mai 2005, 09:15
par KissKool
Lorsque je change dans l'en tete du tableau comme ceci :

/// En-tête du tableau
$ag3[1]="code_rdv";
$ag3[2]="utilisateur.nom_util";
$ag3[3]="avoir.date";
$ag3[4]="libelle_rdv";
$ag3[5]="heure_deb";
$ag3[6]="heure_fin";

J'obtien le msg suivant :
Unknown table 'utilisateur' in field list
Unknown table 'avoir' in field list

Posté : 18 mai 2005, 09:44
par Cyrano
voudrais-tu éditer la structure de ta base et nous montrer ça ici: depuis le début on te dit qu'il y a un probleme avec tes noms de table ou de champ, j'aimerais vérifier que c'est bien ça.

La structure seulement, pas les données.

Posté : 18 mai 2005, 09:49
par KissKool
Voila la structure de mes 3 tables avec les differents champs :

--
-- Structure de la table `utilisateur`
--

CREATE TABLE `utilisateur` (
`CODE_UTIL` int(10) NOT NULL auto_increment,
`NUM_GROUPE` int(2) NOT NULL default '',
`NOM_UTIL` varchar(100) NOT NULL default '',
`PRENOM_UTIL` varchar(100) NOT NULL default '',
`DEPT` varchar(5) NOT NULL default '',
`NUM_TEL1` varchar(20) default NULL,
`NUM_TEL2` varchar(20) default NULL,
`LOGIN` varchar(50) default NULL,
`MDP` varchar(50) default NULL,

PRIMARY KEY (`CODE_UTIL`),
KEY `UTIL_FK` (`NUM_GROUPE`),
FOREIGN KEY `UTIL2_FK` (`DEPT`) REFERENCES departement (`NUM_DEPT`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Structure de la table `rendezvous`
--

CREATE TABLE `rendezvous` (
`CODE_RDV` int(11) NOT NULL auto_increment,
`LIBELLE_RDV` varchar(50) NOT NULL default '',
`HEURE_DEB` int(2) NOT NULL default '',
`HEURE_FIN` int(2) NOT NULL default '',

PRIMARY KEY (`CODE_RDV`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


-- --------------------------------------------------------

--
-- Structure de la table `avoir`
--

CREATE TABLE `avoir` (
`CODE_RDV` int(11) NOT NULL default '0',
`CODE_UTIL` int(10) NOT NULL default '0',
`DATE` date NOT NULL default '0',

PRIMARY KEY (`CODE_RDV`,`CODE_UTIL`,`DATE`),
KEY `AVOIR_FK` (`CODE_RDV`),
KEY `AVOIR2_FK` (`CODE_UTIL`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Posté : 18 mai 2005, 09:54
par KissKool
Ya pa de DATE ds la clé primaire de la table AVOIR dsl
Mai bon tjrs le meme pb