-
Notifications
You must be signed in to change notification settings - Fork 2
/
wall.php
177 lines (165 loc) · 8.03 KB
/
wall.php
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
174
175
176
177
<?php
session_start();
?>
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>ReSoC - Mur</title>
<meta name="author" content="Julien Falconnet">
<link rel="stylesheet" href="style.css"/>
</head>
<body>
<?php
include "menu.php";
?>
<div id="wrapper">
<?php
/**
* Etape 1: Le mur concerne un utilisateur en particulier
* La première étape est donc de trouver quel est l'id de l'utilisateur
* Celui ci est indiqué en parametre GET de la page sous la forme user_id=...
* Documentation : https://www.php.net/manual/fr/reserved.variables.get.php
* ... mais en résumé c'est une manière de passer des informations à la page en ajoutant des choses dans l'url
*/
$userId =intval($_GET['user_id']);
?>
<?php
/**
* Etape 2: se connecter à la base de donnée
*/
// $mysqli = new mysqli("localhost", "root", "root", "socialnetwork");
include "dbconnect.php";
?>
<aside>
<?php
/**
* Etape 3: récupérer le nom de l'utilisateur
*/
$laQuestionEnSql = "SELECT * FROM users WHERE id= '$userId' ";
$lesInformations = $mysqli->query($laQuestionEnSql);
$user = $lesInformations->fetch_assoc();
//@todo: afficher le résultat de la ligne ci dessous, remplacer XXX par l'alias et effacer la ligne ci-dessous
//echo "<pre>" . print_r($user, 1) . "</pre>";
?>
<img src="user.jpg" alt="Portrait de l'utilisatrice"/>
<section>
<h3>Présentation</h3>
<p>Sur cette page vous trouverez tous les message de l'utilisatrice : <?php echo $user['alias']?>
(n° <?php echo $userId ?>)
</p>
<?php
/**
* BD
*/
$mysqli = new mysqli("localhost", "root", "root", "socialnetwork");
/**
* Récupération de la liste des auteurs
*/
$listAuteurs = [];
$laQuestionEnSql = "SELECT * FROM users";
$lesInformations = $mysqli->query($laQuestionEnSql);
while ($user = $lesInformations->fetch_assoc())
{
$listAuteurs[$user['id']] = $user['alias'];
}
/**
* TRAITEMENT DU FORMULAIRE
*/
// Etape 1 : vérifier si on est en train d'afficher ou de traiter le formulaire
// si on recoit un champs email rempli il y a une chance que ce soit un traitement
$enCoursDeTraitement = isset($_POST['message']);
//echo "<pre>" . print_r($_POST, 1) . "</pre>";
//echo $enCoursDeTraitement; // true
//echo $_POST['message'];
if ($enCoursDeTraitement)
{
// on ne fait ce qui suit que si un formulaire a été soumis.
// Etape 2: récupérer ce qu'il y a dans le formulaire @todo: c'est là que votre travaille se situe
// observez le résultat de cette ligne de débug (vous l'effacerez ensuite)
//echo "<pre>" . print_r($_POST, 1) . "</pre>";
// et complétez le code ci dessous en remplaçant les ???
$authorId = $_POST['auteur']; // va chercher le name = auteur dans le input en bas
$postContent = $_POST['message']; // va chercher le name = message dans le input en bas
//Etape 3 : Petite sécurité
// pour éviter les injection sql : https://www.w3schools.com/sql/sql_injection.asp
$authorId = intval($mysqli->real_escape_string($authorId));
$postContent = $mysqli->real_escape_string($postContent);
//Etape 4 : construction de la requete
$lInstructionSql = "INSERT INTO posts "
. "(id, user_id, content, created) "
. "VALUES (NULL, "
. $authorId . ", "
. "'" . $postContent . "', "
. "NOW());" // fin sql
; // fermer php
//echo $lInstructionSql;
// Etape 5 : execution
$ok = $mysqli->query($lInstructionSql);
if ( ! $ok)
{
echo "Impossible d'ajouter le message: " . $mysqli->error;
} else
{
echo "Message posté en tant que :" . $listAuteurs[$authorId];
//exit();
}
}
?>
<form action="wall.php?user_id=<?php echo $userId ?>" method="post">
<input type='hidden' name='auteur' value='<?php echo $userId ?>'>
<dl>
<dt><label for='message'>Message</label></dt>
<dd><textarea name='message' cols="30" rows="5"></textarea></dd>
</dl>
<input type='submit'>
</form>
</section>
</aside>
<main>
<?php
/**
* Etape 3: récupérer tous les messages de l'utilisatrice
*/
$laQuestionEnSql = "
SELECT posts.content, posts.created, users.alias as author_name, users.id,
COUNT(likes.id) as like_number, GROUP_CONCAT(DISTINCT tags.label) AS taglist
FROM posts
JOIN users ON users.id=posts.user_id
LEFT JOIN posts_tags ON posts.id = posts_tags.post_id
LEFT JOIN tags ON posts_tags.tag_id = tags.id
LEFT JOIN likes ON likes.post_id = posts.id
WHERE posts.user_id='$userId'
GROUP BY posts.id
ORDER BY posts.created DESC
";
$lesInformations = $mysqli->query($laQuestionEnSql);
if ( ! $lesInformations)
{
echo("Échec de la requete : " . $mysqli->error);
}
/**
* Etape 4: @todo Parcourir les messsages et remplir correctement le HTML avec les bonnes valeurs php
*/
while ($post = $lesInformations->fetch_assoc())
{
//echo "<pre>" . print_r($post, 1) . "</pre>";
?>
<article>
<h3>
<time><?php echo $post['created']?></time>
</h3>
<address><a href= "wall.php?user_id=<?php echo $post['id']?>"><?php echo $post['author_name']?></address>
<div>
<p><?php echo $post['content']?></p>
</div>
<footer>
<small>♥<?php echo $post['like_number']?></small>
<a href="">#<?php echo $post['taglist']?></a>,
</footer>
</article>
<?php } ?>
</main>
</div>
</body>
</html>