-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path09-data-transfer.html
More file actions
173 lines (156 loc) · 7.53 KB
/
09-data-transfer.html
File metadata and controls
173 lines (156 loc) · 7.53 KB
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<section id="data-transfer">
<section>
<h2>Transmettre des données</h2>
</section>
<section>
<h3>Les variables superglobales</h3>
<blockquote>
<p>“Les Superglobales sont des variables internes qui sont toujours disponibles, quel que soit le contexte”</p>
<cite>- php.net</cite>
</blockquote>
</section>
<section>
<h3>Les variables superglobales</h3>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code class="language-php">$GLOBALS</code></td>
<td>Référence toutes les variables disponibles dans un contexte global</td>
</tr>
<tr>
<td><code class="language-php">$_SERVER</code></td>
<td>Variables de serveur et d'exécution</td>
</tr>
<tr>
<td><code class="language-php">$_GET</code> <code class="language-php">$_POST</code></td>
<td>Variables HTTP GET / Variables HTTP POST</td>
</tr>
<tr>
<td><code class="language-php">$_FILES</code></td>
<td>Variable de téléchargement de fichier via HTTP</td>
</tr>
<tr>
<td><code class="language-php">$_COOKIE</code></td>
<td>Cookies HTTP</td>
</tr>
<tr>
<td><code class="language-php">$_SESSION</code></td>
<td>Variables de session</td>
</tr>
</tbody>
</table>
</section>
<section>
<h3>Les variables globales</h3>
<p>Pour transmettre des informations entre les pages, nous pourront utiliser 2 méthodes :</p>
<ol>
<li>Via l'URL (<code class="language-php">$_GET</code>) : Les données seront transmises et visibles dans l'URL.</li>
<li>Via un formulaire (<code class="language-php">$_POST</code>) : Les données seront transmises de façon dans la requête HTTP à l'aide d'un formulaire.</li>
</ol>
</section>
<section>
<h3>Via l'URL</h3>
<p>http://localhost/monsite/index.php?<span class="url-param">user</span>=<span class="url-value">jdupont</span>&<span class="url-param">admin</span>=<span class="url-value">0</span></p>
<p>Dans l’exemple ci-dessus, on passe à l’URL 2 paramètres. Le paramètre <span class="url-param">user</span> associé à la valeur <span class="url-value">jdupont</span> et le paramètre <span class="url-param">admin</span> associé à la valeur <span class="url-value">0</span>.</p>
<p>Le caractère ? permet d’indiquer que l’url contient des paramètres et le caractère & permet de définir plusieurs paramètres. Enfin, le caractère = permet d’associer un paramètre à une valeur.</p>
<footer>
<a href="#" class="danger">Il ne faut jamais passer des valeurs sensibles dans l’URL !</a>
</footer>
</section>
<section>
<h3>Via l'URL</h3>
<p>Pour récupérer les données sur la page cible, on utilisera la superglobale <code class="language-php">$_GET</code></p>
<pre><code class="language-php">$username = $_GET['user'];
echo 'Bonjour ' . $username;</code></pre>
</section>
<section>
<h3>Via l'URL</h3>
<div class="container">
<div class="col">
<h4>index.php</h4>
<pre><code class="language-php"><ul>
<?php foreach($listePays as $pays) : ?>
<li>
<a href="country.php?pays=<?php echo $pays; ?>">
<?php echo $pays; ?>
</a>
</li>
<?php endforeach; ?>
</ul></code></pre>
</div>
<div class="col">
<h4>country.php</h4>
<pre><code class="language-php"><?php $nompays = $_GET['pays']; ?>
<h1><?php echo $nompays; ?></h1></code></pre>
</div>
</div>
<p>Dans cet exemple le lien se fait avec le mot "pays" utilisé dans l'URL (<code class="language-php"><a href="country.php?pays=<?php echo $pays; ?>"></code>) puis ensuite récupéré via la variable <code class="language-php">$_GET['pays']</code>.</p>
</section>
<section>
<h3>Via un formulaire</h3>
<p>Via un formulaire HTML, utilisez l’attribut "name" sur les différents champs du formulaire pour les transmettre sur une page de traitement des données.</p>
</section>
<section>
<h3>Via un formulaire</h3>
<pre><code class="language-php"><form method="POST" action="traitement.php">
<input type="text" name="nom" placeholder="Nom"/>
<input type="text" name="prenom" placeholder="Prénom"/>
<textarea name="commentaire"></textarea>
<input type="submit" value="Envoyer"/>
</form></code></pre>
<p>Pour pouvoir transférer les données, il ne faut pas oublier d'ajouter les attributs suivants sur le formulaire :</p>
<ul>
<li><code class="language-html">method="POST"</code> : Définir la méthode (GET ou POST) a utiliser pour tranférer les données.</li>
<li><code class="language-html">action="traitement.php"</code> : Définir la page qui sera chargée de traiter les données du formulaire.</li>
<li><code class="language-html">name="nom"</code> : Associer chaque champs du formulaire à un nom.</li>
</ul>
</section>
<section>
<h3>Via un formulaire</h3>
<p>Pour récupérer les données sur la page cible, on utilisera la superglobale <code class="language-php">$_POST</code>.</p>
<pre><code class="language-php">$name = $_POST['nom'];
$surname = $_POST['prenom'];
$comment = $_POST['commentaire'];
echo $name . ' ' . $surname . '\n' . $comment;</code></pre>
</section>
<section>
<h3>Via un formulaire</h3>
<div class="container">
<div class="col">
<pre><code class="language-php"><form method="POST" action="traitement.php">
<input type="text" name="nom" placeholder="Nom"/>
<input type="text" name="prenom" placeholder="Prénom"/>
<textarea name="commentaire"></textarea>
<input type="submit" value="Envoyer"/>
</form></code></pre>
</div>
<div class="col">
<pre><code class="language-php">$name = $_POST['nom'];
$surname = $_POST['prenom'];
$comment = $_POST['commentaire'];
echo $name . ' ' . $surname . '\n' . $comment;</code></pre>
</div>
</div>
<p>Dans cet exemple, le lien se fait avec le mot "nom" utilisé dans l'attribut name de l'input (<code class="language-php"><input type="text" name="nom" placeholder="Nom"/></code>) et la variable <code class="language-php">$_POST['nom']</code></p>
</section>
<section>
<h3>Sécurité</h3>
<p>NE JAMAIS FAIRE CONFIANCE AUX DONNÉES REÇUES !</p>
<ul>
<li>Faille XSS (ex : exécution de code javascript)</li>
<li>Faille CSRF (ex : forcer l’exécution d’une action par un autre utilisateur ayant les droits nécessaires)</li>
<li>SQL Injection</li>
</ul>
<img src="assets/images/sql-injection.jpg" alt="SQL Injection">
</section>
<section>
<h3>Exercice</h3>
<p>Utilisez les variables superglobales pour transférer des données sur le projet fil rouge.</p>
</section>
</section>