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 :

Stocker les infos dans une base de données via un formulaire


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut Stocker les infos dans une base de données via un formulaire
    Bonjour à tous,
    voilà maintenant près de 15 ans que je n'ai pas ouvert Dreamweaver, Easy PHP et autre programme.

    Je vais aller à l'essentiel, je me sens complètement largué !

    Je travaille en local via MAMP que je viens de découvrir. J'ai créé une Base de donnée "TEST", avec une table "INFOS_TLB" comportant une colonne "PRENOM" et une colonne "NOM"

    Mon but, est simplement, via une page (form.php), stocker les infos d'un formulaire dans la base de donnée... chose qui me semblait plutôt facile il y a quelques années, la je coince complètement... ci joint le code de la page form.php :

    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
    <html>
        <head><title>Formulaire de saisie </title></head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
        <body>
            <h1>Inscrivez vous !!!</h1>
            <h2>Entrez les données demandées :</h2>
                <form name="inscription" method="post" action="form.php" </br>
                <center>
               Nom: <input type="text" name="prenom"/> </br>
                </br>
                Prenom : <input type="text" name="nom"/> </br>
                </br>
                <input type="submit" name="valider" value="Valider">
                </form>
                </center>
        </body>
    </html>
     
    <?php
    /* Connexion à une base */
    $dsn = 'mysql:dbname=test;host=localhost';
    $user = 'root';
    $password = 'root';
     
    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connexion échouée : ' . $e->getMessage();
    }
    if (isset ($_POST['valider'])){
                    $prenom=$_POST['prenom'];
                    $nom=$_POST['nom'];
                    $dbh->exec("INSERT INTO infos_tbl(prenom,nom) VALUES($prenom','$nom')");
                }
    ?>
    Merci d'avance

  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
    Il te manque un '
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbh->exec("INSERT INTO infos_tbl(prenom,nom) VALUES('$prenom','$nom')");
    Mais ce n'est pas sécurisé, il faut faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (isset ($_POST['valider'])){
                    $sth = $dbh->prepare("INSERT INTO infos_tbl (prenom,nom) VALUES(?, ?)");
                    $sth->execute(array($_POST['prenom'], $_POST['nom']));
                }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Merci, c'est parfait !

  4. #4
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Je suis à nouveau bloqué.

    Je souhaite désormais, pouvoir Editer les données.

    J'ai donc pour cela créer :
    _ une page listing2.php dans laquelle j'affiche les données présentes sur la table :

    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
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>test sans titre</title>
    </head>
     
    <body><?php
    try
    {
    	// On se connecte à MySQL
    	$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
    }
    catch(Exception $e)
    {
    	// En cas d'erreur, on affiche un message et on arrête tout
            die('Erreur : '.$e->getMessage());
    }
     
    // Si tout va bien, on peut continuer
     
    // On récupère tout le contenu de la table
    $reponse = $bdd->query('SELECT * FROM infos_tbl');
     
    // On affiche chaque entrée une à une
    while ($donnees = $reponse->fetch())
    {
    ?>
    <p> <?php echo $donnees['nom']; ?><br /><?php echo $donnees['prenom']; ?><a href="modification2.php?idPersonne=<?php echo $donnees[id]; ?>"><?php echo $donnees[id]?></a>
       </p>
    <?php
    }
     
    $reponse->closeCursor(); // Termine le traitement de la requête
     
    ?>
    </body>
    </html>
    Les données PRENOM NOM et ID s'affichent correctement, et j'ai créé un lien sur l'ID afin de pouvoir modifier chaque entrée. L'ID n°1 renvoie vers : http://localhost:8888/modification2.php?idPersonne=1

    Jusque là tout va bien.
    En revanche, dès que la page modification2.php?idPersonne=1 apparaît, toutes les données de ma table apparaissent avec la possibilité de modifier chaque entrée. Voici le code :

    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
    <html>
      <head>
        <title>modification de données en PHP :: partie2</title>
      </head>
    	<?php
    try
    {
    	// On se connecte à MySQL
    	$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
    }
    catch(Exception $e)
    {
    	// En cas d'erreur, on affiche un message et on arrête tout
            die('Erreur : '.$e->getMessage());
    }
     
    // Si tout va bien, on peut continuer
     
    	 //récupération de la variable d'URL,
      //qui va nous permettre de savoir quel enregistrement modifier
      $id  = $_GET["idPersonne"] ;
     
    // On récupère tout le contenu de la table 
    $reponse = $bdd->query('SELECT * FROM infos_tbl');
     
    // On affiche chaque entrée une à une
    while ($donnees = $reponse->fetch())
    {
    ?>
    <body>  <form name="insertion" action="modification3.php" method="POST">
      <table border="0" align="center" cellspacing="2" cellpadding="2">
        <tr align="center">
          <td>nom</td>
          <td><input type="text" name="nom" value="<?php echo $donnees['prenom']; ?>"></td>
        </tr>
        <tr align="center">
          <td>prenom</td>
          <td><input type="text" name="prenom" value="<?php echo $donnees['nom']; ?>"></td>
        </tr>
        ID DE LA PAGE : <?php echo($id) ;?>
        <tr align="center">
          <td colspan="2"><input type="submit" value="modifier"></td>
        </tr>
      </table>
    </form><?php
    }
     
    $reponse->closeCursor(); // Termine le traitement de la requête
     
    ?>
    Je pense que la requête ci dessous devrait comporter $id, mais dès que je la renseigne j'ai une erreur sur la page localhost:500

    $reponse = $bdd->query('SELECT * FROM infos_tbl WHERE id=$id');

    Par ailleurs, même lorsque je tente de modifier les données de la table, rien ne se passe, ci dessous le code de modification3.php

    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
    <html>
        <head><title>Formulaire de saisie </title></head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
        <body>
        <h1>Parfait !</h1>
            <p><a href="listing2.php">voir le listing</a></p>
            <p><a href="test.php">test</a></p>
            <p><a href="form3.php">retour saisie</a></p>
            <p><a href="modification2.php">Modification</a></p>
        </body><?php
    /* Connexion à une base */
    $dsn = 'mysql:dbname=test;host=localhost';
    $user = 'root';
    $password = 'root';
     
    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connexion échouée : ' . $e->getMessage();
    }
    //récupération des valeurs des champs:
      //nom:
      $prenom     = $_POST["prenom"] ;
      //prenom:
      $nom = $_POST["nom"] ;
     
    	if (isset ($_POST['valider'])){
                    $sth = $dbh->prepare("UPDATE infos_tbl (prenom,nom) VALUES(?, ?)");
                    $sth->execute(array($_POST['prenom'], $_POST['nom']));
                }
    ?>
    </html>
    Par ailleurs, à l'époque je me servais d'un site, j'ai cependant essayé de reproduire quelques tutos, mais cela ne fonctionne pas, est-ce du au fait que le Language a évolué ? ou non compatible via MAMP ? D'avance merci

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $id  = (int)$_GET['idPersonne'] ;
    $reponse = $bdd->query('SELECT * FROM infos_tbl WHERE id=' . $id);
    petit conseil : met ton code de connexion à la base de données dans un fichier séparé que tu inclus dans les pages qui en ont besoin, ça évite de répéter le code et surtout les paramètres partout.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Merci, la page modification2.php est opérationnelle. En revanche, dès lors que je modifie le prénom et le nom, rien ne se modifie sur la table. Pour rappel, le code de modification3.php
    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
    <html>
        <head><title>Formulaire de saisie </title></head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
        <body>
        <h1>Parfait !</h1>
            <p><a href="listing2.php">voir le listing</a></p>
            <p><a href="test.php">test</a></p>
            <p><a href="form3.php">retour saisie</a></p>
            <p><a href="modification2.php">Modification</a></p>
        </body><?php
    /* Connexion à une base */
    $dsn = 'mysql:dbname=test;host=localhost';
    $user = 'root';
    $password = 'root';
     
    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connexion échouée : ' . $e->getMessage();
    }
    //récupération des valeurs des champs:
      //nom:
      $prenom     = $_POST["prenom"] ;
      //prenom:
      $nom = $_POST["nom"] ;
     
    	if (isset ($_POST['valider'])){
                    $sth = $dbh->prepare("UPDATE infos_tbl (prenom,nom) VALUES(?, ?)");
                    $sth->execute(array($_POST['prenom'], $_POST['nom']));
                }
    ?>
    </html>
    J'ai simplement remplacé INSERT TO par UPDATE mais il manque peut être quelque chose par rapport à l'ID qu'il faut modifier ? Merci du conseil pour la connexion à la base de donnée, je vais créer le fichier

  7. #7
    Invité
    Invité(e)
    Par défaut
    ...J'ai simplement remplacé INSERT TO par UPDATE...
    Et là... MAGIE !!...

    Non.

    Il faut au minimum se renseigner sur la bonne syntaxe SQL

  8. #8
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Merci pour les liens ;
    J'ai modifié le code en intégrant l'id à modifier mais la modification du "nom" & "prénom" ne se réalise pas.

    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
     
     
    //récupération des valeurs des champs du fichier modification2.php:
      //prenom:
      $prenom     = $_POST["prenom"] ;
      //nom:
      $nom = $_POST["nom"] ;
     
    //qui va nous permettre de savoir quel enregistrement modifier
    $id  = (int)$_GET['idPersonne'] ;
    $reponse = $bdd->query('SELECT * FROM infos_tbl WHERE id=' . $id);
     
    	if (isset ($_POST['modifier'])){
                    $sth = $dbh->prepare("UPDATE infos_tbl 
    				SET prenom='$prenom', nom='$nom' WHERE id=' . $id");
                    $sth->execute(array($_POST['prenom'], $_POST['nom']));
                }
    ?>
    Je sèche complètement...

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Vérifie les données reçues par ton script en affichant le contenu de $_GET et $_POST :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var_dump($_GET);
    var_dump($_POST);
    Normalement, tu devrais avoir un id et les nouvelles données de nom et prénom.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bon....
    Arrête de jouer à l'apprenti-sorcier...

    Il faut aussi maîtriser la syntaxe PDO :

  11. #11
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Cela fait 2 jours que je cherche et merci jreaux(62) pour le lien pour comprendre PDO. Je vois que les 15 années de non pratiques sont très douloureuses

    Bon j'ai avancé un peu, et voici le contenu de $_GET et $_POST :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    array(3) { ["id"]=> string(2) "27" ["nom"]=> string(13) "Test prenom 2" ["prenom"]=> string(10) "Test Nom 2" }
        Array
    (
        [id] => 27
        [nom] => Test prenom 2
        [prenom] => Test Nom 2
    )
    Les données sont bien transmises donc sur la page modification3.php?idPersonne=xx

    Cependant, il me reste à les modifier dans la BDD et la ça se corse... ci dessous la page modif3

    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
    <html>
      <head>
        <title>modification de données en PHP :: partie2</title>
      </head>
     
        <body>
        <h1>Parfait !</h1><?php var_dump($_POST); ?>
    <pre>
        <?php print_r($_POST); ?>
    </pre>
        <p><a href="listing2.php">voir le listing</a></p>
            <p><a href="test.php">test</a></p>
            <p><a href="form3.php">retour saisie</a></p>
            <p><a href="modification2.php">Modification</a></p>
        </body><p>Bonjour !</p>
     
    <p>Affichage de l'ID : <?php echo $_POST['id']; ?><BR>Affichage du prénom modifié : <?php echo $_POST['prenom']; ?><BR>Affichage du Nom modifié : <?php echo $_POST['nom']; ?> !</p>
     
    <?php
    try
    {
    	// On se connecte à MySQL
    	$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
    }
    catch(Exception $e)
    {
    	// En cas d'erreur, on affiche un message et on arrête tout
            die('Erreur : '.$e->getMessage());
    }
     
    // Si tout va bien, on peut continuer
     
    	 //récupération de la variable d'URL,
      //qui va nous permettre de savoir quel enregistrement modifier
     
    	$id  = (int)$_GET['idPersonne'] ;
    $reponse = $bdd->query('SELECT * FROM infos_tbl WHERE id=' . $id);
     
     
     
    // On affiche chaque entrée une à une
    while ($donnees = $reponse->fetch())
    {
     
                    $sth = $dbh->prepare("UPDATE infos_tbl 
    				SET prenom='$prenom', nom='$nom' WHERE id=' . $id");
                    $sth->execute(array($_POST['prenom'], $_POST['nom']));
     
    ?>
    <?php
    }
     
    $reponse->closeCursor(); // Termine le traitement de la requête
     
    ?>
    </html>
    D'avance merci

  12. #12
    Invité
    Invité(e)
    Par défaut
    Tu n'as pas compris le concept du forum.
    On n'est pas là pour bosser pour toi.
    Il ne suffit pas de montrer un code en disant : "allez-y, bossez !"

    • Pose UNE question claire, sur un problème précis
    • Montre le bout de code concerné
    • Et les explications qui vont avec

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bon sinon, on peut voir qu'il y a des problèmes ici :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $id  = (int)$_GET['idPersonne'] ;
    $reponse = $bdd->query('SELECT * FROM infos_tbl WHERE id=' . $id);
     
    // On affiche chaque entrée une à une
    while ($donnees = $reponse->fetch())
    {
     
                    $sth = $dbh->prepare("UPDATE infos_tbl 
    				SET prenom='$prenom', nom='$nom' WHERE id=' . $id");
                    $sth->execute(array($_POST['prenom'], $_POST['nom']));
     
    }
    1) Tu fais une recherche sur la base à partir de l'id, mais tu n'utilises pas les données retournées. A quoi te sert cette requête ?
    2) Si tu fais une recherche sur l'id, normalement il est unique, donc tu n'as pas besoin de faire une boucle sur le résultat vu que tu n'auras (au maximum) qu'une seule ligne.
    3) Si tu passes des paramètres à la fonction execute, il faut avoir correctement préparé la requête, avec des marqueurs.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    RELIS aussi le tuto, concernant les requêtes préparées.

    Un autre tuto utile : PDO une soupe et au lit !

  15. #15
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Et bien merci beaucoup ! le tuto "une soupe au lit" m'a beaucoup aidé !

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 450
    Points : 123
    Points
    123
    Par défaut Ne brûlons pas les étapes
    Salut,

    Il me semble que tu n'as pas encore bien compris le concept de PDO et de ses requêtes préparées. L'instruction prepare() ne doit, en aucun cas, contenir de valeurs (car c'est aller à l'encontre du principe même de la requête préparée) ! Celles-ci étant passées dans l'instruction execute()

    Je pense effectivement comme les collègues, il faut que tu suives un tuto sur PDO en entier avec des exercices concrets pour te faire la main et éviter de tâtonner (agir ainsi est une perte de temps et d'énergie tant la frustration qui en résulte est usante)

    Bon courage.

  17. #17
    Invité
    Invité(e)
    Par défaut
    @cuisto44000

    Tu devrais toi aussi lire le tuto proposé.

  18. #18
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Bonjour à tous,

    je reviens vers vous concernant la partie UPDATE.

    Pour essayer d'être clair, j'ai créé une page php"REGISTRE du personnel" où je peux librement ajouter un salarié (avec les champs suivants : nom, prénom, adresse, numéro de securite sociale , nationalite, date naissance, sexe, emploi, qualification, date_entree, date_sortie, apprenti, cdd, temps_partiel, contrat, visite médicale).

    Les deux derniers champs (contrat + visite médicale) sont de type file.
    Lorsque j'ajoute le salarié via la page d'ajout, pas de souci, toutes les données s'enregistrent et les deux fichiers (contrat + visite médicale) se téléchargent bien dans le répertoire.

    En revanche, lorsque je veux MODIFIER les données enregistrées via la page "éditer.php", je rencontre le problème suivant :
    _ Si le champs "contrat" est déjà renseigné dans la BDD (exemple xxxxx.pdf) et que je modifie une entrée (peu importe laquelle), le champs "contrat" devient vide (car je ne retélécharge pas le fichier).

    Je souhaiterai savoir comment m'y prendre, pour réaliser ceci :

    _ Si le "champs contrat" est déjà renseigné, possibilité de "supprimer" le fichier, et d'en "ajouter" un autre via le formulaire. Si pas de modification, on n'écrit pas sur la table. Si modification on enregistre le nom du "fichier" dans le champs.
    _ Si le "champs contrat" est vide, "ajouter un contrat" via le formulaire

    Voici le code actuel de la page "éditer_salarie.php" :

    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
    <? 
    $id = $_GET[id];
    	$dossier = 'repertoire/';
    $fichier = basename($_FILES['file']['name']);
    $taille_maxi = 90000000000000000000;
    $taille = filesize($_FILES['file']['tmp_name']);
    $extensions = array('.png', '.gif', '.jpg', '.JPG', '.jpeg', '.pdf');
    $extension = strrchr($_FILES['file']['name'], '.'); 
    //Début des vérifications de sécurité...
    if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
    {
         $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
    }
    if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
    {
         //On formate le nom du fichier ici...
         $fichier = strtr($fichier, 
              'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
              'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
         $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
         if(move_uploaded_file($_FILES['file']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload effectué avec succès !';
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
         }
    }
    else
    {
         echo $erreur;
    }
    	include "config2.php";
     
    $reponse = $bdd->query("SELECT  id, nom, prenom, adresse, securite, date_naissance, nationalite, sexe, date_entree, date_sortie, emploi, qualification, contrat, temps_partiel, apprenti FROM registre WHERE id='$id'");?>
    <?php // On affiche chaque entrée une à une
    while ($donnees = $reponse->fetch())
     
    {?><? echo $donnees["contrat"];
     
    $contrat2 = $donnees['contrat'];	?><?
    //on supprime les guillemets d’une chaîne SQL, PDO s’en occupera
    $sql='UPDATE registre SET nom = ? , prenom = ? , adresse = ? , securite = ? , nationalite = ? , date_naissance = ? , sexe = ? , emploi = ? , qualification = ? , date_entree = ? , date_sortie = ? , apprenti = ? , cdd = ? , temps_partiel = ? , contrat = ? , visite_medicale = ? WHERE registre.id = ?;';
    //on initialise notre tableau PHP
    $data=array();
    $db = include 'db_mysql.php';
    try { 
       //la ligne qui lance la requête préparée
       $stmt = $db->prepare($sql);
      $nom     = $_POST["nom"] ;
      $prenom     = $_POST["prenom"] ;
      $adresse     = $_POST["adresse"] ;
      $securite     = $_POST["securite"] ;
      $nationalite     = $_POST["nationalite"] ;
      $date_naissance     = $_POST["date_naissance"] ;
      $sexe     = $_POST["sexe"] ;
      $emploi     = $_POST["emploi"] ;
      $qualification     = $_POST["qualification"] ;
      $date_entree     = $_POST["date_entree"] ;
      $date_sortie     = $_POST["date_sortie"] ;
      $apprenti     = $_POST["apprenti"] ;
      $cdd     = $_POST["cdd"] ;
      $temps_partiel     = $_POST["temps_partiel"] ;
     
    if (empty($donnees['contrat'])) 	
    	{
    $contrat = $contrat2;		
     
    }
     else // SINON
    {
     
    $contrat = $fichier;
      }
     
      $visite_medicale     = $_POST["visite_medicale"] ;
    //qui va nous permettre de savoir quel enregistrement modifier
    $id  = (int)$_GET['id'] ;
     
     
     
       //Attention, bien mettre dans l'ordre de la requête !  mail puis id
       $stmt->execute(array($nom,$prenom,$adresse,$securite,$nationalite,$date_naissance,$sexe,$emploi,$qualification,$date_entree,$date_sortie,$apprenti,$cdd,$temps_partiel,$contrat,$visite_medicale,$id)) ;
       // on peut récupérer le nombre de lignes affectées 
       $nb_update = $stmt->rowCount();
       echo $nb_update.' modif effectuée<br/>';
       unset($db);
    } catch (Exception $e) {
       //s'il y a un problème PHP ou SQL, tout s'affichera ici
       print "Erreur ! " . $e->getMessage() . "<br/>";
    }
    ?>
    D'avance merci

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par mjdell Voir le message
    _ Si le "champs contrat" est déjà renseigné, possibilité de "supprimer" le fichier, et d'en "ajouter" un autre via le formulaire. Si pas de modification, on n'écrit pas sur la table. Si modification on enregistre le nom du "fichier" dans le champs.
    _ Si le "champs contrat" est vide, "ajouter un contrat" via le formulaire
    Tu as déjà fait 75% du travail.

    1- c'est de la simple logique.
    "Si ... ou ..." se traduit par if(...){ ... }else{ ... }

    2- perso, pour "supprimer", je mets une case à cocher : "supprimer le fichier ?"
    Et pour ajouter, un classique <input type="file"/>.

    Rien de bien compliqué.

    Un exemple ici.

  20. #20
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2018
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Bonsoir,

    merci pour votre retour rapide.
    Il ne me manquait vraiment pas grand chose, voici le code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (empty($fichier)) 	/// Si $fichier = vide (si je ne transferts pas de fichier donc)
    	{
    $contrat = $contrat2;		// contrat2 = valeur "contrat" sur la table ; alors je réécris la valeur de "contrat" dans le champs contrat
    }
     else // SINON (si $fichier est renseigné, la valeur contrat = fichier
    {
    $contrat = $fichier;
      }
    En tout cas merci !

Discussions similaires

  1. [MySQL] Insérer des infos dans ma base de données via un formulaire
    Par mOscar007 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/12/2013, 19h32
  2. Réponses: 1
    Dernier message: 04/01/2012, 19h08
  3. [MySQL] comment stocker puis recuper les images dans une base de donnée
    Par essono dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/11/2006, 00h07
  4. Réponses: 1
    Dernier message: 22/11/2006, 23h49
  5. Stocker les sessions dans une base de données
    Par mic79 dans le forum Langage
    Réponses: 7
    Dernier message: 06/04/2006, 22h57

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