Pb requête UPDATE pour mise à jour d'un champ.

Résolu
danielos77 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   -  
danielos77 Messages postés 108 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

A voir également:

3 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

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();
                 }
            }
1
danielos77 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   2
 

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();
            }	
0
danielos77 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   2
 

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

0