Saisie/modification de données dans base MySQL

a marqué ce sujet comme résolu.

Bonjour,

je souhaite mettre en place un formulaire de saisie/modification de données de ma base PHP/MySQL.

J’ai déjà fait (non sans mal) le formulaire d’affichage des données présentes en base (capture). J’aimerais maintenant donner la possibilité à l’utilisateur de modifier les données via un formulaire identique.

Image utilisateur

Mes enregistrements sont identifiés dans ma table de façon unique par la variable ID. Je pensais donc faire un affichage dans un tableau sur une nouvelle page, à l’aide d’un requête 1 puis de modifier les données en base avec une deuxième requête UPDATE avec comme critère WHERE = ID de la requête 1. Un point important, c’est que l’utilisateur valide page par page et pas variable par variable.

Mais sans exemple de formulaire, j’ai bien du mal à construire mon algo. Si quelqu’un peut m’indiquer les étapes, çà m’aiderait beaucoup.

d’avance merci,

j’ai commencé ce code mais je bloque il ne récupère pas la valeur de id j’ai essayé de mettre ma requête UDPATE dans le while mais du coup il me modifie toutes les entrées d’un coup il faudrait que je puisse updater à chaque boucle mais je ne vois pas comment faire car j’ai un peu de mal à comprendre ce while et l’utilisation du fetch()

j’ai regardé du côte du foreach mais…

 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
// On démarre la session AVANT d'écrire du code HTML
session_start();

?>


<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Mereva</title>

    </head>

    <body>

        <?php
        try
        {
        // On se connecte à MySQL
        $bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
        }
        catch(Exception $e)
        {
        // En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
        }

        $correction = $_POST['correction'];

        //requête d'affichage
        $query1 = $bdd->query('SELECT id, pat FROM gbd_dat LIMIT 6');
        $donnees = $query1->fetch();



        // début du tableau
                            echo '<table>'."\n";
                            // première ligne on affiche les titres prénom et surnom dans 2 colonnes
                            echo '<tr class="class01">';
                            echo '<td class="ID">#ID</td>';
                            echo '<td class="Patient">Patient</td>';
                            echo '<td class="Fiche">Fiche</td>';
                            echo '<td class="Question">Question</td>';
                            echo '<td class="Description">Description</td>';
                            echo '<td class="Details">Details</td>';
                            echo '<td class="Correction">Corrections</td>';
                            echo '<td class="NR">NR</td>';
                            echo '<td class="Commentaires">Commentaires</td>';
                            echo '</tr>'."\n";



        while ($donnees = $query1->fetch())
        {
                            echo '<tr class="class02">';
                            echo '<td class="ID">'.$donnees['id'].'</td>';
                            echo '<td class="Patient">'.$donnees['pat'].'</td>';
                            echo '<td class="correction">'.
                                    '<form id="update" action="demande_de_corrections_page_insert.php" method="post">
                                    <p>
                                    <input type="text" name="correction" value="" /></br>
                                    </p>
                                    <p>
                                    <input type="submit" value="Envoyer" />
                                    </p>
                                    </form>'
                                    .'</td>';

                            echo '</tr>'."\n";
                            }
                            echo '</table>'."\n";
                            // fin du tableau. 
        ?>

        <?php
        //requête de mise à jour
        $query2 = $bdd->prepare('UPDATE gbd_dat SET cor = :correction WHERE id = :id');
        $query2->bindValue(':id',$donnees['id'], PDO::PARAM_INT);
        $query2->bindValue(':correction',$_POST['correction'], PDO::PARAM_STR);
        $query2->execute();

        ?>


    </body>

</html>

Je n’ai pas regardé ton code en détail.

Mais dans ton ébauche il manque une condition pour savoir si tu dois afficher le formulaire ou au contraire vérifier les données du formulaire.

Ensuite :

1
<input name="correction[]" />

Comme ça avec "[]", tu dis que correction est une liste d’éléments.

Puis en php :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?
$correction = isset($_POST["correction"]) ? $_POST["correction"] : false;

if (is_array($correction)) {
    for (var $i=0;$i<=count($correction);$i++) {
        echo $correction[$i];
    }
} else {
    throw new Exception("Formulaire invalide.");
    die("Erreur");
}
+0 -0

Ton code est en deux partie, avant et après :

1
//requête de mise à jour

Normalement tu as deux fichiers :

Un fichier HTML qui affiche ton HTML, il ne s’agit que de ton affichage côté client/navigateur.

