Pb requête UPDATE pour mise à jour d'un champ.
Résoludanielos77 Messages postés 109 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'affiche le contenu d'une table avec en bout de chaque ligne un select qui doit permettre de valider une inscription. Cette partie fonctionne mais je souhaitais également lorsque la validation est faite que la saison se mette à jour or soit rien ne se passe avec la condition where et si je l'enlève, la saison est changée pour tous les enregistrements...
Merci d'avance à la bonne âme qui pourra me venir en secours pour la rédaction de cette requête.
Je joins les 2 parties du codes mais la première ne pose aucun soucis.
Très cordialement,
Daniel
<form method="post">
<?php
//activation de l'affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//echo "Test";
//on inclut le fichier de connexion à la bdd
require_once "../cnx.php";
//préparation de la requête
$sql ="SELECT *, LPAD(ID, 3, '0') FROM Table"; //LDAP() pour mise en forme ID sur 3 digits
//Execution de la requete
try{
$req = $bdd->prepare($sql);
$req->execute();
//on récupère les résultats
$result = $req->fetchAll();
}catch(Exception $e){
// en cas d'erreur :
echo " <br>Erreur ! ".$e->getMessage();
echo " <br>Les datas : " ;
print_r($datas);
}
// Mise en forme des résultats pour les champs voulus
if(!empty($result)){
// Masque du tableau séparé pour ne pas le recopier à chaque ligne
echo '
<table style="border-collapse:collapse;" cellspacing="0" class="avectri" border="1">
<thead>
<tr> <!-- masque du tableau -->
<th style="border-width:1; border-color:black; border-style:solid;">ID</th>
<th style="border-width:1; border-color:black; border-style:solid;">Nom</th>
<th style="border-width:1; border-color:black; border-style:solid;">Prénom</th>
<th style="border-width:1; border-color:black; border-style:solid;">Saison</th>
<th style="border-width:1; border-color:black; border-style:solid;">Validation</th>
</tr>
</thead>
';
foreach($result as $uneLigne){
//récupération de l'ID de la ligne
$ID=$uneLigne['ID'];
//traitement de la validation si existante
if ($uneLigne['Validation']<>"") {
$valid=$uneLigne['Validation'];
}
else {
$valid="''";
}
// Suite du tableau avec une ligne par groupe de données
echo'
<tr> <!-- lignes des résultats -->
<td style="border-width:1; border-color:black; border-style:solid;">'.$uneLigne["LPAD(ID, 3, '0')"].'</td>
<td style="border-width:1; border-color:black; border-style:solid;">'.$uneLigne['Nom'].'</td>
<td style="border-width:1; border-color:black; border-style:solid;">'.$uneLigne['Prenom'].'</td>
<td style="border-width:1; border-color:black; border-style:solid; text-align: center;">'.$uneLigne['Saison'].'</td>
<td style="border-width:1; border-color:black; border-style:solid; text-align: center;">'.$uneLigne['Validation'].'</td>
<td style="border-width:0; border-color:black; border-style:solid;"><font size="4"><label for="Validationmod">Validation : </label>
<select name="Validationmod['.$ID.']" id="Validationmod'.$ID.'">
<option value='.$valid.' selected>--Choisissez une option--</option>
<option value="OUI">OUI</option>
<option value="NON">NON</option>
</tr>
';
}
echo '</tbody>
</table>
';
}
echo "<br><Input type='submit' name='btnSubmit' id='submit' value='Saisie des validations'>";
echo "</form>";
?>
<?php
//activation de l'affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//on inclut le fichier de connexion à la bdd
require_once "../cnx.php";
//On vérifie qu'on a bien cliqué sur le bouton
if(isset($_POST['btnSubmit'])){
foreach($_POST['Validationmod'] as $cle => $element)
{
// Préparation Saison à mettre si Validation = OUI
$Saison = date('Y');
//$sth appartient à la classe PDOStatement
$sth = $bdd->prepare("UPDATE Table SET Validation = :element, Saison = :saison WHERE ID = :cle and Validation = 'OUI'");
$sth->bindValue(':element', $element, PDO::PARAM_STR);
$sth->bindValue(':saison', $Saison, PDO::PARAM_STR);
$sth->bindValue(':cle', $cle, PDO::PARAM_INT);
$sth->execute();
}
echo '<br><br>Mise à jour des validations effectuée. <br>';
}
$bdd = null; // Ferme la connexion
?>
Windows / Firefox 121.0
3 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
je suggère ceci:
$Saison = date('Y'); $oui= 'OUI'; $sth = $bdd->prepare("UPDATE Table SET Saison = :saison , Validation = :validation WHERE ID = :cle"); $sth->bindValue(':saison', $Saison, PDO::PARAM_STR); $sth->bindValue(':validation', $oui, PDO::PARAM_STR); foreach($_POST['Validationmod'] as $cle => $element) { if ($element == $oui) { $sth->bindValue(':cle', $cle, PDO::PARAM_INT); $sth->execute(); } } -
Bonjour,
J'ai trouvé une solution qui n'est peut-être (sûrement) pas académique mais qui fonctionne.
foreach($_POST['Validationmod'] as $cle => $element) { // Préparation Saison à mettre si Validation = OUI $Saison = date('Y'); //$sth appartient à la classe PDOStatement $sth = $bdd->prepare("UPDATE Table SET Validation = :element WHERE ID = :cle"); $sth->bindValue(':element', $element, PDO::PARAM_STR); $sth->bindValue(':cle', $cle, PDO::PARAM_INT); $sth->execute(); $sth = $bdd->prepare("UPDATE Table SET Saison = :saison WHERE Validation = 'OUI'"); $sth->bindValue(':saison', $Saison, PDO::PARAM_STR); $sth->execute(); } -
Merci yg_be pour ta suggestion.
Effectivement, il n'y a pas photo c'est plus propre que ma bidouille.
Je t'adresse toute ma reconnaissance comme aux autres "grands" contributeurs pour les aides que vous apportez et qui permettent aux bricoleurs comme moi de s'en sortir.
@+ (sûrement ;-) )