Mise à jour requète UPDATE

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 8 sept. 2018 à 11:16
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 10 sept. 2018 à 20:43
Bonjour,
Je ne vois pas pourquoi ma requète UPDATE ne met pas à jour mes modifications. Pouvez-vous s'ils vous plait voir ce qui ne vas pas, je passe à côté certainement une bétise de rien du tout mais 2 jours que j'essaie de comprendre mais toujours pas de résultat.
Je vous remercie.
Array
(
    [idpers] => 4
    [idfonc] => 8
    [ddebut] => 01/09/2016
    [dfin] => 31/08/2018
    [haction] => mod
    [oldid] => 
    [submit] => Modifier
)
comme on peut le voir c'est mon tableau des identifiants qui pose problème.

$action 	= 'new';
$a 			= !empty($_GET['a']) ? $_GET['a'] : NULL;
$submit 	= !empty($_POST['submit']) ? $_POST['submit'] : NULL;
$haction 	= !empty($_POST['haction']) ? $_POST['haction'] : NULL;

$idpers 	= !empty($_POST['idpers']) ? $_POST['idpers'] : '';
$idfonc 	= !empty($_POST['idfonc']) ? $_POST['idfonc'] : '';
$ddebut 	= !empty($_POST['ddebut']) ? dw2m($_POST['ddebut']) : '';
$dfin 		= !empty($_POST['dfin']) ? dw2m($_POST['dfin']) : '';
$oldid 		= !empty($_POST['oldid']) ? $_POST['oldid'] : '';

switch($a) {
	case 'new': $action = 'new';  break; 
	case 'ls' : $action = 'list'; break; 
	case 'mod': $action = 'mod';  break;
	default   : $action = 'new';  break;
}

if($submit) {

	switch($haction) {
		case 'new':
			$sql = "INSERT INTO cdc_gerer (idpers, idfonc, ddebut, dfin) VALUES(:idpers, :idfonc, :ddebut, :dfin)";
			$datas = array('idpers' => $idpers, 'idfonc' => $idfonc, 'ddebut' => $ddebut, 'dfin' => $dfin);
			$result = executeQuery($sql,$datas);
			$typenr = "enregistrée";
			$reqaj = $sql;
			
			$sql = "SELECT idfonc,fonction FROM cdc_fonctions WHERE idfonc = :idfonc";
			$datas = array('idfonc' => $idfonc);
			$result = executeQuery($sql,$datas);
			$donnees = $result->fetch();
			$success = "<span class='success'>La nouvelle responsabilité de - ".trim("$donnees->fonction")." - a été $typenr.</span>";
			break;

		case 'mod':
			// Constrution de la condition de modification ($oi = old ID)
			$oi = explode(",", $oldid); // Tableau des identifiants
			$condition = "WHERE (idpers='".$oi[0]."' AND idfonc='".$oi[1]."' AND ddebut='".$oi[2]."')";
			// Construction de la requete de modification
			$sql = "UPDATE cdc_gerer SET idpers = :idpers, idfonc = :idfonc, ddebut = :ddebut, dfin = :dfin $condition";
			$datas = array('idpers' => $idpers, 'idfonc' => $idfonc, 'ddebut' => $ddebut, 'dfin' => $dfin);
			$result = executeQuery($sql,$datas);
			$typenr = "modififiée";
			$reqmod = $sql;

			$sql = "SELECT idfonc,fonction FROM cdc_fonctions WHERE idfonc = :idfonc";
			$datas = array('idfonc' => $idfonc);
			$result = executeQuery($sql,$datas);
			$donnees = $result->fetch();
			$success = "<span class='success'>La responsabilité de - ".trim("$donnees->fonction")." - a été $typenr.</span>";
			break;
	}
}

