classe pour supprimer/modifier ds la base -> msg

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : classe pour supprimer/modifier ds la base -> msg

par Invité » 19 mai 2005, 08:19

Le pb ne viendrait-il pa du UPDATE car la requete s'execute sur 3 tables alors qu'on n'a pa de jointures ds le UPDATE ?

/** 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); 
            } 
        } 
    } 
} 

par KissKool » 18 mai 2005, 11:44

Franchement jcommence a desesperer. Mais bon ca mcoute rien de perseverer jtrouveré bien la soluce. Par contre ma classe fonctionne tres bien quand j'affiche des infos a partir d'une seule table. Par exemple UTILISATEUR.
La ca doit etre a cause des jointures car nom_util et date sont des infos qui ne se trouvent pas dans la table RENDEZVOUS.

par Cyrano » 18 mai 2005, 11:29

le problème vient du fait que tu ne peux pas faire une requête en envoyant un tableau au lieu d'un nom de table, fût-ce via une variable. Corrige ce point et ça devrait fonctionner. Et fait afficher ta requête, tu verras bien qu'elle est inutilisable autrement.

par KissKool » 18 mai 2005, 11:25

La date ne se trouve pas ds la table RENDEZVOUS mais ds AVOIR.


AVEC $aff->modif($ag3,"rendezvous","1","6"), je peux modifier le libellé, l'heure de debut et l'heure de fin.

POUR $aff->modif($ag3 [?],"rendezvous","1","6"), je dois le faire pour chaque en-tete?

par pjl » 18 mai 2005, 11:08

Si ce conseil avait été suivi
regarde sur quelle requête ça fait ça : affiche là et éventuellement montre la ici

par Cyrano » 18 mai 2005, 11:04

Tu envoies un tableau en paramètre au lieu d'un nom de colonne, ça peut pas fonctionner:
$aff->modif($ag3,"rendezvous","1","6");
$ag3 est un tableau indexé: pour modifier par exemple la date, il faudrait mettre:
$aff->modif($ag3[3],"rendezvous","1","6");

par KissKool » 18 mai 2005, 10:49

Voici le code de classe_modif :

<?
/** 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: 14px; color:#330039 ;font-weight:bold;background-color: #DDEEFF;width:170px;\"></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);
						}
					}
				}
	}
	
}

?>

par Cyrano » 18 mai 2005, 10:44

à quoi ressemble ta méthode affich::modif() ?

par KissKool » 18 mai 2005, 10:41

Ok, j'ai mi les tables en minuscules et le nom des champs en majuscule malgré que le pb ne vien pa de la :

Le pb vient a mon avi de : $aff->modif($ag3,"rendezvous","1","6");
Quand je rajoue le nom des autres tables, ca bug

/// 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'
		ORDER BY DATE";

/// En-tête du tableau
$ag3[1]="rendezvous.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 EMPLOYÉ";
$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);		

[/php]

par KissKool » 18 mai 2005, 10:32

Quand je met ca, je n'obtien plu de msg :

$aff->modif($ag3,"rendezvous, utilisateur, avoir","1","6");



Mais par conte, j'obtien un gros bug : tous les rdv obtiennent le meme nom d'employé et la meme date et meme ds ma base ca modifie !

par Cyrano » 18 mai 2005, 10:24

Ok, on est prêt à t'aider, mais apparemment, tu es étanche aux conseil, alors débrouille toi :evil:

_____________________________________
On ne fait pas boire un âne qui n'a pas soif !

par Invité » 18 mai 2005, 10:20

J'ai tout mi en minuscule mais a mon avis le pb ne vien pa de la
<?
/// 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'
		ORDER BY date";

/// 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 EMPLOYÉ";
$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);		
?>

par Cyrano » 18 mai 2005, 10:14

Ok, alors dans tes requête, respecte scrupuleusement la casse: tes noms de table sont en MINUSCULE et les noms de champs sont en MAJUSCULE : corrige tes requêtes et essaye à nouveau.

par KissKool » 18 mai 2005, 09:54

Ya pa de DATE ds la clé primaire de la table AVOIR dsl
Mai bon tjrs le meme pb

par KissKool » 18 mai 2005, 09:49

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;