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 PHP Discussion :

variable dynamique sql


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Points : 12
    Points
    12
    Par défaut variable dynamique sql
    Bonjour à tous, je bloque sur l'insertion de la variable "champ" dans ma base.

    Explications : J'ai dans mon formulaire, un champ ou l'ont doit rentrer un nombre. En fonction de son nombre, le formulaire affiche x champ.

    Le problème c'est que je n'arrive pas à modifier ma requete sql pour ajouter les x champs .

    Structure de ma base
    idplaylist
    titre
    genre
    download
    champ1
    champ2
    ..
    champ16
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <?php
        // si l'utilisateur soumet le formulaire on affiche la valeur de tous les champs du formulaire
        if (isset($_POST['submit']) && $_POST['submit'] == "Envoyer")
        {
    		// on affiche le nombre de champs du formulaire
    		//echo 'Nombre de champs : '.$_POST['nb_champs'].'<br />';
     
    		// on affiche la valeur des champs du formulaire
    		    for ($i=1; $i<=$_POST['nb_champs']; $i++)
            {
    				$dynamique = 'champs_'.$i;
    				$champ = $_POST[$dynamique];
     
    				//echo 'Champ '.$i.' : '.$champ.'<br />';
    		    } 
    		$idplaylist=$_POST['idplaylist'];    
    		$titre=$_POST['titre'];
        $genre=$_POST['genre'];
        $download=$_POST['download'];
        $playlist=new playlist($db);  
        $nb=$playlist->insertAll($idplaylist, $titre, $genre, $download, $champ);
     
     
                      if($nb!=1)
                      {
                      echo'Erreur';
                      }
                      else
                          {
                            echo'Votre message à bien été envoyé !<br />'; 
                            echo'Vous allez être redirigé dans quelques secondes..';      
                            echo'<script LANGUAGE="JavaScript">
                            setTimeout("window.location=\'index.php?page=comixhouse.php\'",6000); 
                            // delai d\'attente en ms
                            </script> ';
                          } 
     
          }
     
     
        // sinon on affiche le formulaire avec la possibilité d'ajout des champs au formulaire
        else
        {
    		        // on défini le nombre initial de champs
    		        if (!isset($_POST['nb_champs']))
                {
    				    $_POST['nb_champs'] = 1;
    		        }
     
    		        // si la personne clic sur "un champs en +", on ajoute un champs
    		        if (isset($_POST['submit']) && $_POST['submit'] == "Un champs en +")
                {
    			     	$_POST['nb_champs']++;
    		        }
     
    		// on affiche le formulaire
    		echo' <form onsubmit="return verif()"action="index.php?page=ajoutplaylist.php" method="POST"  enctype="multipart/form-data">';
    		// on place un champ caché contenant un entier ayant comme valeur le nombre de champs du formulaire
    		echo '<INPUT TYPE="hidden" NAME="nb_champs" VALUE="'.$_POST['nb_champs'].'">';
     
     
         echo'
          <input type ="hidden" id="idplaylist" name="idplaylist"/>
            <p><label for="titre">Titre :</label>
            <input type ="text" id="titre" name="titre" />
            </p>
        
            <p><label for="genre">Genre :</label>
            <input type ="text" id="genre" name="genre" />
            </p>
        
            <p><label for="download">Download :</label>
            <input type ="text" id="download" name="download" />
            </p> ';
    		// on affiche tous les champs du formulaire
    		    for ($i=1; $i<=$_POST['nb_champs']; $i++)
            {
    				echo '
        
            <p><label for="champ">Champ '.$i.' :</label>
            <INPUT TYPE="text" name="champs_'.$i.'" id="champs_'.$i.'"></p><br />';
    		    }
     
    		// on place un bouton permettant de rajouter un champs
    		echo '<INPUT TYPE="submit" NAME="submit" VALUE="Un champs en +"><br />';
    		// on place un bouton permettant de soumettre le formulaire
    		echo '<INPUT TYPE="submit" NAME="submit" VALUE="Envoyer">';
    		echo '</FORM>';
     
        }
     
     
    ?>
    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
    <?php
        class playlist
        {
     
          private $selectAll;
          private $insertAll;
          private $deleteOne;
     
          public function __construct($db)
          {
          $this->selectAll = $db->prepare("select * from playlist ");
          $this->insertAll=$db->prepare("INSERT INTO playlist values (:idplaylist, :titre, :genre, :download, :champ)");
          $this->deleteOne=$db->prepare("delete from livre where idplaylist=:idplaylist");
          }
     
     
     
          public function selectAll()
          {
          $this->selectAll->execute();
          return $this ->selectAll->fetchAll();
          }
     
            public function insertAll($idplaylist, $titre, $genre, $download, $champ)                  // paramétres (valeurs insérées dans la table)
        {
          $this->insertAll->execute(array(':idplaylist'=>$idplaylist, ':titre'=>$titre, ':genre'=>$genre, ':download'=>$download, 'champ'=>$champ ));     // execution de la requete
          return $this->insertAll->rowCount();                // fetchall renvoie tout les resultats
        }
     
     
         public function deleteOne ($idplaylist)  // entre les () => paramètres
        {
         $this->deleteOne->execute(array(':idplaylist'=>$idplaylist));
         return $this->deleteOne->rowCount(); 
        }
        }
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ta structure de table n'est pas bonne.
    Plutot que d'avoir champ1, champ2, champ3 etc, tu devrais avoir une autre table qui contient les champs annexes (id, valeur).
    Ton code fonctionne ainsi sans se soucier de nombre de champs.

    Faire autrement va vite relever du bricolage.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Points : 12
    Points
    12
    Par défaut
    Bon j'ai crée une deuxième table voila ce que ça donne :

    Structure de la base

    Table N°1
    playlist
    idplaylist (clé primaire)
    titre
    genre
    download

    Table N°2
    champ
    idchamp (clé primaire)
    nomchamp
    idplaylist (clé étrangère)

    et l'affichage ...


    IDplayliste 1
    Champ1 playliste 1

    IDplaylist 2
    Champ1 playliste 1

    IDplayliste 1
    Champ2 playliste 1

    IDplayliste 2
    Champ2 playliste1

    IDplayliste 1
    Champ3 playliste 1

    IDplayliste 2
    Champ3 playliste 1
    problème au niveau de la requête sql je pense
    il m'affiche plusieurs fois le même idplaylist, les champs se mélangent parmi les playlistes :/ mais je ne trouve pas la bonne requête sql a envoyé pour qu'il me récupère chaque champs de chaque playlistes

Discussions similaires

  1. Déclaration de variable dynamiquement sous pl/sql
    Par madina dans le forum PL/SQL
    Réponses: 6
    Dernier message: 07/05/2008, 18h12
  2. Réponses: 10
    Dernier message: 02/02/2007, 00h02
  3. [Oracle 9i] Bind variables et sql dynamique
    Par jld_33 dans le forum Oracle
    Réponses: 17
    Dernier message: 09/06/2006, 11h49
  4. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 11h44
  5. [LG]Problême Variable dynamique de types différents
    Par pierrOPSG dans le forum Langage
    Réponses: 2
    Dernier message: 29/04/2004, 16h01

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