Page 1 sur 1

update sql

Posté : 26 oct. 2006, 23:59
par Jeyz
Bonsoir.

Code : Tout sélectionner

<?php // On commence par récupérer les champs $min1 = $_POST['min1'] ; $min2 = $_POST['min2'] ; $min3 = $_POST['min3'] ; etc etc // On vérifie si les champs sont vides // Aucun champ n'est vide, on peut enregistrer dans la table { // connexion à la base $db = mysql_connect(**************) or die('Erreur de connexion '.mysql_error()); // sélection de la base mysql_select_db('******',$db) or die('Erreur de selection '.mysql_error()); // on écrit la requête sql $sql = mysql_query("UPDATE tbl_tarifs SET min1 = '$min1', max1 = '$max1', min2 = '$min2', max2 = '$max2', min3 = '$min3', max3 = '$max3', min4 = '$min4', max4 = '$max4', min5 = '$min5', max5 = '$max5', mindp = '$mindp', maxdp = '$maxdp', minpension = '$minpension', maxpension = '$maxpension', pdj = '$pdj', taxe = '$taxe', supindiv = '$supindiv', animal = '$animal', WHERE hotel = 'nomdutruc' ") or die( mysql_error()); // on insère les informations du formulaire dans la table // on affiche le résultat pour le visiteur echo '<span class="texterror">Vos infos on été ajoutées.</span><br>'; echo '<span class="recherche"><a href="tarifs.php">Revenir en arriere</a></span>'; mysql_close(); // on ferme la connexion } ?>
Ma question :

Quand je mets à jour mes données (bdd) via un formulaire, dans le cas ou je remplis pas un champ de formulaire, le script va prendre ça pour un vide et va modifier la donnée de la bdd et mettre un vide à la place.

Comment faire pour éviter ça, à part obliger la personne à remplir tous les champs du formulaire?

MercI.

Posté : 27 oct. 2006, 00:14
par Truc
Salut,
Tu peux soit:
1. Préremplir les champs du formulaire avec les données de la BD... s'il n'y a pas eu de changement alors la ligne de donnée (tuple, enregistrement, données d'une personne) sera mis à jour avec les mêmes données.

2. construire une requete dynamique en fonction des champs remplis.
// initialisation d'un tableau pour contenir les différentes mise à jour
$sql_tab = array();
// si le champ n'est pas vide (donc renseigné pour être modifié)
if (!empty($_POST['min1']) )
    $sql_tab[] = "min1 = ".$_POST['min1'] ; 

// idem avec les autres champs
if (!empty($_POST['min2']))
    $sql_tab[] = "min2 = ".$_POST['min2'] ; 

// si'l y a au moins une condition à modifier on exécute la requête
if(count($sql_tab) > 0)
{
   // code de mise à jour
   // je te laisse verifier l'utilité de la fonction implode
   $sql_set = implode(",",$sql_tab);
   // construction de la requête avec les champs à modifier
   $sql = "UPDATE tbl_tarifs SET ".$sql_set." WHERE hotel = 'nomdutruc' ") or die( mysql_error());
}
else 
{
    //tous les champs sont vide
}
Ceci sert juste d'exemple... il y a certainement des choses à pauffiner mais le principe y est.

N'oublis pas de protéger les données reçues par post (addslashes ou autre ) il ne faut pas faire confiance aveuglément

Posté : 27 oct. 2006, 00:14
par Ajoloca
Bonsoir,

Il faut construire ta requête dynamiquement. Tu l'écris en fonction du contenu de tes variables.
$qry = "UPDATE ma_table SET ";
if(isset($chp1) && ! empty($chp1)){
   $qry .= 'mon_champ = \'' . $chp1 . '\'';
}
if(isset($chp2) && ! empty($chp2)){
   $qry .= ', mon_champ2 = \'' . $chp2 . '\'';
}
/* même chose pour chaque champ */
Ceci ne doit pas t'empècher de tester aussi la validité des données transmises par l'utilisateur

Posté : 27 oct. 2006, 10:20
par Ryle
Personnellement je suis d'avantage pour la solution 1 de Truc : pré-renseigner les valeurs et tout écraser à chaque fois.

C'est sans doute moins joli que de construire dynamiquement une requête, mais cela permet à l'utilisateur de vider volontairement un champ, chose que la requête dynamique n'acceptera pas ( => champ vide jamais mis à jour).