Mise à jour requète UPDATE
Résolu
LaChaux78
Messages postés
583
Date d'inscription
Statut
Membre
Dernière intervention
-
LaChaux78 Messages postés 583 Date d'inscription Statut Membre Dernière intervention -
LaChaux78 Messages postés 583 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Mise à jour requète UPDATE
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Mise a jour chromecast - Accueil - Guide TV et vidéo
- Mise a jour kindle - Guide
- Mise à jour libre office - Accueil - Bureautique
12 réponses
Bonjour,
Tu es dans le forum mysql.... donc .. seule la requête nous interesse... pas ton code php.
Autrement dit :
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....
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....
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.
Merci.
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.
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:
puis de construire une requête UPDATE qui est identique à celle que ton code exécute.
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.
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.
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.
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
Si cette requête ne met toujours rien à jour... fais donc un
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
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
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.
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; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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();
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 " . "";
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.
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>';
Bonjour Jordane45,
Voici l'erreur qui me renvoie.
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
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.
Je vous remercie.
$lien = $_SERVER["PHP_SELF"].'?a=mod&idpers='.$idpers.'&idfonc='.$idfonc.'&ddebut='.$ddebut.'&oldid='.$oldid;
Je vous remercie.