PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 12-02-2013 13:00:22

clairon
Membre
Inscription : 12-02-2013
Messages : 2

RESOLU PDO, requête UPDATE qui boude, mais seulement de temps en temps

Bonjour à tous,

Je viens requérir votre aide ou vos conseils sur un problème obscur que j'ai depuis quelques jours déjà.
Une de mes fonctions "marchotte".

Ma base de données contient plusieurs tables dans lesquelles 2 champs sont récurrents : affichage des infos & ordre d'apparition des infos (pour ce qui me préoccupe).

J'ai donc créé une fonction "générique" afin de mettre à jour ces champs dans les différentes tables.

Quel que soit le champ (affichage ou ordre) à modifier dans ma table, les valeurs transmises dans ma fonction "arrivent" bien et sont du bon type (numérique : int, chaîne de caractères : string, ou nul : NULL).
Mon problème est le suivant (enfin il me semble, je suis un peu novice partout):
Lorsque je veux modifier l'ordre (de type int ou null), tout fonctionne bien.
En revanche, lorsque je modifie l'affichage(exclusivement de type string), là, rien ne se passe dans ma base de données.

J'ai effectué des var_dump dans ma fonction à droite à gauche, et j'ai remarqué que lorsque j'effectue un var_dump($requete); (il est commenté dans le code), les paramètres de mes bindValue ne "passent" pas. Je ne sais pas si c'est bien clair mais testez par vous mêmes... 


<?php
//MAJ TABLE  
    function maj_table($table, $nom_champ_a_modif, $id, $modification)
    {
        //echo '<br/>'.$table.' - '.$nom_champ_a_modif.' - '.$id.' - '.$modification;
    $id = (int) $id;
    //array(nom_tables_autorisées,suffixe_champs_table)
    $array_tables_ok = array(
      array('production','prod'),
      array('technique','tech')
    );
   
        //parcours array_tables_ok par ligne
    foreach ($array_tables_ok as $ligne)
    {
      //si table existe ds 1 ligne
      if(in_array($table, $ligne))
      {
        //$table = $ligne[0];
        $tbl = $ligne[1];
        //array_champs_autorisés()
        $array_champs_ok = array($tbl.'_aff', $tbl.'_ordre');
   
        //si nom_champ_a_modif existe
        if(in_array($nom_champ_a_modif, $array_champs_ok))
        {
          //req
          $pdo = PDO2::getInstance();
          $requete = $pdo->prepare('
            UPDATE '
.$table.' SET '
              .$nom_champ_a_modif.'=:champ
            WHERE '

              .$tbl.'_id=:id');
          $requete->bindValue(':champ', $modification, PDO::PARAM_STR||PDO::PARAM_INT||PDO::PARAM_NULL);
          $requete->bindValue(':id', $id, PDO::PARAM_INT);
         
          //var_dump($requete);

          if ($requete->execute()) {
            $requete->closeCursor();
            return true;
          }
          return $msg_erreur[]=$requete->errorInfo();
        }
        //sinon nom_champ_a_modif existe pas
        return $msg_erreur[]='Erreur de dénomination de champ.
        <br/>Le champ <b><i>'
.$nom_champ_a_modif.'</i></b> n\'existe pas dans la table demandée : <b><i>'.$table.'</i></b>.';
      }
    }
        //sinon table existe pas
        return $msg_erreur[]='Erreur de dénomination de table.
        <br/>La table <b><i>'
.$table.'</i></b> n\'existe pas dans la base de données.';
    }
 

Je ne parviens pas à savoir ce qui ne colle pas, ce qui m'a échappé ou que je n'ai pas comprit...
Si vous aviez une piste ou une idée de recherche, je suis complètement coincée.
Merci d'avance de votre aide à tous.
Clairon

Dernière modification par clairon (13-02-2013 02:48:44)

Hors ligne

#2 13-02-2013 02:47:47

clairon
Membre
Inscription : 12-02-2013
Messages : 2

Re : RESOLU PDO, requête UPDATE qui boude, mais seulement de temps en temps

smile ben en fait il n'y a pas d'erreur dans ce code. j'ai tout reprit, retiré une ancre et il semble que cela fonctionne.
Merci tout de même wink

Hors ligne

Pied de page des forums