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 :

Enregistrement d'un formulaire créé à partir de données extraites d'une base de données


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut Enregistrement d'un formulaire créé à partir de données extraites d'une base de données
    Bonjour à tous,

    Je me tourne vers vous car j'ai un "bug mental" concernant une action que je dois faire: je ne sais absolument pas par où prendre ce problème.
    Je vous explique mon cas:

    En fait j'ai créé différentes fiches produits qui sont stockées dans une BDD.
    J'aimerai relier ses fiches produits dans des packs avec la possibilité de mettre chacun des produits en "inclus","optionnel","sur devis", ...

    A l'heure actuelle, tout est créé :
    • Bdd produit
    • Bdd pack
    • Bdd presence
    • Bdd lien_pack_produit (idPack, idProduit, idPresence)


    J'arrive également à afficher l'ensemble de mes produits ainsi que la liste des présences disponibles par produit.

    Mon bug arrive donc là : comment faire pour enregistrer les différents éléments dans ma BDD lien_pack_produit étant donné que tout est généré dynamiquement?

    Voici le code de création de mon formulaire
    Code PHP : 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
     
    <form method="post" name="fDonnees" action="validFicheSite.php">
    <input type="hidden" name="idSite" id="idSite" value="<?php echo $veidSit ?>"/>
    <?php
    include("../Connections/connect_admin.php");
    $reqres=mysql_query("SELECT packreferencement.idRef, packreferencement.nomRef FROM packreferencement ORDER BY packreferencement.nomRef DESC ");
    $reqresu=mysql_query("SELECT presence.idPresence, presence.termePresence FROM presence ORDER BY presence.termePresence DESC ");
     $nbenr=mysql_num_rows($reqres);
     $nbenre=mysql_num_rows($reqresu);
     
      if ($nbenr!=0 && $nbenre!=0) {
    	  while ($a_row = mysql_fetch_array($reqres)){
    		  echo "<label style='width:200px'>".$a_row["nomRef"]."</label>";
    		  echo "<input type='hidden' name='ref.".$a_row["idRef"]."' id='ref.".$a_row["idRef"]."' value='".$a_row["idRef"]."'/>";
    		  echo "<select id='pres.".$a_row["idRef"]."' name=pres.".$a_row["idRef"].">";  
    		  $reqresu=mysql_query("SELECT presence.idPresence, presence.termePresence FROM presence ORDER BY presence.termePresence DESC ");
    		  while ($a_row = mysql_fetch_array($reqresu)) {
    			  echo "<option value='".$a_row["idPresence"]."'>".$a_row["termePresence"]."</option>";
    		  }
    		echo "</select> <hr/>";
    	  }
      mysql_close($connect_admin);
     }?>
     
    </form>

    Auriez vous une idée de comment récupérer l'ensemble des informations disponibles dans ce formulaire (et donc la création du fichier validFicheSite.php) pour une insertion dans la BDD lien_pack_Site?

    D'avance merci pour vos réponses

    Ps: $veidSit est récupéré par un GET donc c'est également géré

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour.

    A ce que j'ai compris, ton formulaire contient un nombre indéterminé de champs et tu souhaites les entrer en base c'est ca ?

    Dans tout les cas, tes champs sont listés dans le tableau $_POST, il faut que tu le parcours via une boucle

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut
    Bonjour,

    C'est tout à fait ce que j'ai voulu expliquer en effet

    Par contre, autant j'avais compris ce que je devais faire, autant je n'arrive pas à le reformuler en "code" et c'est là que je "bug"

    Si vous aviez tout au moins un démarrage de code pour ce genre de chose, ca m'arrangerait

    D'avance merci

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Dans ta page de traitement de formulaire (validFicheSite.php) mets tout en commentaire et marque ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';

    Tu verras comment sont formatés tes données

    Reste ensuite à le parcourir via une boucle foreach par exemple

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach($_POST as $key=>$value){
    ...
    }

    Sans oublier bien sur d'effectuer les tests de sécurité nécessaires avant insertion en base

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut
    Ok merci

    Je tenterai ça ce soir et je reviendrais pour dire ce qu'il en est

    Encore merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut
    Bonjour,

    Un grand merci Madfrix.
    Grâce à tes idées, j'ai pu élaborer (presque) l'intégralité de mon code

    Pour les personnes intéressées par la solution, voici le code créé :

    Code PHP : 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
     
    <?php
    $idRef ="";
    $idPres ="";
    $idProd ="";
    $idSit = $_POST["idSite"];
    if (is_numeric($idSit)) {
    	include('../Connections/connect_admin.php');
    	$reqres=mysql_query("SELECT * FROM lien_pack_referencement WHERE idPack='".$idSit."'");
    	$nbenr=mysql_num_rows($reqres);
    	if ($nbenr==0){
    		//On est mode ajout
    		foreach( $_POST as $key => $value ) {
    		  if (substr($key,0,3) == "ref"){
    			  $idRef = $value;
    		  }
    		  if (substr($key,0,4) == "pres") {
    			  $idPres = $value;
    		  }
    		  if (is_numeric($idRef) && is_numeric($idPres)) {
    			  $reqres=mysql_query("INSERT INTO lien_pack_referencement VALUES ('".mysql_real_escape_string($idSit)."','".mysql_real_escape_string($idRef)."','".mysql_real_escape_string($idPres)."')");
    			  $idRef ="";
    			  $idPres ="";
    		   } 
    		}
    	} else {
    		//On est en mode modification
    		  foreach( $_POST as $key => $value ) {
    		  if (substr($key,0,3) == "ref"){
    			  $idRef = $value;
    		  }
    		  if (substr($key,0,4) == "pres") {
    			  $idPres = $value;
    		  }
    		  if (is_numeric($idRef) && is_numeric($idPres)) {
    			  $reqres=mysql_query("UPDATE lien_pack_referencement SET idPresence='".mysql_real_escape_string($idPres)."' WHERE idPack='".$idSit."' AND idRef ='".$idRef."'");
    			  $idRef ="";
    			  $idPres ="";
    		   } 
    		}
    	}
    	$reqres=mysql_query("SELECT * FROM lien_pack_produit WHERE idPack='".$idSit."'");
    	$nbenr=mysql_num_rows($reqres);
    	if ($nbenr==0){
    		//On est mode ajout
    		foreach( $_POST as $key => $value ) {
    		if (substr($key,0,4) == "prod"){
    			$idProd = $value;
    		}
    		if (substr($key,0,5) == "pProd") {
    			$idPres = $value;
    		}
    		if (is_numeric($idProd) && is_numeric($idPres)) {
    			  $reqres=mysql_query("INSERT INTO lien_pack_produit VALUES ('".mysql_real_escape_string($idSit)."','".mysql_real_escape_string($idProd)."','".mysql_real_escape_string($idPres)."')");
    			  $idProd ="";
    			  $idPres ="";
    		   } 
    		}
    	} else {
    		//On est en mode modification
    		  foreach( $_POST as $key => $value ) {
    		  if (substr($key,0,4) == "prod"){
    			  $idProd = $value;
    		  }
    		  if (substr($key,0,5) == "pProd") {
    			  $idPres = $value;
    		  }
    		  if (is_numeric($idProd) && is_numeric($idPres)) {
    			  $reqres=mysql_query("UPDATE lien_pack_produit SET idPresence='".mysql_real_escape_string($idPres)."' WHERE idPack='".$idSit."' AND idProd ='".$idProd."'");
    			  $idProd ="";
    			  $idPres ="";
    		   } 
    		}
    	}
    	mysql_close($connect_admin);
    } 
    ?>

    Par contre, un autre problème me vient à l'idée.
    En effet, là je peux insérer (si je n'ai pas de lignes correspondante à ma première requête [if ($nbenr==0)]) ou modifier les lignes existantes si mon formulaire créé ne contient pas de champs supplémentaires.

    Mais comment faire si mon formulaire comporte 1 (ou plusieurs) nouveaux champs ?
    Comment faire pour comparer les id présents dans mon formulaire avec ceux présents dans ma base ?

    J'avais pensé faire une comparaison entre le nombre de ligne présent dans le formulaire avec le nombre dans ma BDD mais ça ne me permet pas de vérifier totalement les id présents ==> mauvaise idée

    Quelqu'un peut il me donner une voie pour améliorer le code que je viens de mettre pour qu'il puisse prendre en compte l'ajout d'une ligne dans le formulaire ?

    D'avance merci pour vos réponses (et encore une fois merci à Madfrix)

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/04/2008, 18h34
  2. Réponses: 1
    Dernier message: 10/10/2007, 10h42
  3. [Conception] formulaire et case à cocher et recherche dans une base de donnée
    Par olivier_1970 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 25/06/2006, 01h03
  4. Réponses: 21
    Dernier message: 05/06/2006, 10h49
  5. [base de données]partage d'une base de données
    Par Scrusher dans le forum JDBC
    Réponses: 4
    Dernier message: 02/06/2004, 13h33

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