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. 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.
    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. 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. $query = '';  
          
          foreach( $_POST as $key => $value){  
              if($value != ''){  
                  if($query != ''){$query .= ',';}  
                  $query .= $key .' = "'.$value.'"';  
              }  
          }  
          
          if($query != ''){  
                  $req = 'UPDATE table SET '.$query.' WHERE code= "'.$code.'" ';  
          }