switch($action) {
	case 'new':    						
		$title   	= "Saisie d'un Responsable";    
		$btsub   	= "Enregistrer";
		$idpers  	= "";                        
		$idfonc  	= "";                        
		$ddebut  	= "";               		
		$dfin    	= "";           		
		break;

	case 'list':  					
		$title  	= "Liste des Responsables";
		break;

	case 'mod':   		
		$title  	= "Modification d'un Responsable";
		$btsub  	= "Modifier";
		$idpers 	= $_GET['idpers'];               
		$idfonc 	= $_GET['idfonc'];            
		$ddebut 	= dm2w($_GET['ddebut']);
		$oldid  	= $_GET['oldid'];           
		$sql  		= "SELECT * FROM cdc_gerer
						WHERE idpers = :idpers
						AND idfonc = :idfonc
						AND ddebut = :ddebut
						AND dfin IS NULL";
		$datas 		= array('idpers' => $idpers, 'idfonc' => $idfonc, 'ddebut' => $ddebut);
		$result 	= executeQuery($sql,$datas);
		$donnees 	= $result->fetch();
		$dfin    	= $donnees->dfin;
		break;
}
?>
A voir également:

12 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
8 sept. 2018 à 12:31
Bonjour,

Tu es dans le forum mysql.... donc .. seule la requête nous interesse... pas ton code php.
Autrement dit :
UPDATE cdc_gerer 
     SET idpers = :idpers
          , idfonc = :idfonc
          , ddebut = :ddebut
          , dfin = :dfin 
$condition

Donc.. tu prends cette requête, tu remplaces les différentes variables $condition et toutes les variable :xxxx
par leurs valeurs respectives (celles de ton array) .... et tu la testes DIRECTEMENT dans ta bdd via PHPMYADMIN
Là.. tu devrais voir ce qui bloque.

NB: Je pense voir déjà un souci...... les DATES.
Visiblement tu essayes de les envoyer en format "français" ( d/m/Y )... sauf que les champs date/datetime/timestamp des bdd doivent être au format Y-m-d
Il te faut donc convertir tes dates avant de vouloir les insérer dans la bdd....
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
8 sept. 2018 à 17:23
Bonjour et merci pour ton aide. J'ai essayé de tester ma requète UPDATE dans phpmyadmin, je n'ai pas trop l'habitude de tester mes requète avec phpmyadmin. De ce fait cela me retourne aucune modification et aucune erreur. Voici ce que j'ai fait.
UPDATE cdc_gerer SET idpers = 4, idfonc = 8, ddebut = 2016-09-01, dfin = 2018-08-31 WHERE (idpers=4 AND idfonc=8 AND ddebut= 2016-09-01 AND dfin= 0000-00-00);

 0 ligne affectée. (traité en 0.0007 seconde(s))

Merci.
0
yg_be Messages postés 22717 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 avril 2024 1 476
8 sept. 2018 à 17:48
bonjour,
connais-tu SQL? la requête que tu testes n'a aucun sens, ni aucun rapport avec ton programme.
tu as testé une requete UPDATE, mais ce n'est pas la requête que ton code php exécute.
je te suggère d'afficher les variables qui servent à ta requête de modification:
// Construction de la requete de modification
			$sql = "UPDATE cdc_gerer SET idpers = :idpers, idfonc = :idfonc, ddebut = :ddebut, dfin = :dfin $condition";
			$datas = array('idpers' => $idpers, 'idfonc' => $idfonc, 'ddebut' => $ddebut, 'dfin' => $dfin);
// afficher $sql et $data
			$result = executeQuery($sql,$datas);

puis de construire une requête UPDATE qui est identique à celle que ton code exécute.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
8 sept. 2018 à 19:42
Bonjour,
Malheureusement je suis obligé de revenir vers vous. J'ai un peu du mal à comprendre vox explications ne m'en voulez pas. J'ai analysé ma requète UPDATE et je l'ai comparée avec une autre page qui corresponds étrangement à celle là et elle fonctionne bien.
Pouvez-vous me donner encore quelques explications s'ils vous plait.
A propos de mes dates que Jordane45 me parlait en fait lorsque je déclare mes variables j'ai une fonction qui me retourne la date dans un autre format : JJ/MM/AAAA => AAAA-MM-JJ qui se trouve dans mon fichier init que je déclare en début de page. "require("libs/init.php"); "
Je vous remercie.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
8 sept. 2018 à 20:18
Lorsque l'on ecrit une requête SQL dans PHPmyadmin certaines valeurs doivent absolument être mises entre quotes.
Dans l'idéal... tu les mets tous ainsi... comme ça tu n'as pas à réfléchir.
Donc, ta requête écrite correctement donnerait
UPDATE cdc_gerer 
     SET idpers = 4
          , idfonc = 8
          , ddebut = '2016-09-01'
          , dfin = '2018-08-31'
