IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

update : si variable null garder la même valeur dans la table


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut update : si variable null garder la même valeur dans la table
    Bonsoir,
    Pour administrer ma petite application pour mon projet, l'administrateur peut insérer modifier et supprimer des catégories recettes etc.. Je me pose une question pour la modification :
    ex. table categories(nom, photo)
    je crée un formulaire puis une requête préparée update... mais si l'administrateur veut juste changer le nom et ne pas changer la photo ? est ce que il y aurait une fonction qui en cas de null on garde la meme valeur ? est ce que coalesce() peut servir dans ce cas ?
    merci

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 376
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 376
    Billets dans le blog
    17
    Par défaut
    Si tes placeholders :nom ou :photo sont NULL alors tu gardes la valeur actuelle :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE categories
    SET nom = COALESCE(:nom, nom), photo = COALESCE(:photo, nom)
    WHERE id = :id;

    Si tu as du mal à envoyer un NULL SQL, tu peux utiliser NULLIF() :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE categories
    SET
        nom = COALESCE(NULLIF(:nom, ''), nom), -- NULL si le nom est une chaîne vide
        photo = COALESCE(NULLIF(:photo, 0), nom) -- NULL si l'ID photo vaut 0, pour l'exemple :)
    WHERE id = :id;

  3. #3
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut
    Bonjour,
    merci pour votre aide je vais tester ce matin.

  4. #4
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut
    Bonjour,
    J'ai testé comme vous m'avez conseillé mais j'ai un souci juste pour la photo, j'ai aussi fais une erreur dans mon explication ma table categories(id_cat, nom, photo), dans ma colonne photo il y a les chemins des photos et non l'image de stockée.
    ma fonction :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function modifybyCategorie($id_cat, $nom, $photo) {
                    $req = $this->bdd->prepare ("UPDATE categories SET
                                                nom = COALESCE(NULLIF(:nom, ''), nom), 
                                                photo = COALESCE(:photo, photo) 
                                                WHERE id_cat = :id_cat;)");
                    $req->bindParam(':id_cat', $id_cat);
                    $req->bindParam(':nom', $nom);
                    $req->bindParam(':photo', $photo);
                    $req->execute();
    mon formulaire :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <div class= "col-md-5 border border-grey p-3 m-3 ">
            <form  action="administration.php" enctype="multipart/form-data" method="post">
                <h5>modifier ou supprimer une catégorie</h5>
                <div class="form-group mb-3">
                    <select select class ="form-select" name="modifyCategorie">
                    <option  selected>choisissez</option>
                    <?php foreach($categories as $cat) : ?>
                    <option value="<?=$cat['id_cat']?>"><?=$cat['nom']?></option>
                    <?php endforeach?>  
                    </select>
                </div>
                <div class="form-group mb-3">
                    <label for="nom">nom </label>
                    <input type="text" class="form-control" name="modifyNom" value="">  
                </div>
                <div class="form-group mb-3">
                    <label for="affiche">photo </label>
                    <input type="file" class="form-control-file d-block bg-white p-3" name="modifyFile" value=''>
                </div>
                <input type="submit" name="submitModifyCat" class=" mb-3" value="modifier">
                <input type="submit" name="submitdeleteCat" class=" mb-3" value="supprimer">
            </form>
        </div>
    Si je sélectionne une catégorie et je rempli les champ nom et je charge une photo c'est ok tout marche bien
    Si je sélectionne une catégorie et je charge juste la photo sans saisir le nom c'est ok aussi
    Si je sélectionne une catégorie et je saisi dans le champ nom, sans charger d'image(pour garder la meme), l'image n'est pas gardé et à la place je me retrouve un chemin de photo sans extension et surtout l'image n'est pas présente dans mon dossier upload.
    j'ai fais un var_dump et voici : \admin\administration.php:96:string '../upload/63b57701c3bd3.' je trouve la meme chose dans ma base de donnée.

    Y a t il un problème dans ce code? :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    //modifier une catégorie
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if(isset($_POST["submitModifyCat"])) {
                $tmpName = $_FILES['modifyFile']['tmp_name'];
                $nom = $_FILES['modifyFile']['name'];
                $taille = $_FILES['modifyFile']['size'];
                $erreur = $_FILES['modifyFile']['error'];
                $tailleMax = 400000;
                // Récupération de l'extension
                $extension = pathinfo($_FILES['modifyFile']['name'], PATHINFO_EXTENSION);
                $extensions = ['jpg', 'png', 'jpeg', 'gif'];
     
                // Création du nouveau nom avec un UUID
                $nomFichier = uniqid() . "." . $extension;
                //chemin fichier
                $dossier = '../upload';
                $chemin ='../upload/' . $nomFichier;
     
     
            $modifyCategorie = $categoriesController->modifybyCategorie($id_cat= $_POST['modifyCategorie'],
                                                                         $nom = $_POST['modifyNom'], 
                                                                         $photo=$chemin);
            if (isset($_FILES['modifyFile']) AND $_FILES['modifyFile']['error'] == 0){
     
                //verification de l'extensions et la taille
                if(in_array($extension, $extensions)){
                    //verification du dossier 
                    if(!is_dir($dossier)) {
                        mkdir($dossier);
                        move_uploaded_file($_FILES['modifyFile']['tmp_name'], $chemin);
                    } else {
                     move_uploaded_file($_FILES['modifyFile']['tmp_name'], $chemin);
                     echo "L'envoi a bien été effectué !";
                    }
                } else {
                    echo "Mauvaise extension ou fichier trop volumineux";
                }
     
            } else {
                echo "la photo reste identique";
            }
        }
    }
    merci

Discussions similaires

  1. [AC-2007] Garder la même valeur précédente pour le nouvel enregistrement
    Par austin974 dans le forum Access
    Réponses: 3
    Dernier message: 22/03/2015, 15h32
  2. [WRS] Garder la même valeur de filtre entre deux sections
    Par Dr Byby'San dans le forum Outils BI
    Réponses: 2
    Dernier message: 16/07/2013, 19h44
  3. Réponses: 1
    Dernier message: 11/10/2012, 19h31
  4. Insérer les mêmes valeurs dans plusieurs tables
    Par hsoussou dans le forum SQL*Loader
    Réponses: 8
    Dernier message: 29/03/2010, 17h14
  5. casting DWORD en string, garder la même valeur
    Par titouille dans le forum SL & STL
    Réponses: 2
    Dernier message: 19/08/2005, 21h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo