Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/02/2011, 20h10   #1
 
Inscription : juin 2010
Messages : 39
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 39
Points : -1
Points : -1
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
Citation:
idplaylist
titre
genre
download
champ1
champ2
..
champ16
Code :
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 :
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(); 
    }
    }
?>
KenConnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 22h39   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 11h57   #3
 
Inscription : juin 2010
Messages : 39
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 39
Points : -1
Points : -1
Bon j'ai crée une deuxième table voila ce que ça donne :

Citation:
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 ...


Citation:
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
KenConnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h54.


 
 
 
 
Partenaires

Hébergement Web