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

Résolu
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 - 8 janv. 2024 à 18:22
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 - 9 janv. 2024 à 19:20

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 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
Modifié le 9 janv. 2024 à 17:44

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 samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
9 janv. 2024 à 05:13

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 samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
9 janv. 2024 à 19:20

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