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

PHP & Base de données Discussion :

Mise à jour d'une colonne. [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Points : 84
    Points
    84
    Par défaut Mise à jour d'une colonne.
    bonjour à tous,

    Je voudrais mettre à jour une base de donnée. En fait c'est juste une colonne ordre que je met à jour en fonction de l'id.
    Ma requète est une fonction adaptée pour mettre à jour une base de donnée à partir d'un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbiUpdateBDArray('stream_structure_2', 'sturct_id', $id, $Data);
    ce qui devrait donner :
    Code : 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
     
    UPDATE stream_structure_2 SET struct_ordre='1' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='2' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='3' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='4' WHERE sturct_id=''  
    UPDATE stream_structure_2 SET struct_ordre='5' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='6' WHERE sturct_id=''
    UPDATE stream_structure_2 SET struct_ordre='7' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='8' WHERE sturct_id=''  
    UPDATE stream_structure_2 SET struct_ordre='9' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='10' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='11' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='12' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='13' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='14' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='15' WHERE sturct_id='' 
    UPDATE stream_structure_2 SET struct_ordre='16' WHERE sturct_id=''
    Bref autant que j'ai d'enregistrement. Mais le problème comme vous le voyez c'est que mon id est vide. Donc ma base n'est pas mise à jour vu que l'ordre n'est donné à aucun id. Sauriez-vous pourquoi ?

    Voici le code de la fonction qui permet de mettre à jour :

    Code : 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
    44
    45
     
     
     
        $div_ordre = $_POST['div_ordre'];    
     
        $ordre = 1;
        $tab_structure = explode(',', $div_ordre);;
     
     
        // Parcours des champs du formulaire pour enregister chaque ligne
     
        foreach ($_POST as $k => $v)
        {
     
            if (!$v)
                continue;
            if (! ereg("^lst_sturct_id([0-9]+)$",$k,$o)) continue; // On ne recherche que les champs hidden embarquant l'id de la bdd
                $ligne = $o[1];
                 // numéro de la ligne en cours de traitement
            $id = $v;
     
                   // L'id de l'enregistrement est la valeur de ce champs
            $Data = array(); // Créer un tableau vide pour stoker les valeurs à enregistrer
            $Data['struct_type_stream'] = $_POST['type_'.$ligne];
            $Data['struct_nom'] = $_POST['nom_'.$ligne];
            $Data['struct_libelle'] = $_POST['libelle_'.$ligne];
            $Data['struct_datatype'] = $_POST['datatype_'.$ligne];
     
     
            if ($id)
            { // Si un id est dispo => enregistrement existant à modifier, sinon enregistrement à créer
     
     
            foreach ($tab_structure as $k => $v)
            {
     
                        $id = substr($v, 7);
                        $Data = array();
                        $Data['struct_ordre'] = $ordre;
     
     
            } 
     
            dbiUpdateBDArray('stream_structure_2', 'sturct_id', $id, $Data);
            $ordre++;
    Si vous voyez la petite erreur où ce qu'il peut manquer.
    Merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            foreach ($tab_structure as $k => $v)
            {
                        $id = substr($v, 7);
                        $Data = array();
                        $Data['struct_ordre'] = $ordre;
            }
    Et si tu plaçais : $Data = array(); avant ta boucle ?

    Après, je ne connais pas le code de ta fonction dbiUpdateBDArray(). La seule chose que je sais, c'est que le quatrième paramètre semble être un Array.

  3. #3
    Membre régulier Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Points : 84
    Points
    84
    Par défaut
    salut,

    j'ai bien placé la ligne que tu ma dis avant le foreach mais cela n'a rien changé.

    effectivement le dernier paramètre de ma fonction dbiUpdateBDArray() est un array.

    Voici le code si sa peut vous aider :

    Code : 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
     
     
    function dbiUpdateBDArray($table,$nom_cle,$val_cle,$data)
    {
        dbiConnexionBD();
        $sep = "";
        if (is_array($nom_cle) and is_array($val_cle))
            {
            for($i=0;$i<count($nom_cle);$i++)
                {
                $where .= $sep . $nom_cle[$i] . "='" . addslashes(stripslashes($val_cle[$i])) . "'";
                $sep = " AND ";
                }
            }
        else
            $where = $nom_cle . "='" . addslashes(stripslashes($val_cle)) . "'";
     
        $sep = "";
        while ( list($key,$val) = each($data) )
           {
           if ($val === null)
               $UpdateField .= $sep . $key ."=null";
           else
               $UpdateField .= $sep . $key ."='" . addslashes(stripslashes($val)). "'";
           $sep = ", ";
           }
        $sql = "UPDATE $table SET $UpdateField WHERE $where";
        dbiDoBD($sql);
    }
    Encore merci.

  4. #4
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Fais dans ta fonction dbiUpdateBDArray() un :
    Il me semble que la variable soit à null.

    Je te conseille d'utiliser d'autres noms de variable pour le second foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        foreach ($_POST as $k => $v)
        {
            foreach ($tab_structure as $k => $v)
            {
     
            }

  5. #5
    Membre régulier Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Points : 84
    Points
    84
    Par défaut
    salut,

    j'ai donc bien changé mes noms de variable.

    En mettant le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var_dump($val_cle)

    j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)

    J'ai fais la même chose avec id dans la fonction de mise à jour

    et j'obtiens le même résultat.


    J'ai essayé quelque chose :

    j'ai mis le update dans mon foreach comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    foreach ($tab_structure as $cle => $valeur)
            {
     
     
     
     
                        $id = substr($valeur, 7);
                        $Data = array();
                        $Data['struct_ordre'] = $ordre;
                          dbiUpdateBDArray('stream_structure_2', 'sturct_id', $id, $Data); 
     
            }
    Là ma table se met à jour mais me fait une multitude d'update. Au lieu de mettre à jour la colonne c'est toutes les lignes je pense qu'elle met à jour donc ce n'est pas bon. Donc je ne sais pas si cela peut peut-être vous aider.

    Encore merci.

  6. #6
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Ok, alors le problème vient de cette ligne :
    Pourquoi choisir 7 au passage ?
    D'aillers, pourquoi cette ligne ?

    Si tu regardes un peu plus haut que cette ligne, il y a déjà une variable existante $id. Si tu pouvais m'éclaircir cela .

  7. #7
    Membre régulier Avatar de kifouillou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 270
    Points : 84
    Points
    84
    Par défaut
    olalalala. J'en reviens pas. J'avais juste cette pauvre ligne à enlever.

    Ben en fait si j'ai mis cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $id = substr($v, 7);
    C'était parce qu'en fait je récupère un ordre de div que je met dans un champ div_ordre. Ensuite comme les différentes div sont séparés par des virgules je les explodes dans un tableau. Et le substring c'était juste pour récupérer que le numéro de l'id de la div car mon id c'est ddentry$i. C'est pour cela que je mettais le chiffre 7. Mais en fait j'aurais eu besoin de cela si j'avais fais un update pour l'ordre et un update pour les champs. Hmmmmmm. Merci à toi en tout cas. Là-dessus je suis impardonnable. C'était pourtant facile à voir. Moi je pensais que c'était un problème de placement. Mais non.

    Encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jour d'une colonne: update avec case
    Par MangoZaz dans le forum Langage SQL
    Réponses: 9
    Dernier message: 05/09/2014, 09h55
  2. [AC-2003] Mise à jour d'une colonne par une autre colonne
    Par candrau dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/06/2011, 09h48
  3. Réponses: 3
    Dernier message: 25/11/2010, 11h59
  4. Réponses: 7
    Dernier message: 20/08/2009, 01h48
  5. [O10g] Requête de mise à jour d'une colonne
    Par davasm dans le forum SQL
    Réponses: 2
    Dernier message: 07/04/2009, 09h02

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