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

PHP & Base de données Discussion :

Insérer de nouvelles données php myadmin


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2022
    Messages : 46
    Points : 24
    Points
    24
    Par défaut Insérer de nouvelles données php myadmin
    Bonjour à toutes et à tous,

    J'aimerais ajouter de nouvelles données à une table déjà existante. Je vous explique : il s'agit d'un futur site pour enseignants, une fois qu'ils ont créé leur compte, j'aimerais qu'ils puissent ajouter de nouvelles classes à leur profil. Pour cela, j'ai codé comme ci-dessous :
    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
    94
    95
    96
    97
    98
    <?php
    session_start();
    require_once 'config.php'; // On inclu la connexion à la bdd
     
    if (!isset($_SESSION['user'])) {
        header('Location:index.php');
        die();
    }
    if (!empty($_POST['nom_classe']) && !empty($_POST['niveau_classe'])) {
     
        $classe_1 = htmlspecialchars($_POST['nom_classe']);
        $niveau_classe_1 = htmlspecialchars($_POST['niveau_classe']);
        $classe_2 = htmlspecialchars($_POST['nom_classe']);
        $niveau_classe_2 = htmlspecialchars($_POST['niveau_classe']);
        $classe_3 = htmlspecialchars($_POST['nom_classe']);
        $niveau_classe_3 = htmlspecialchars($_POST['niveau_classe']);
        $classe_4 = htmlspecialchars($_POST['nom_classe']);
        $niveau_classe_4 = htmlspecialchars($_POST['niveau_classe']);
        $classe_5 = htmlspecialchars($_POST['nom_classe']);
        $niveau_classe_5 = htmlspecialchars($_POST['niveau_classe']);
        $classe_6 = htmlspecialchars($_POST['nom_classe']);
        $niveau_classe_6 = htmlspecialchars($_POST['niveau_classe']);
        $classe_7 = htmlspecialchars($_POST['nom_classe']);
        $niveau_classe_7 = htmlspecialchars($_POST['niveau_classe']);
     
        $check = $bdd->prepare('SELECT classe_1, classe_2, classe_3, classe_4, classe_5, classe_6, classe_7, niveau_classe_1, niveau_classe_2,niveau_classe_3,niveau_classe_4,niveau_classe_5,niveau_classe_6,niveau_classe_7 FROM lcc.inscr_ens WHERE token= :token');
     
        if (!empty($classe_1)) {
            if (!empty($classe_2)) {
                if (!empty($classe_3)) {
                    if (!empty($classe_4)) {
                        if (!empty($classe_5)) {
                            if (!empty($classe_6)) {
                                $insert = $bdd->prepare('INSERT INTO lcc.inscr_ens(classe_7, niveau_classe_7 ) VALUES(:nom_classe,:niveau_classe)');
                                $insert->execute(array(
                                    'nom_classe' => $classe_7,
                                    'niveau_classe' => $niveau_classe_7,
                                    header('Location: esp_ens.php')
                                ));
                                die();
                            } else {
                                $insert = $bdd->prepare('INSERT INTO lcc.inscr_ens(classe_6, niveau_classe_6) VALUES(:nom_classe,:niveau_classe)');
                                $insert->execute(array(
                                    'nom_classe' => $classe_6,
                                    'niveau_classe' => $niveau_classe_6,
                                    header('Location: esp_ens.php')
                                ));
                                die();
                            }
                        } else {
                            $insert = $bdd->prepare('INSERT INTO lcc.inscr_ens(classe_5, niveau_classe_5) VALUES(:nom_classe,:niveau_classe)');
                            $insert->execute(array(
                                'nom_classe' => $classe_5,
                                'niveau_classe' => $niveau_classe_5,
                                header('Location: esp_ens.php')
                            ));
                            die();
                        }
                    } else {
                        $insert = $bdd->prepare('INSERT INTO lcc.inscr_ens(classe_4, niveau_classe_4) VALUES(:nom_classe,:niveau_classe)');
                        $insert->execute(array(
                            'nom_classe' => $classe_4,
                            'niveau_classe' => $niveau_classe_4,
                            header('Location: esp_ens.php')
                        ));
                        die();
                    }
                } else {
                    $insert = $bdd->prepare('INSERT INTO lcc.inscr_ens(classe_3, niveau_classe_3) VALUES(:nom_classe,:niveau_classe)');
                    $insert->execute(array(
                        'nom_classe' => $classe_3,
                        'niveau_classe' => $niveau_classe_3,
                        header('Location: esp_ens.php')
                    ));
                    die();
                }
            } else {
                $insert = $bdd->prepare('INSERT INTO lcc.inscr_ens(classe_2, niveau_classe_2) VALUES(:nom_classe,:niveau_classe)');
                $insert->execute(array(
                    'nom_classe' => $classe_2,
                    'niveau_classe' => $niveau_classe_2,
                    header('Location: esp_ens.php')
                ));
                die();
            }
        } else {
            $insert = $bdd->prepare('INSERT INTO lcc.inscr_ens(classe_1, niveau_classe_1) VALUES(:nom_classe,:niveau_classe)');
            $insert->execute(array(
                'nom_classe' => $classe_1,
                'niveau_classe' => $niveau_classe_1,
                header('Location: esp_ens.php')
            ));
            die();
        }
    } else {
        header('location: index.php');
        die();
    }
    Ma table est déjà construite est les valeurs 'nom_classe' et 'niveau_classe' sont prêtes dans mon html :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      <form action="crea_classe.php" method="post" id="crea_classe">
        <h2>Création d'une nouvelle classe</h2>
        <label for="select_classe">
          <h3>Choisissez le niveau de la classe :</h3>
        </label>
        <select name="niveau_classe" id="classe_niveau">
          <option value="sixième">Sixième</option>
          <option value="cinquième">Cinquième</option>
          <option value="quatrième">Quatrième</option>
          <option value="troisième">Troisième</option>
        </select>
        <input id="classe_nom" type="text" placeholder="Entrez le nom de la classe" name="nom_classe" class="form-control" />
        <input type="submit" id="crea_classe_valid" value="VALIDER" onclick="close_crea_classe()" />
      </form>
    Mais rien à faire, j'ai beau modifier mes informations, les données n'arrivent pas dans ma table...
    Je suis novice en PHP, donc je me suis probablement trompé dans l'organisation des donné mais je ne sais pas où...

    Help please !!
    Merci !

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    avant de voir le code, il faut déjà bien organiser la structure de la base données. je trouve ça bizarre d'avoir des champs qui se répètent classe_1, classe_2, etc.
    montrez nous d'abord la structure de la base de données.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2022
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    Pour la base de données, elle est constitué de 2 tables pour les inscriptions (élèves ou enseignants) et la table enseignants est construite ainsi :
    Code SQL : 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
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
     
    SET AUTOCOMMIT = 0;
     
    START TRANSACTION;
     
    SET time_zone = "+00:00";
     
    DROP TABLE IF EXISTS `inscr_ens`;
     
    CREATE TABLE
        IF NOT EXISTS `inscr_ens` (
            `inscr_ens_nom` varchar(50) NOT NULL,
            `inscr_ens_prenom` varchar(50) NOT NULL,
            `inscr_ens_mail` varchar(150) NOT NULL,
            `inscr_ens_mdp` text NOT NULL,
            `classe_1` text NOT NULL,
            `niveau_classe_1` text NOT NULL,
            `classe_2` text NOT NULL,
            `niveau_classe_2` text NOT NULL,
            `classe_3` text NOT NULL,
            `niveau_classe_3` text NOT NULL,
            `classe_4` text NOT NULL,
            `niveau_classe_4` text NOT NULL,
            `classe_5` text NOT NULL,
            `niveau_classe_5` text NOT NULL,
            `classe_6` text NOT NULL,
            `niveau_classe_6` text NOT NULL,
            `classe_7` text NOT NULL,
            `niveau_classe_7` text NOT NULL,
            `token` text NOT NULL,
            PRIMARY KEY (`inscr_ens_num`)
        ) ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_general_ci;
     
    COMMIT;

    je l'ai (apparemment mal) organisé comme ça. De façon à ce que les enseignants puissent créer plusieurs classes (généralement, ils en ont 5 ou 6)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2022
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    C'est bon, j'ai réussi, ta remarque m'a bien aidé !

    J'ai simplement créé une nouvelle table nommée 'classes' dans laquelle j'ai les données 'nom_classe' et 'niveau_classe'.

    J'ai pu y enregistrer les données comme je le souhaitais
    Maintenant, il faut que j'arrive à lier mes 2 tables pour que chaque utilisateur puisse avoir accès à ses propres classes (et pas à celle d'un autre )

    Merci !

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    en effet, il est plus efficace de faire une table séparée pour les classes.
    cela permet à la table de stocker de 0 à une infinité de classe par personne. et ensuite c'est dans le code que vous pouvez par exemple limiter le nombre de classes à 6 maximum.

    si une classe est associée à une seule personne, la tables "classe" aura les colonnes suivantes :
    • id_classe : clé primaire
    • inscr_ens_num : clé étrangère vers la table des enseignants
    • nom
    • niveau


    au sujet de la clé primaire, le code sql de votre 2e message a un souci puisqu'il n'y a pas de colonne inscr_ens_num dans la table.

    et pour les clés primaires, je vous conseille de mettre un type entier non signé et de rajouter l'option "autp_increment".

  6. #6
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2022
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    Merci pour la réponse,

    J'ai fait les modifications, je rajouterai juste la colonne inscr_ens_num pour pouvoir lier mes tables !

    Merci encore !

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Plusieurs remarques concernant la table

    • le moteur MyISAM est obsolète, à remplacer par INNODB.
    • la colonne inscr_ens_num déclarée comme PK est absente de la table, je suis très étonné que ce script ait pu passer sans erreur
    • je confirme que les classes et niveaux n'ont a priori rien à faire ici, d'autant plus s'il s'agit d'inscriptions : un enseignant ne s'inscrit pas dans une classe, il anime une ou plusieurs session(s) de cours d'une matière pour cette classe, ce qui est très différent.
    • le type TEXT utilisé pour les classes et les niveaux est très encombrant, je doute de son intérêt ici
    • l'adresse courriel codée sur 150 caractères est potentiellement trop petite, les adresses courriel sont normalisées, voir par exemple ICI


    Au sujet de la modélisation, le plus souvent, un professeur enseigne une à plusieurs matières dans une à plusieurs classes et éventuellement dans un à plusieurs établissements. L'affectation des professeurs peut changer en cours d'année. Un professeur peut en remplacer un autre...

    Les élèves s'inscrivent dans un et un seul établissement et sont affectés à une et une seule classe à un instant "t", mais peuvent changer de classe en cours d'année et bien entendu en fin d'année.

    Comme les tables ne sont qu'une conséquence des règles de gestion, il est primordial de bien réfléchir à celles-ci.

    Inspirez-vous par exemple de ce sujet :

    https://www.developpez.net/forums/d2...eves-d-classe/

  8. #8
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2022
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    Bonjour et merci pour cette réponse très complète.

    J'ai déjà effectué plein de changements :
    J'ai mis le moteur InnoDB pour pouvoir faire des liens entre mes tables;
    j'ai recréé une table spéciale pour les classes;
    J'ai refait mon code pour que inscr_num n'ai pas à s'afficher;

    Pour ce qui est de la modélisation, le site ne concerne pour l'instant que ma matière. Donc, même si j'y pense pour le moment je suis loin d'en être au bout.

    Maintenant, ça donne ç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
    <?php
    session_start();
    require_once 'config.php'; // On inclu la connexion à la bdd
     
    if (!isset($_SESSION['user'])) {
        header('Location:index.php');
        die();
    }
    if (!empty($_POST['nom_classe']) && !empty($_POST['niveau_classe']))
     
        $nom_classe = htmlspecialchars($_POST['nom_classe']);
        $niveau_classe = htmlspecialchars($_POST['niveau_classe']);
        $check = $bdd->prepare('SELECT nom_classe, niveau_classe, token FROM lcc.classes WHERE nom_classe= ? ');
     
          $insert = $bdd->prepare('INSERT INTO lcc.classes(nom_classe, niveau_classe, token) VALUES(:nom_classe,:niveau_classe, :token)');
          $insert->execute(array(
          'nom_classe' => $nom_classe,
          'niveau_classe' => $niveau_classe,
          'token' => bin2hex(openssl_random_pseudo_bytes(64)),
            ));
            header('Location: esp_ens.php');
            die();
    Le HTML correspondant :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <form action="crea_classe.php" method="post" id="crea_classe">
        <h2>Création d'une nouvelle classe</h2>
        <label for="select_classe">
          <h3>Choisissez le niveau de la classe :</h3>
        </label>
        <select name="niveau_classe" id="classe_niveau">
          <option value="sixième">Sixième</option>
          <option value="cinquième">Cinquième</option>
          <option value="quatrième">Quatrième</option>
          <option value="troisième">Troisième</option>
        </select>
        <input id="classe_nom" type="text" placeholder="Entrez le nom de la classe" name="nom_classe" class="form-control" />
        <input type="submit" id="crea_classe_valid" value="VALIDER" onclick="close_crea_classe()" />
      </form>

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 09/12/2022, 20h36
  2. Insérer une donnée dans une base de donnée php.my admin
    Par lackam88 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 11/11/2020, 13h28
  3. Réponses: 4
    Dernier message: 13/02/2020, 08h59
  4. Erreur sous PHP MyAdmin (PMA database?)
    Par Matlight dans le forum Installation
    Réponses: 5
    Dernier message: 28/10/2010, 19h38
  5. echange de données php/flash
    Par ramses83 dans le forum Flash
    Réponses: 8
    Dernier message: 18/08/2003, 23h50

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