Problème avec un update à partir d'un tableau [Résolu]

Signaler
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
-
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011
-
bonjour,

j'ai un petit problème de mise à jour d'une base. J'ai une fonction qui permet d'afficher des champs puis une autre fonction qui met à jour la base lorsque ces champs sont modifiés.

Dans ma fonction de validation je parcours mon tableau de champs avec un foreach et ensuite je fais un update.

function pimpValiderStructureDocument($html)
{
   

       
        // boucle pour parcourir le tableau contenant les enregistrements
       
       
       
        foreach($_REQUEST as $k => $v)
        {
               
                $k = split ("_", $sturct_id, 7);
               

$sql = "UPDATE stream_structure_2
set struct_type_stream='" . $struct_type . "', struct_nom='" .  $struct_nom   . "', struct_libelle='" . $struct_libelle . "', struct_datatype='" . $struct_datatype . "'
where sturct_id='" . $_POST['sturct_id'] . "'" ;

}

Lorsque je fais un echo de $v il m'affiche bien tous les champs donc c'est bien le update qui n'est pas bon. Merci de votre aide.

olivier

6 réponses

Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011

bonjour à tous,

sa y es j'ai résolu mon problème. J'ai appris un truc très utile en php, c'est les regex. Et encore je trouve que celle que j'ai utilisé est pas compliqué. Je vous donne donc ma solution commentée, si quelqu'un à l'avenir à le même souci.

Le formulaire :

            Type :

            Nom :

            Libelle :

            Type des données :
              

        

        $struct_type = $R['struct_type_stream'];
        $struct_nom = $R['struct_nom'];
        $struct_libelle = $R['struct_libelle'];
        $struct_datatype = $R['struct_datatype'];
        $sturct_id = $R['sturct_id'];
    }

    <style type=text/css>
    div.ddentry { border:1px solid #999; border-left:20px solid #999;margin-bottom:4px; padding:4px; }
    </style>
    Gestion des documents de type $type

    <form name="form" id="form" method=post action='$_SERVER[PHP_SELF]'>
   
   
    $html
   
    </form>

et le code permettant de valider avec la regex :

function pimpValiderStructureDocument($html)
{
   
   

    // Parcours des champs du formulaire pour enregister chaque ligne
    $struct_ordre=1;
    foreach ($_POST as $k => $v)
    {
        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];
        $Data['struct_ordre'] = $ordre;

        if ($id){ // Si un id est dispo => enregistrement existant à modifier, sinon enregistrement à créer
            dbiUpdateBDArray('stream_structure_2', 'sturct_id', $id,  $Data);
           $struct_ordre++;
        }
        else
            dbiInsertBDArray('stream_structure_2', $Data);
    }

        
}

olivier
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011

Désolé d'avoir créer mon message en double, c 'est une erreur de ma part. Par contre pour mon update j'ai un peu réfléchi sans toutefois trouver de solution car niveau code y a pas d'erreur donc il doit y avoir un oubli de ma part.

$k est un tableau et c'est les valeurs de $k que je veux mettre à jour. Mon update n'a pas d'erreur(enfin je pense) mais il ne met ien à jour donc je pense qu'il faut utiliser le $v mais je ne maitrise pas les tableaux donc pouvez vous me dire comment je peux mettre ma base à jour à partir du tableau?
Si c'est possible bien sur.

Merci d'avance.

olivier
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

je ne pige rien à ce que tu racontes. Mets ton code d'update en entier, parce que là il manque des trucs (j'espère!).

PS : c'est normal le "sturct_id" au lieu de "struct_id" ?
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011

Bonjour,

Oui oui le sturct-id est normal. C'est parce que mon champ s'appelle comme cela. Donc comme cela sa me permet de m'en souvenir en mettant le même nom de variable.

En fait le problème a un petit peu changé. L'update doit se faire à partir d'un draganddrop réalisé avec l'API YUI en javascript. Donc ce que je veux mettre à jour c'est l'ordre des enregistrements que j'a réalisé avec le draganddrop.

voilà le code html de mes champs contenues dans une div :

            Type :

            Nom :

            Libelle :

            Type des données :
           
        

et voilà la fonction pour mettre à jour :

$sturct_id = $_POST['sturct_id'];
        $struct_type = $_POST['type'];
        $struct_nom = $_POST['nom'];
        $struct_libelle = $_POST['libelle'];
        $struct_datatype = $_POST['datatype'];
       
        // boucle pour parcourir le tableau contenant les enregistrements
       
       
       
        foreach($_REQUEST as $k => $v)
        {
               
            $k = split ("_", $sturct_id, 7);            $iniContent .$key.' "'.$value   

            $sql = "update stream_structure_2
                    set struct_type_stream='" . $struct_type . "', struct_nom='" . $struct_nom . "', struct_libelle='" . $struct_libelle . "', struct_datatype='" . $struct_datatype . "'
                    where sturct_id='" . $sturct_id . "'" ;
               
        }   

Voilà, j'espère que c'est un peu plus clair.
Merci encore.

olivier
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
et ta requête, tu l'exécutes où?
Messages postés
170
Date d'inscription
mardi 27 septembre 2005
Statut
Membre
Dernière intervention
28 janvier 2011

Lorsque j'appuie sur le bouton valider de mon formulaire sa m'envoie vers une fonction qui valide le changement.  C'est dans cette fonction valider que j'exécute la requète que tu vois plus haut.

olivier