Puis un fichier PHP qui fait la vérification et la saisie de tes données du formulaire.

Si tu assembles les deux fichiers, tu dois mettre une condition qui peut ressembler à ça :

1
2
3
4
5
6
<?php
if (isset($_POST["correction"])) {
    //ta vérification
} else {
    //Le code HTML du formulaire
}

Bonjour,

bon je pensais qu’après une nuit de sommeil j’aurais les idée plus claires mais… en fait, je ne suis pas sûr de comprendre ta remarque.

donc je vais essayer de reprendre point par point :

  1. je n’ai que des fichiers .php mon code php est directement inséré dans mon code html.

  2. j’ai une page demande_de_corrections_page.php qui m’affiche le contenu de ma table gbd_dat sur laquelle l’utilisateur peut naviguer de page en page

  3. lorsque que je clique sur un filtre en bas du tableau, j’ai une autre page demande_de_corrections_page_filtres.php qui permet à l’utilisateur de filtrer et de toujours naviguer page par page

  4. maintenant, j’aimerais que l’utilisateur puisse modifier les données du tableau dans la table. Je pense donc qu’il faut une nouvelle page demande_de_corrections_page_insert.php sur laquelle une partie des données du tableau seront simplement de l’affichage et l’autre partie de la saisie. Et surtout, je veux que l’utilisateur puisse saisir et valider une page entière (et pas variable par variable).

Donc j’en suis au point 3 et çà fonctionne. Maintenant, je veux donc implémenter le point 4. Je sais insérer des données en base (INSERT INTO ou UPDATE) mais je ne trouve pas l’algo qui me permette de faire ce que je décrit dans mon dernier point.

Je suis plus familier du VBA avec lequel j’utilise des recordsets (à partir de requêtes SQL) et la méthode MoveNext qui me permet de parcourir mon recordset et d’insérer à chaque boucle. Je pense que mon algo devrait ressembler à çà mais je n’y arrive pas en PHP. J’ai lu quelque article sur une méthode MoveNext en PHP donc je vais regarder de ce côté ce matin.

Je suis assez surpris qu’il n’y ait pas plus d’exemples et de tuto sur les formulaires de modifications php car c’est une action assez courante dans une application… ce qui me fait penser que je n’envisage peut-être pas la bonne solution… j’ai bien lu les tuto sur OC concernant les mini-chat, les forums etc.. mais çà ne correspond pas exactement à ce que je veux faire…

merci d’avance de m’aider à construire mon algo…

+0 -0

Un formulaire HTML ça donne ça :

Ton fichier HTML (ou PHP avec du code HTML à l’intérieur).

1
2
3
4
5
<form action="/action_page.php">
  <input type="hidden" name="token" value=3>
  <input type="text" name="element1">
  <input type="submit" value="Envoyer">
</form>

/action_page.php

1
2
3
4
5
<?php

echo $_POST["element1"];

// Je modifie ma base SQL.

Je t’invite à lire un tutoriel sur le fonctionnement du php car le code que tu as mis dans ton message est loin d’être fonctionnel et correcte.

Si tu ne sais pas ce que tu fais, tu risques de créer une brèche sur ton site.

euh, merci… je crois… j’ai suivi les tutoriels d’OC sur la création d’un site en HTML5/CSS3 et la conception d’un site web en PHP/MySQL et le tuto Ymox sur Zeste de savoir sur la pagination d’un site en PHP, pour ne citer qu’eux… et auxquels je fais référence dans mon code.

mon projet me sert à apprendre et j’ai bien conscience qu’il n’est pas parfait, notamment en terme de sécurité, mais de là à dire que je ne sais pas ce que je fais… c’est dur ! :euh:

je suis certes très débutant et certainement un peu lent à la compréhension… d’ailleurs je ne vois toujours pas en quoi ce que j’ai décrit plus haut est différent de ce que tu préconises ?

merci quand même d’avoir pris le temps de me lire

Ton problème c’est que tu souhaites afficher le formulaire en même temps que tu l’envoies. L’affichage du formulaire et la validation du formulaire se fait en deux temps. Il s’agit de deux requêtes.

Le code ligne 81 va se lancer en même temps que tu affiches le formulaire… Ce qui est impossible. L’utilisateur n’a pas encore eu le formulaire pour envoyer les données (donc tu auras une erreur).


Ma première réponse était dans le cas où tu souhaiterais faire un formulaire unique pour envoyer les données au lieu de faire un formulaire par ligne.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte