Problème avec un update à partir d'un tableau

Résolu
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 - 14 mars 2008 à 10:29
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 - 19 mars 2008 à 10:34
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

kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011
19 mars 2008 à 10:34
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
3
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011
14 mars 2008 à 17:20
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
15 mars 2008 à 07:16
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" ?
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011
17 mars 2008 à 10:46
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 mars 2008 à 19:28
et ta requête, tu l'exécutes où?
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011
17 mars 2008 à 19:42
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
0
Rejoignez-nous