WHERE idpers='4' 
AND idfonc= '8'
AND ddebut= '2016-09-01' 
AND dfin= '0000-00-00'


Si cette requête ne met toujours rien à jour... fais donc un
SELECT *
FROM cdc_gerer 
WHERE idpers='4' 
  AND idfonc= '8'
  AND ddebut= '2016-09-01' 
  AND dfin= '0000-00-00'


et regarde si ça te retourne quelque chose ou non....
Si c'est non... c'est normal que ça ne mette rien à jour... les conditions ne trouvant aucune ligne.
Si le select te retourne bien un résultat... l'update doit obligatoirement fonctionner...

Si la requête d'UPDATE fonctionne dans phpmyadmin.. il faudra alors qu'on se penche sur ton code php.
Au passage (quand on en sera là....) il serait bien que tu nous redonnes le contenu de ta fonction executeQuery
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
8 sept. 2018 à 20:40
Bonjour merci bonne nouvelle ma requète dans phpmyadmin a bien fonctionné donc ne pas oublié de mettre les quotes je m'en souviendrais.
Maintenant je te donne ma fonction executeQuery.
Merci de ton aide je regarde chaque ligne de code chaque virgule je ne vois pas ce qui cloche.
function executeQuery($sql,$datas = NULL) {
    $bdd = bdd();
    //exécution de la requête
    try {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    } catch(Exception $e) {
      // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        exit(0); // en cas d'erreur.. arrête le script !
    }
    return $requete;
}
0

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

Posez votre question
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
8 sept. 2018 à 21:02
Que donne ceci
// Constrution de la condition de modification ($oi = old ID)
			$oi = explode(",", $oldid); // Tableau des identifiants
      //récupération PROPRE des variable AVANT de les utiliser
      $oldId = !empty($oi[0]) ? $oi[0] : NULL ;
      $oldidfonc = !empty($oi[1]) ? $oi[1] : NULL ;
      $oldddebut = !empty($oi[2]) ? $oi[2] : NULL ;
      
      $datas = array(':idpers' => $idpers, ':idfonc' => $idfonc, ':ddebut' => $ddebut, ':dfin' => $dfin);
      
      //si il y a des valeurs dans $oi, on initialise le where
      $strWhere = !empty($oi) ? " WHERE " . "";
      $cond = "";
      // si il y une valeur dans oldId
      if( $oldId  ) {
        $cond .= " idpers = :oldId "; // on complete le where
        $datas[':oldId'] = $oldId;
      }
      
      // si il y une valeur dans oldidfonc
      if( $oldidfonc  ) {
        $cond = !empty($cond) ? " AND " : "";
        $strWhere .=  $oldId . "  idfonc = :oldidfonc ";
        $datas[':oldidfonc'] = $oldidfonc;
      }
      // si il y une valeur dans oldddebut
      if( $oldddebut  ) {
        $cond = !empty($cond) ? " AND " : "";
        $strWhere .=  $cond . "  ddebut = :oldddebut ";
        $datas[':oldddebut'] = $oldddebut;
      }
      $strWhere .= $cond; // on complete le where avec les différentes conditions
      		
			// Construction de la requete de modification
			$sql = "UPDATE cdc_gerer SET idpers = :idpers, idfonc = :idfonc, ddebut = :ddebut, dfin = :dfin $strWhere";
			
			$result = executeQuery($sql,$datas);
      //-----------------------------//
      // le temps des tests :
      //-----------------------------//
        echo " <br> Requete SQL = ".$sql;
        echo "<br> Les datas : <pre>";
        print_r($datas);
        echo "</pre>";
        echo "<br>Resultat de la requête :" . $result;
        echo "<br>Nombre de lignes modifiées par la requête : " . $result->rowCount();
      
      
      //-----------------------------//
      
			$typenr = "modififiée";
			$reqmod = $sql;

			$sql = "SELECT idfonc,fonction FROM cdc_fonctions WHERE idfonc = :idfonc";
			$datas = array(':idfonc' => $idfonc);
			$result = executeQuery($sql,$datas);
			$donnees = $result->fetch();

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
8 sept. 2018 à 22:25
Je pense qu'il y a un soucis avec cette ligne? car rien ne s'affiche.
      //si il y a des valeurs dans $oi, on initialise le where
      $strWhere = !empty($oi) ? " WHERE " . "";
