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
| <?php
// interception d'absence de mots clés
if (empty($_POST['motscles'])) {
echo <<<'html'
Veuillez taper un mot-clé ou sélectionner au moins un critère de recherche avancée<br />
<a href="recherche.php">Retour au formulaire de recherche</a>
html;
exit;
}
// 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 = [];
$type = []; // types de données pour PDO
// construction de la clause WHERE
$data[':motscles'] = '%'.$_POST['motscles'].'%';
$type[':motscles'] = PDO::PARAM_STR;
$where[] = 'i.restranscription LIKE :motscles';
if (isset($_POST['audio'])) {
$cac = (int)$_POST['audio'];
$data[':audio'] = ($cac === 0) ? 0 : 1; // on s'assure que l'on aura que des 1 ou des 0
$type[':audio'] = PDO::PARAM_INT;
$where[] = 'i.audio = :audio';
}
if (isset($_POST['video'])) {
$cac = (int)$_POST['video'];
$data[':video'] = ($cac === 0) ? 0 : 1; // on s'assure que l'on aura que des 1 ou des 0
$type[':video'] = PDO::PARAM_INT;
$where[] = 'i.video = :video';
}
if (isset($_POST['document'])) {
$cac = (int)$_POST['document'];
$data[':document'] = ($cac === 0) ? 0 : 1; // on s'assure que l'on aura que des 1 ou des 0
$type[':document'] = PDO::PARAM_INT;
$where[] = 'i.document = :document';
}
$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);
// injection des valeurs dynamiques
foreach ($data as $tag => $v) {
$stmt->bindValue($tag, $v, $type[$tag]);
}
$exec = $stmt->execute();
$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