problème boucle

Eléphant du PHP | 66 Messages

07 janv. 2023, 22:01

Bonjour

Je ne vois pas ou mon code n'est pas bon c'est la dernière partie ou j'ai fait les commentaires
Merci de votre aide
<div class="recherche">
        <form action="" method="post">
            <fieldset>
                <legend>Rechercher une ville</legend>
                <p>Saisir le nom d'une ville <input type="texte" name="ville"></p>
                <input type="submit" name="submit_recherche" value="Rechercher">
            </fieldset>
        </form>
    </div>
    <?php

    if (isset($_POST['submit_recherche'])){
        $ville_input = $_POST['ville'];
        if (empty($ville_input)) {
            echo 'Merci de saisir une ville';
        }
        else{
            $result = $mysqli->query('SELECT count(ville_id) FROM villes WHERE ville_nom = "'.$ville_input.'" ');
            $row = $result->fetch_array();                    
            if($row[0] <= 0){
                    echo 'La ville recherchée n\'est pas dans notre base.';
            }
            else{
                $result = $mysqli->query('SELECT ville_id, ville_nom, ville_texte FROM villes');
                while ($row = $result->fetch_array()) {
                    $villes[$row['ville_id']] = $row['ville_nom'];
                }
                foreach ($villes as $id => $ville)
                if ($ville_input == $ville){
                    echo '<a href="index.php?id_input=' . $id . '">' . $ville . '</a>';                            
                }
            }    
        }       
    }
    if(isset($_GET['id'])){
        $id_input = $_GET['id'];
        //récupération des valeurs de la table
        $result = $mysqli->query('SELECT ville_id, ville_nom, ville_texte FROM villes');
        //transformation en tableau des valeurs récupérées
        while($row = $result->fetch_array()){
            //création du nouveau tableau pour affichage ultérieure
            $villes[$row['ville_id']] = $row['ville_texte']; 
        }                
        //boucle qui passe en revue le tableau $villes
        foreach ($villes as $id => $ville)
        //condition pour récupérer le bon texte de la bonne ville pour affichage après
        if ($id_input == $ville['ville_id']){
            //affichage du texte
        echo '<p class="résumé"> <span>Résumé : </span>' . $ville['ville_texte'] . '</p>';          
        }        
    }

    ?>

Mammouth du PHP | 2703 Messages

07 janv. 2023, 23:05

quelle est l'url de la page après avoir cliqué sur un lien ?

le while suivi d'un foreach est inutile, tout peut se faire dans le while.

Eléphant du PHP | 66 Messages

08 janv. 2023, 00:24

Bonjour,

merci pour ton aide,
voici l'URL : http://villerecherche/index.php?id_input=1
le 1 change en fonction de la ville bien sûr.

j'ai aussi essayé cela mais toujours un problème, je rame depuis plus de 6 heures !!
voir la fin du code
?>
    <br><br><br>
    <div class="recherche">
        <form action="" method="post">
            <fieldset>
                <legend>Rechercher une ville</legend>
                <p>Saisir le nom d'une ville <input type="texte" name="ville"></p>
                <input type="submit" name="submit_recherche" value="Rechercher">
            </fieldset>
        </form>
    </div>
    <?php

    if (isset($_POST['submit_recherche'])) {
        $ville_input = $_POST['ville'];
        if (empty($ville_input)) {
            echo 'Merci de saisir une ville';
        } else {
            $result = $mysqli->query('SELECT count(ville_id) FROM villes WHERE ville_nom = "' . $ville_input . '" ');
            $row = $result->fetch_array();
            if ($row[0] <= 0) {
                echo 'La ville recherchée n\'est pas dans notre base.';
            } else {
                $result = $mysqli->query('SELECT ville_id, ville_nom, ville_texte FROM villes');
                while ($row = $result->fetch_array()) {
                    $villes[$row['ville_id']] = $row['ville_nom'];
                }
                foreach ($villes as $id => $ville)
                if ($ville_input == $ville) {
                    echo '<a href="index.php?id_input=' . $id . '">' . $ville . '</a>';
                }
            }
        }
    }
    if (isset($_GET['id'])) {
        $id_input = $_GET['id'];
        $result = $mysqli->query('SELECT ville_id, ville_nom, ville_texte FROM villes WHERE ville_id = "' . $id_input . '" ');
        $row = $result->fetch_array();
        $ville_nom = $row['ville_nom'];
        $ville_texte = $row['ville_texte'];
        echo $ville_texte ;       
    }    

Mammouth du PHP | 2703 Messages

08 janv. 2023, 00:45

comment on récupère le 1 quand on a une telle url ?

Eléphant du PHP | 66 Messages

08 janv. 2023, 01:01

oh merci de ton aide précieuse j'ai fait une sacrée boulette dans mon script

j'apprécie beaucoup ton aide qui nous pousse à la réflexion, j'imagine que tu as beaucoup d'expérience en php mois je suis petit novice ça fait deux mois que j'ai commencé php à raison de 2heures par jours 5 jours/semaine!!

if (isset($_GET['id'])) {
        $id_input = $_GET['id'];
alors que j'aurai dû mettre
if (isset($_GET['id_input'])) {
        $id_input = $_GET['id_input'];

Mammouth du PHP | 2703 Messages

08 janv. 2023, 01:09

mettre des echo un peu partout permet de debuguer. vous vous seriez aperçu bien plus vite que cela ne rentrait pas dans le if, donc le code dans le if, on s'en fout.