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 :

Création d'un nouvel objet


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 43
    Points : 27
    Points
    27
    Par défaut Création d'un nouvel objet
    Bonjour à tous,

    Je suis en train de créer un site web en php avec source odbc(access). C'est un site de vente de jeux vidéos. J'ai un problème pour créer une nouvelle fiche de jeu dans l'administration du site.

    Une capture du formulaire d'insertion est joint, tout comme un extrait de la bdd.

    Voila le code de mon formulaire (simplifié):
    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
     
    <form action="main.php?action=ajout_jeu" enctype="multipart/form-data" method="POST">
      ...
      <disponibilite_jeu_modif>
        <h1>Disponible sur...</h1>
        <?php
          $sql_support = "SELECT * FROM SUPPORT";
          list($erreur_support, $resultat_support) = getData($db['dsn'], $db['user'], $db['pass'], $sql_support);
     
          foreach($resultat_support as $m => $affichage_support)
          {
          ?>
          <table>
          <tr><td><input type="checkbox" name="id_support[]" value="<?php echo $affichage_support['ID_SUPPORT']; ?>"></td>
          <td width=100><?php echo $affichage_support['LIBELLE_SUPPORT']; ?></td>
          <td width=100><input type="text" size=2 name="prix_jeu[]">€</td>
          <td width=100><input type="text" size=7 name="date_sortie_jeu[]"</td>
          <td><input type="file" name="affiche_jeu[]"</td>
        </tr>
      </table>
      <?php
      }
      ?>
    </disponibilite_jeu_modif>
     
    <input type="submit" value="Enregistrer">
    <input type="reset" value="Effacer">
     
    </form>
    Et voici ce que je met dans la page de traitement du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /*insertion dans la table "JEUX"*/
     
    $sql = "INSERT INTO JEUX (ID_GENRE, ID_EDITEUR, LIBELLE_JEU, RESUME_JEU) VALUES ('".$_POST['genre_jeu']."', '".$_POST['editeur_jeu']."', '".$_POST['libelle_jeu']."', '".$_POST['resume_jeu']."')";
    insertData($db['dsn'], $db['user'], $db['pass'], $sql);
     
    /*insertion dans la table "EXISTER"*/
     
    $creation = "INSERT INTO EXISTER (ID_JEU, ID_SUPPORT, PRIX_JEU, DATE_SORTIE_JEU, AFFICHE_JEU) VALUES (???)
    insertData($db['dsn'], $db['user'], $db['pass'], $creation);
    ...
    C'est l'insertion dans la table "EXISTER" qui pose problème. Je ne vois pas comment récupérer et insérer les données saisies dans la partie "disponible sur..." du formulaire.

    Je suis dans le flou total, c'est pourquoi je m'en remet à vous. J'espère que j'ai été assez clair au moins. Sinon n'hésitez pas à me demander. Voila, merci beaucoup pour votre aide en tout cas

    kiradeus
    Images attachées Images attachées   

  2. #2
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Alors j'ai essayé avec les foreach.
    Si je fais ça, ça marche :
    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
    ...
    /*On récupère ici le dernier ID inséré dans la table "JEUX"*/
    $sql_last_id = "SELECT MAX(ID_JEU) as s1 FROM JEUX";
    list($erreur_last_id, $resultat_last_id) = getData($db['dsn'], $db['user'], $db['pass'], $sql_last_id);
    
    foreach($resultat_last_id as $i => $affichage_last_id)
    {
      $last_id = $affichage_last_id['s1'];
    }
    /*FIN*/
    
    /*On insère dans la table "EXISTER"*/
    foreach($_POST['id_support'] as $key1 => $value_support)
    {
      $creation = "INSERT INTO EXISTER (ID_JEU, ID_SUPPORT) VALUES ('".$last_id."', '".$value_support."')";
      insertData($db['dsn'], $db['user'], $db['pass'], $creation);
    /*FIN*/
    Mais je me suis occupé seulement des champs "ID_JEU" et "ID_SUPPORT" de la table "EXISTER" comme vous pouvez le voir. J'ai donc voulu faire la même chose avec le champ "PRIX_JEU", puis "DATE_SORTIE_JEU" ... J'ai donc fais comme ça :
    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
    ...
    /*On récupère ici le dernier ID inséré dans la table "JEUX"*/
    $sql_last_id = "SELECT MAX(ID_JEU) as s1 FROM JEUX";
    list($erreur_last_id, $resultat_last_id) = getData($db['dsn'], $db['user'], $db['pass'], $sql_last_id);
    
    foreach($resultat_last_id as $i => $affichage_last_id)
    {
      $last_id = $affichage_last_id['s1'];
    }
    /*FIN*/
    
    /*On insère dans la table "EXISTER"*/
    foreach($_POST['id_support'] as $key1 => $value_support)
    {
      foreach($_POST['prix_jeu'] as $key2 => $value_prix_jeu)
      {
        $creation = "INSERT INTO EXISTER (ID_JEU, ID_SUPPORT, PRIX_JEU) VALUES ('".$last_id."', '".$value_support."', '".$value_prix_jeu."')";
        insertData($db['dsn'], $db['user'], $db['pass'], $creation);
      }
    }
    /*FIN*/
    Mais là il ne veut pas. Il n'a pas l'air d'apprécier les foreach imbriqués.
    L'erreur obtenue est la suivante :
    Warning: Invalid argument supplied for foreach() in C:\wamp\www\GameLounge\admin\modeles\actionAjoutJeu.php on line 70

    J'ai eu beau chercher et chercher encore une solution mais sans succès.

    Quelqu'un aurait-il une idée ?
    Merci d'avance.

    kiradeus

  3. #3
    Membre émérite 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
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonsoir, je ne saisis pas pourquoi tu veux utiliser un foreach alors que de toute évidence, $resultat_last_id n'est pas un tableau mais une variable de type int puisqu'elle correspond au MAX(ID_JEU) (?)

    bizarre également ta fonction getData qui semble se connecter à chaque fois à ta bdd alors qu'une connexion ou un singleton suffirait (et surtout serait bien plus optimisé)

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Salut Madfrix !

    Alors pour récupérer l'id max je sais que j'ai fait un peu n'importe quoi mais je n'arrivais absolument pas à récupérer le résultat dans une simple variable ! (et oui honte à moi!! ) Du coup j'ai fais ça comme ça et ça marche mais je modifierais plus tard.

    Pour ce qui est de ma fonction getData, c'est vrai que c'est pas très pratique de se reconnecter à chaque fois pour exécuter une requête. Je t'avouerais que je ne connaissais pas les singleton. Comme quoi on apprend ici ! J'ai lu un peu de quoi il s'agissait et franchement je crois que je ferais comme ça dorénavant. En tout cas merci de tes remarques.

    Sinon mon problème de départ est résolu. J'ai bien galéré mais à la fin ça vaut le coup. En espérant que ça aidera d'autres plus tard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach($_POST['id_support'] as $key => $value)
    {
      $support_jeu = $_POST['id_support'][$key];
      $prix_jeu = $_POST['prix_jeu'][$key];
      $date_sortie_jeu = $_POST['date_sortie_jeu'][$key];
     
      $creation = "INSERT INTO EXISTER (ID_JEU, ID_SUPPORT, PRIX_JEU, DATE_SORTIE_JEU) VALUES ('".$last_id."', '".$support_jeu."', '".$prix_jeu."', '".$date_sortie_jeu."')";
      insertData($db['dsn'], $db['user'], $db['pass'], $creation);
    }
    Et voila les amis Merci à vous.

    kiradeus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. @Id null lors de la création d'un nouvel objet
    Par zuzuu dans le forum Hibernate
    Réponses: 3
    Dernier message: 18/02/2009, 21h15
  2. Création d'une nouvelle DB
    Par ghyosmik dans le forum Outils
    Réponses: 2
    Dernier message: 25/11/2005, 17h08
  3. [VC++6]Créations de fenêtres et objets GDI
    Par Yoyo@ dans le forum MFC
    Réponses: 20
    Dernier message: 10/07/2005, 16h12
  4. Comment cacher des propriétés dans un nouvel objet ?
    Par Pedro dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/10/2003, 18h53

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