Menu

Mise à jour requète UPDATE [Résolu]

LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention - 8 sept. 2018 à 11:16 - Dernière réponse : LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention
- 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;
}
?>
Afficher la suite 

Votre réponse

21 réponses

jordane45 22520 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 septembre 2018 Dernière intervention - 8 sept. 2018 à 12:31
0
Merci
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....
Commenter la réponse de jordane45
LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention - 8 sept. 2018 à 17:23
0
Merci
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.
yg_be 6476 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 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.
Commenter la réponse de LaChaux78
LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention - 8 sept. 2018 à 19:42
0
Merci
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.
jordane45 22520 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 septembre 2018 Dernière intervention - 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
Commenter la réponse de LaChaux78
LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention - 8 sept. 2018 à 20:40
0
Merci
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;
}
Commenter la réponse de LaChaux78
jordane45 22520 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 septembre 2018 Dernière intervention - 8 sept. 2018 à 21:02
0
Merci
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();

Commenter la réponse de jordane45
LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention - 8 sept. 2018 à 22:25
0
Merci
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 " . "";
yg_be 6476 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 8 sept. 2018 à 22:59
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.
Commenter la réponse de LaChaux78
LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention - 8 sept. 2018 à 23:54
0
Merci
oui c'est bien ça. modifier les champs idpers, idfonc, ddebut qui correspondent à $oldid.
jordane45 22520 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 septembre 2018 Dernière intervention - 9 sept. 2018 à 01:16
As tu testé ce que je t'ai donné ?
jordane45 22520 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 septembre 2018 Dernière intervention - 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....
yg_be 6476 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 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.
Commenter la réponse de LaChaux78
LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention - Modifié par LaChaux78 le 9/09/2018 à 08:42
0
Merci
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>';
jordane45 22520 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 septembre 2018 Dernière intervention - 9 sept. 2018 à 09:47
$strWhere = !empty($oi) ? " WHERE " : "";
Commenter la réponse de LaChaux78
LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention - 9 sept. 2018 à 19:31
0
Merci
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
Commenter la réponse de LaChaux78
LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention - Modifié par LaChaux78 le 9/09/2018 à 23:53
0
Merci
Bonjour, VICTOIR j'ai trouvé et résolu mon problème merci à vous.
Cordialement.
jordane45 22520 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 septembre 2018 Dernière intervention - 10 sept. 2018 à 07:57
Ce qui serait bien... ça serait d'expliquer comment...
Commenter la réponse de LaChaux78
LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention - 10 sept. 2018 à 08:16
0
Merci
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.
jordane45 22520 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 septembre 2018 Dernière intervention - 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 )
Commenter la réponse de LaChaux78
LaChaux78 303 Messages postés lundi 25 juillet 2016Date d'inscription 10 septembre 2018 Dernière intervention - 10 sept. 2018 à 20:43
0
Merci
Bonjour merci je voulais le faire mais trop tard. merci
Commenter la réponse de LaChaux78