PHPBoucle sur un update

Bonjour,

Je travail actuellement sur le formulaire de modification d'une base de données :
Voici l'idée :

L'utilisateur rentre les données à modifier dans un formulaire qui renvoie vers une page qui mettras les données à jour.

J'ai mis une condition à ces updates:
Si la valeur du champ est != "" alors je lance la requête, sinon la base sera mise à jour même avec des champs vides.

En voici un un extrait :

// se connecte à la base

include "connect.php";

// vient chercher le code dans une liste déroulante
$code=$_POST['row'];

if (($_POST[VALEUR1])!="")
{
mysql_query('UPDATE table SET VALEUR1 ="'.$_POST[VALEUR1].'" WHERE code= "'.$code.'" ');
}

if (($_POST[VALEUR2])!="")
{
mysql_query('UPDATE table SET VALEUR2 ="'.$_POST[VALEUR2].'" WHERE code= "'.$code.'" ');
}

if (($_POST[VALEUR3])!="")
{
mysql_query('UPDATE table SET VALEUR3 ="'.$_POST[VALEUR3].'" WHERE code= "'.$code.'" ');
}

[...]

Et il y a 132 valeurs à se suivre... Je précise qu'en réalité ces valeurs sont de la forme:
ad_oxy
ad_vent
s_min
s_hours

etc..

Pas de possibilité de faire une boucle for de 1 à 123

Y aurait il un moyen de rassembler tout ceci en une seule requête?
Avec un boucle peut être mais je ne vois pas du tout comment faire.

Merci d'avance

5 réponses

  1. $query = '';  
    
    foreach( $_POST as $key => $value){  
        if($value != ''){  
            if($query != ''){$query .= ',';}  
            $query .= $key .' = "'.$value.'"';  
        }  
    }  
    
    if($query != ''){  
            $req = 'UPDATE table SET '.$query.' WHERE code= "'.$code.'" ';  
    }
    1. Ah je vois ou tu veux en venir, je te propose alors :
      if ($_POST[VALEUR1]!="" && $_POST[VALEUR2]!="" && $_POST[VALEUR3]!="")   
      {  
         $query ="UPDATE table SET ";  
      
         if (($_POST[VALEUR1])!="")  
            $query .= 'VALEUR1 ="'.$_POST[VALEUR1].'",';  
         if (($_POST[VALEUR2])!="")  
            $query .= 'VALEUR2 ="'.$_POST[VALEUR2].'",';  
         if (($_POST[VALEUR3])!="")  
            $query .= 'VALEUR3 ="'.$_POST[VALEUR3].'",';     
         $query = substr($query,0,-1); // pour virer la derniere virgule  
         $query .= ' WHERE code= "'.$code.'" ';  
      
         mysql_query($query);
      }

      Comme ça, seuls les champs non vides sont mis à jour.
      1. if (($_POST[VALEUR1])!="" && $_POST[VALEUR2])!="" && $_POST[VALEUR3])!="")

        les && sont des and ?

        Ca signifierait que pour faire un update il faudrait que VALEUR1 VALEUR2 et VALEUR3 soient != "" ?

        Si oui ce n'est pas ce que je recherche.
        1. Tout simplement :
          if (($_POST[VALEUR1])!="" && $_POST[VALEUR2])!="" && $_POST[VALEUR3])!="")
          {
          mysql_query('UPDATE table SET VALEUR1 ="'.$_POST[VALEUR1].'",  VALEUR2 ="'.$_POST[VALEUR2].'", VALEUR3 ="'.$_POST[VALEUR3].'" WHERE code= "'.$code.'" ');
          }

          En séparant les différents champs avec des virgules donc.