Update mais uniquement les champs remplis

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Update mais uniquement les champs remplis

par Cyrano » 13 déc. 2006, 22:49

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

par netsupra » 13 déc. 2006, 22:36

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.

par Super_baloo8 » 13 déc. 2006, 22:15

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

par Super_baloo8 » 13 déc. 2006, 22:01

Impecable !!!! Ca marche du feu de dieu, merci !

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

par Cyrano » 13 déc. 2006, 21:16

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

par Super_baloo8 » 13 déc. 2006, 20:47

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'];

Update mais uniquement les champs remplis

par Super_baloo8 » 13 déc. 2006, 20:36

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.