8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,
je suis en train de monter un site pour une association de commerçants.
J'ai une table MySQL qui contient le descriptif de chaque boutique et j'ai codé un moteur de recherche qui en lui-même marche très bien :
le visiteur tape sa requête dans le moteur, ce dernier affiche les résultats qui est une liste des boutiques correspondant à sa recherche, avec pour chaque boutique du résultat un lien qui renverra le visiteur sur la fiche complète de la boutique.
Mon problème se situe au niveau de ce lien :

Ce lien est le suivant :

echo '<li><p><a href="fiche-boutique.php?name=' .$c. '">'.$c.'</a></p></li>';


je voudrais envoyer la variable (qui contient donc le nom d'une boutique) dans l'url pour ensuite la récupérer par un $_GET et généré la fiche-boutique détaillé correspondante avec php.

Sauf que sur la feuille de résultats, ce lien s'affiche ainsi :
al mercatino">al mercatino (où "al mercatino" est le nom de la boutique dont on veut voir la fiche, soit la variable $c).
Dans le navigateur (chrome), l'url s'affiche ainsi :
fiche-boutique.php?name=<span%20class=

Quelqu'un sait-il corriger ça, et m'expliquer ce que j'ai mal fait afin que je ne reproduise plus cette erreur.
Par avance merci.
Sylvain.

je vous poste le code du moteur au complet, si ça peut sservir :

if(isset($_POST['requete']) && !empty($_POST['requete'])){
    $requete = $_POST['requete'];
    $s = explode(" ",$requete);
    $req = $bdd->prepare('SELECT * FROM boutiques WHERE cleboutique LIKE ?');
    $req->execute(array("%$_POST[requete]%"));
    $nb_resultat = $req->rowCount();
    {
        ?>
        
        <div class="comptage">
        <?php
    }
    
    echo '<p>il y a ' .$nb_resultat. ' résultat(s) pour votre recherche.</p>';
    {
        ?>
        </div>
        
        <div id="search_result">
        <?php
    }
    
'<ul>';
    while ($donnees = $req->fetch())
    {
        $c = $donnees['nom'];       
        foreach($s as $mot) {
            $c = str_ireplace($mot,'<span class="surligne">' .$mot. '</span>',$c);
        }
        echo '<li><h1>' . $c . '</h1></li>';
        
        $e = $donnees['Activite'];
        foreach($s as $mot) {
            $e = str_ireplace($mot,'<span class="surligne">' .$mot. '</span>',$e);
        }
        echo '<li><p>' . $e . '</p></li>';
        echo '<li><p><a href="fiche-boutique.php?name=' .$c. '">'.$c.'</a></p></li>';
    }
'</ul></div>';
    }

else {
    {
        ?>
        <div class="comptage" id="search_error">
        <?php
    }
    
    echo '<p>Vous n\'avez pas saisi de recherche !</p>';
    {
        ?>
        </div>
        <?php
    }
    
}
Bonjour,

quand tu passes des variables dans tes url, je te conseille de passer des chiffres, genre l'id de ta boutique, plutôt que son nom.
Modérateur
Bonjour

$c = $donnees['nom'];       // $c == 'al mercatino' 
        foreach($s as $mot) {
            $c = str_ireplace($mot,'<span class="surligne">' .$mot. '</span>',$c);
        } // =>  $c == '<span class="surligne">al</span> <span class="surligne">mercatino</span>' 
        echo '<li><h1>' . $c . '</h1></li>';
        
        $e = $donnees['Activite'];
        foreach($s as $mot) {
            $e = str_ireplace($mot,'<span class="surligne">' .$mot. '</span>',$e);
        }
        echo '<li><p>' . $e . '</p></li>';
        echo '<li><p><a href="fiche-boutique.php?name=' .$c. '">'.$c.'</a></p></li>';
        // echo <li><p><a href="fiche-boutique.php?name=<span class="surligne">al</span> <span class="surligne">mercatino</span>"><span class="surligne">al</span> <span class="surligne">mercatino</span></a></p></li>

Tu as un problème avec ta variable $c qui n'est plus ce dont tu as besoin.
la dernière ligne devrait être:
echo '<li><p><a href="fiche-boutique.php?name=' .$donnees['nom']. '">'.$c.'</a></p></li>';


p.s. : Quelques conseils pour éviter ce genre d'erreurs:
- nommer mieux ses variables, le nom te renseigne sur son contenu et comment l'utiliser.
- éviter de mélanger, le plus possible, trop de code php à de l'affichage HTML. => étape 1: récupérer et traiter les données, étape 2: afficher la page.
- Comme Pedrothelion, utilise de préférence des id.
ok, merci pour votre coup de main et vos précieux conseils.
J'aimerais, par ailleurs, savoir pourquoi il faut plutôt utiliser l'id que le nom ?
Merci Smiley smile
parce que c'est beaucoup plus simple Smiley smile regarde tes lignes de code inutiles
Disons que conventionnellement parlant, si tu manipules une base de données, on repère un enregistrement dans une table via son id.