0
yg_be Messages postés 22717 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 avril 2024 1 476
Modifié le 8 sept. 2018 à 23:00
je suis très perplexe en voyant to utilisation de oldid: qu'essais-tu de faire? veux-tu vraiment permettre de modifier le champ idpers d'un enregistrement?
dés le départ, tu nous as montré
[oldid] => 
, donc que que l'UPDATE n'allait rien faire.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
8 sept. 2018 à 23:54
oui c'est bien ça. modifier les champs idpers, idfonc, ddebut qui correspondent à $oldid.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
9 sept. 2018 à 01:16
As tu testé ce que je t'ai donné ?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
9 sept. 2018 à 01:40
Montre nous également le code de ton formulaire... si ta variable oldid est vide..Normal que ça ne mette rien à jour....
0
yg_be Messages postés 22717 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 avril 2024 1 476
9 sept. 2018 à 10:56
veux-tu vraiment permettre à tout le monde de modifier tous les enregistrements? en effet, chacun peut choisir la valeur de retour de oldid.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
Modifié le 9 sept. 2018 à 08:42
Bonjour
oui j'ai testé mais je pense qu'il y a une petit erreur sur cette ligne car ma page affiche une page blanche en fait et lorsque j'enlève cette ligne cela m'affiche bien mon formulaire.
$strWhere = !empty($oi) ? " WHERE " . "";

echo '<form method="post" name="resp" action="'.$_SERVER["PHP_SELF"].'" onsubmit="return verif()">';
	echo '<h1>'.$title.'</h1>';

	echo '<table>';
	echo '<tr>';
	echo '<td class="libel">Adhérent</td>';
	echo '<td class="data">'; echo $LDadhe->write($idpers).'</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Fonction</td>';
	echo '<td class="data">'; echo $LDfonc->write($idfonc).'</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Date de début</td>';
	echo '<td class="data"><input type="text" name="ddebut" size="8" value="'.$ddebut.'" />  jj / mm / aaaa</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Date de fin</td>';
	echo '<td class="data"><input type="text" name="dfin" size="8" value="'.$dfin.'" />  jj / mm / aaaa</td>';
	echo '</tr><tr>';
	echo '<td>';
		echo '<input type="hidden" name="haction" value="'.$action.'" />';
		echo '<input type="hidden" name="oldid" value="'.$oldid.'" />';
	echo '</td>';
	echo '<td class="data"><input type="submit" name="submit" value="'.$btsub.'" /></td>';
	echo '</tr>';
	echo '</table>';

echo '</form>';
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
9 sept. 2018 à 09:47
$strWhere = !empty($oi) ? " WHERE " : "";
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
9 sept. 2018 à 19:31
Bonjour Jordane45,
Voici l'erreur qui me renvoie.
Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
Modifié le 9 sept. 2018 à 23:53
Bonjour, VICTOIR j'ai trouvé et résolu mon problème merci à vous.
Cordialement.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
10 sept. 2018 à 07:57
Ce qui serait bien... ça serait d'expliquer comment...
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
10 sept. 2018 à 08:16
Bonjour en fait c'est une grosse erreur d'inattention de ma part, rien à voir avec le codage. Moi qui me focalisait sur la requète UPDATE. J'ai tout simplement oublié de mettre la variable "oldid" dans le lien qui me permet de faire les modifications.
$lien = $_SERVER["PHP_SELF"].'?a=mod&idpers='.$idpers.'&idfonc='.$idfonc.'&ddebut='.$ddebut.'&oldid='.$oldid;

Je vous remercie.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
10 sept. 2018 à 08:50
ce que Yg_be t'a indiqué dans un précédent message... et que j'essayai de te faire voir avec les lignes de debug que je t'avais fait ajouter....
je marque le sujet en RESOLU. (merci de le faire toi même la prochaine fois )
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
10 sept. 2018 à 20:43
Bonjour merci je voulais le faire mais trop tard. merci
0