Bonjour à tous,
J'ai besoin d'ajouter à mon tableau une sorte de fonction de recherche. Je m'explique : ce tableau contient des villes remplies grâce à ma base de données. Le nombre varie toujours, il peut y en avoir 4 comme 50. Pour que le client trouve rapidement sa ville, je voulais créer un "moteur de recherche" dans 1 champs de ce tableau (le nom des villes). Or, je n'ai rien trouvé. (Si vous avez un lien je suis preneur !!)
Je vais donc me contenter d'une liste déroulante contenant les villes, qui, une fois la ville selectionnée, renvoie à la ligne correspondante du tableau. Des anres donc.
Cependant, j'ai un soucis. Je n'arrive pas à le mettre en place... Voici mon code actuel :
<table class="tabletournee">
<caption>Dates et lieux de la tournée 2017</caption>
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=medrano2017;charset=utf8', 'root', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$reponse = $bdd->query('SELECT * FROM evenement');
?>
<tr class="rechercheville">
<td colspan="4">
<form class="recherchevilletournee">
<select>
<?php
while ($donnees = $reponse->fetch())
{
?>
<option><?php echo ''.$donnees['ville_event'].'';?></option>
<?php
}
?>
</select>
<a href="#event<?php echo $donnees['id_event']?>" class="lienresa">VALIDER</a>
</form>
</td>
</tr>
<?php
$reponse = $bdd->query('SELECT id_event,
id_tournee,
evenement.ville_event AS ville,
evenement.lien_resa_event AS lienresa,
evenement.adresse_event AS adresse,
tournee.description_tournee AS descriptiontournee,
tournee.nom_tournee AS nomtournee,
(SELECT MIN(s.dateheure_seance) FROM seance s WHERE s.id_event = evenement.id_event) AS premiereSeance,
(SELECT MAX(s.dateheure_seance) FROM seance s WHERE s.id_event = evenement.id_event) AS derniereSeance
FROM tournee
JOIN evenement USING(id_tournee)
ORDER BY premiereSeance,derniereSeance');
$compteur =0;
$datecourante = date('Y-m-d H:i:s');
while ($donnees = $reponse->fetch())
{
setlocale(LC_ALL, 'French', 'fr-FR.utf8','fra', 'fr-FR', 'fr_FR', 'fr', 'fr_FR@euro');
$datedebut = strftime("%d %B", strtotime($donnees['premiereSeance']));
$datefin = strftime("%d %B %Y", strtotime($donnees['derniereSeance']));
if( $donnees['derniereSeance'] >= $datecourante )
{
?>
<tr class="infotournee infotournee<?php echo ($compteur%2); $compteur++; ?>">
<td id="event<?php echo $donnees['id_event']; ?>"><p style="color:white;" class="villetournee"><?php echo ''.$donnees['ville'].'';?></p> <p class="nomtournee"><?php echo ''.$donnees['nomtournee'].'';?></p></td>
<td><?php echo (strpos($datedebut,' '.$datefin))? 'Le '.utf8_encode($datedebut) : 'Du '.utf8_encode($datedebut).'<br/>au '.utf8_encode($datefin); ?></td>
<td><?php echo ''.$donnees['adresse'].'';?></td>
<td><a href="#" class="lienresa">PLUS D'INFOS</a><a class="lienresa" href="#">RESERVER</a></td>
</tr>
<?php
}
}
$reponse->closeCursor();
?>
</table>
J'ai essayé comme vous pouvez le voir de mettre un href="#event<?php echo $donnees['id_event']?>" puis un id="event<?php echo $donnees['id_event']; ?>" mais sans succés, lorsque je séléctionne la ville puis clique sur le bouton "valider", dans l'url j'ai uniquement #event...
Voici ma page actuelle pour plus de clareté :
<a href="http://www.hostingpics.net/viewer.php?id=870448Sanstitre.png"><img src="http://img4.hostingpics.net/thumbs/mini_870448Sanstitre.png" alt="Heberger image" /></a>
Si vous avez une idée, elle est la bienvenue, et merci à tous d'avance !
Salut, je pense avoir trouver la reponse a ton sujet : https://www.w3schools.com/w3css/w3css_filters.asp
Salut, pourquoi ne pas utilisé Datatables ? Toutes les fonctions sont déjà intégrées a toi de les activer ou non. (Pagination, Recherche, Nombre de résultats par page...)
Bonjour boostor,
Parce que je viens de récupérer ce code et que je dois uniquement faire cette modif. C'est une demande assez urgente, je pense que je vais faire ça avec la liste déroulante dans un premier temps, et faire ensuite avec ton plugin par la suite !
Slt,
tu peux juste créer un input de type text recuperer le contenu des quil ya une modif en ajax et recuperer dans la base de donnée les resultats correspondant comme ceux-ci
<input type="text" name="field" onKeyUp="rechercher_ville(this.value);" onKeyDown="rechercher_ville(this.value);" onChange="rechercher_ville(this.value);" placeholder="Recherche...">
js
function rechercher_ville(value) {
$.ajax({
url: "traitement.php",
type: "post",
dataType: "json",
data: "ville="+value,
success: function(response){
//code de retour
},
error: function(e){
//alert(e);
}
});
}
traitement.php
ob_start();
$sql = "SELECT champ"
. " FROM table"
. " WHERE LOWER(ville) LIKE LOWER(?)"
. " ORDER BY ville";
$req = $bdd->prepare($sql);
$req->execute(array('%'.$_POST['ville'].'%'));
$arrs = $req->fetchAll();
if(count($arrs)>0) {
foreach($arrs as $arr) {
?>
tableau retourne
}
} else { ?>
<tr><td >Aucun résultat</td></tr>
<?php }
$result['popininfo'] = ob_get_contents();
ob_end_clean();
echo json_encode($result);
Bonjour,
Alors je ne comprends pas ton code, mais je pense comprendre le principe. Si je fais comme cela, il faudrait que ça me retourne les 2 balises tr correspondantes à la vile recherchée : La ville avec ses dates et ses boutons, et le spoiler qui va avec.
Je trouve ça plus compliqué non ?
De plus, je ne sais absolument pas ou mettre le code qui tu as mis avec le "traitement.php" puisqu'il contient aussi de l'HTML...
Mais merci en tout cas !
tu peux mettre un id sur le tableau et changer son contenu dynamiquement en ajax avec ce qui est retourner par traitement
Je préfére quand même garder la totalité des dates dans le tableau. Les ancres comme je le voulais à la base ça ne pourrait pas marcher ?
Salut,
J'ai deja essayé mais même en l'adaptant ça ne fonctionne pas dans mon cas, vu que mon tableau comporte plusieurs TR et TD :/
Mais ça serait top !
Salut, bizarre que cela ne fonctionne pas... il suffit de reprendre le script et de mettre la barre de recherche avec l'id dans la table. L'exemple du lien au dessus, il y a bien plusieurs tr et td.