classe pour supprimer/modifier ds la base -> msg

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

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);		
?>

Mammouth du PHP | 19672 Messages

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 !
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

KissKool
Invité n'ayant pas de compte PHPfrance

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 !

KissKool
Invité n'ayant pas de compte PHPfrance

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]

Mammouth du PHP | 19672 Messages

18 mai 2005, 10:44

à quoi ressemble ta méthode affich::modif() ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

KissKool
Invité n'ayant pas de compte PHPfrance

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

?>

Mammouth du PHP | 19672 Messages

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");
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
pjl
ViPHP | 2119 Messages

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

KissKool
Invité n'ayant pas de compte PHPfrance

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?

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

KissKool
Invité n'ayant pas de compte PHPfrance

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.

Invité
Invité n'ayant pas de compte PHPfrance

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