Page 1 sur 1

Update mais uniquement les champs remplis

Posté : 13 déc. 2006, 20:36
par Super_baloo8
Bonsoir tout le monde ;)

Je viens vers vous car je n'arrive pas à trouver la réponse à mon problème.

Le contexte :

Lors d'un envoi de formulaire, je souhaite récupérer toutes les valeurs pour les mettre à jour dans ma table.

Le problème est que tout les champs ne sont pas obligatoire.

La question :

Comment faire pour que je n'envoie que les champs "non nul" donc envoyer que les champs remplis et laisser les champs vide.

Pour l'instant mon code se résume à celui ci :

Code : Tout sélectionner

$req = "update identifiant set password='".$password."' email='".$email."' nom='".$nom."' prenom='".$prenom."' date_naissance='".$date_naissance."' profession='".$profession."' description_prof='".$description_prof."' passion='".$passion."' avatar='".$cheminPhoto."' where id='".$id."'"; $dem=mysql_query($req);

Merci pour votre aide.

Posté : 13 déc. 2006, 20:47
par Super_baloo8
J'ai trouvé une solution mais elle est bien lourde, si vous pouviez m'aider à eviter de faire autant de requete, merci :)
if(!empty($password))
{
$req1 = "update identifiant set password='".$password."' where id='".$id."'";
$dem1=mysql_query($req1);
}
if(!empty($email))
{
$req2 = "update identifiant set email='".$email."' where id='".$id."'";
$dem2=mysql_query($req2);
}
if(!empty($nom))
{
$req3 = "update identifiant set nom='".$nom."' where id='".$id."'";
$dem3=mysql_query($req3);
}
if(!empty($prenom))
{
$req4 = "update identifiant set prenom='".$prenom."' where id='".$id."'";
$dem4=mysql_query($req4);
}
if(!empty($date_naissance))
{
$req5 = "update identifiant set date_naissance='".$date_naissance."' where id='".$id."'";
$dem5=mysql_query($req5);
}
if(!empty($profession))
{
$req6 = "update identifiant set profession='".$profession."' where id='".$id."'";
$dem6=mysql_query($req6);
}
if(!empty($description_prof))
{
$req7 = "update identifiant set description_prof='".$description_prof."' where id='".$id."'";
$dem7=mysql_query($req7);
}
if(!empty($passion))
{
$req8 = "update identifiant set passion='".$passion."' where id='".$id."'";
$dem8=mysql_query($req8);
}
if(!empty($cheminPhoto))
{
$req9 = "update identifiant set avatar='".$cheminPhoto."'  where id='".$id."'";
$dem9=mysql_query($req9);
}
$veux = "select * from identifiant where login = '".$login."'";
$data=mysql_fetch_assoc($veux);

	$_SESSION['id'] = $data['id'];
	$_SESSION['login'] = $data['login'];
	$_SESSION['nom'] = $data['nom'];
	$_SESSION['prenom'] = $data['prenom'];
	$_SESSION['date_naissance'] = $data['date_naissance'];
	$_SESSION['email'] = $data['email'];
	$_SESSION['profession'] = $data['profession'];
	$_SESSION['description_prof'] = $data['description_prof'];
	$_SESSION['passion'] = $data['passion'];
	$_SESSION['avatar'] = $data['avatar'];

Posté : 13 déc. 2006, 21:16
par Cyrano
Construis ta requête dynamiquement :
D'abord le début de la requête :
$sql = "update identifiant set ";
Et ensuite tu crées un tableau pour les champs à mettre à jour:
$maj_champs = array();
if(!empty($password))
{
    $maj_champs[] = "password='". $password ."'";
}
if(!empty($email))
{
    $maj_champs[] = "email='".$email."'";
}
//... etc...
Pour finir, tu comptes les clauses pour vérifier que tu en as au moins une :
if(count($maj_champs) > 0)
{
    $sql .= implode (", ", $maj_champs);
}
Et on termine avec la clause WHERE :
$sql .= " WHERE id='".$id."'";
/* Affichage de vérification (débugage seulement) */
echo("<code>". $sql ."<code>");
/* Exécution */
$exec = mysql_query($sql);

Posté : 13 déc. 2006, 22:01
par Super_baloo8
Impecable !!!! Ca marche du feu de dieu, merci !

(plus d'info grid-france.fr/version2)

Posté : 13 déc. 2006, 22:15
par Super_baloo8
Cyrano, sur ton site, ton CV à un lien cassé (localhost) au niveau du lien de contact (en haut a droite)

http://jem-web.info/cv/simplifie/cv.html

Posté : 13 déc. 2006, 22:36
par netsupra
Lut, je t'ai fait ca tout a l'heure, mais j'ai oublié de le poster... a tout hasard je le met quand meme.

Code : Tout sélectionner

$req = "update identifiant set password='".$password."' email='".$email."' nom='".$nom."' prenom='".$prenom."' date_naissance='".$date_naissance."' profession='".$profession."' description_prof='".$description_prof."' passion='".$passion."' avatar='".$cheminPhoto."' where id='".$id."'"; $dem=mysql_query($req);
A mon avis, tu gagnerais en clarté dan ston code en ecrivant plutot :

Code : Tout sélectionner

$req = "UPDATE identifiant SET password='$password' email='$email' nom='$nom' prenom='$prenom' date_naissance='$date_naissance' profession='$profession' description_prof='$description_prof' passion='$passion' avatar='$cheminPhoto' where id='$id'"; $dem=mysql_query($req);
Mais la n'est pas la question, pour ton problème, je pense a une fonction qui te construirait ta requete de cette manière :
function makesql($champs, $table, $condition)
{
     $requete = 'UPDATE ' . $table . ' SET '
     for ($i=0; $i<count($champs); $i++)
     {
          if (isset($_post[$champs[$i]])&&!empty($_post[champs[$i]]);
               $requete .= "'" . $champs[$i] . "' = " . ${$champs[$i]} . isset($champs[$i+1])?', ':' ';
     }
     $requete .= 'WHERE ' . $condition;
return $requete;
}
où champs est un tableau contenant les champs a tester, $table est la table sur laquelle faire la requete, condition, la condition qui va determiner l'enregistrement a mettre a jour.
Seul obligation : les champs du formulaire doivent porter le meme nom que ceux de la base de données.

Posté : 13 déc. 2006, 22:49
par Cyrano
Cyrano, sur ton site, ton CV à un lien cassé (localhost) au niveau du lien de contact (en haut a droite)

http://jem-web.info/cv/simplifie/cv.html
merci pour l'info, je vais corriger tout de suite :)