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
| <?php
// traitement de la recherche
// connexion bdd
try {
$pdo = new PDO('mysql:host=localhost;dbname=base;charset=utf8', 'root', '', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
]);
} catch(Exception $e) {
die('Erreur : '.$e->getMessage());
}
$where = [];
$data = [];
// construction de la clause WHERE
if (isset($_POST['motscles'])) {
$data[':motscles'] = '%'.$_POST['motscles'].'%';
$where[] = 'i.retranscription LIKE :motscles';
}
$choix = [0, 1];
if (isset($_POST['avecVideo'], $choix[$_POST['avecVideo']])) {
$where[] = "i.video = {$choix[$_POST['avecVideo']]}";
}
if (isset($_POST['avecAudio'], $choix[$_POST['avecAudio']])) {
$where[] = "i.audio = {$choix[$_POST['avecAudio']]}";
}
if (isset($_POST['avecDocuments'], $choix[$_POST['avecDocuments']])) {
$where[] = "i.documents = {$choix[$_POST['avecDocuments']]}";
}
$where = empty($where) ? '' : ' WHERE '. implode(' AND ', $where);
$sql = <<<sql
SELECT GROUP_CONCAT( CONCAT(t.civilite, ' ', t.prenom, ' ', t.nom, ', ', t.qualite) ORDER BY t.nom SEPARATOR ' ~~ ') AS groupe, i.id, i.nom_fichier
FROM temoins as t
INNER JOIN asso_temoins at ON at.temoin_id = t.id
INNER JOIN temoignages i ON i.id = at.temoignage_id
{$where}
GROUP BY
i.id
ORDER BY
i.nom_fichier
sql;
$stmt = $pdo->prepare($sql);
$exec = $stmt->execute($data);
$data = $stmt->fetchAll();
if (empty($data)) {
echo 'Aucun résultat<br /><a href="recherche.php">Retour au formulaire de recherche</a>';
} else {
$nb = count($data);
echo '<p>', $nb, ' résultat', ($nb > 1) ? 's' : '', ' :</p>';
// échappement des caractères dangereux
$hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };
foreach ($data as $v) {
echo <<<html
<p><a href="temoignage.php?id={$v['id']}">Témoignage de {$hsc($v['groupe'])}</a></p>
html;
}
} |
Partager