Difficile de vous répondre sans connaître la structure des tables.
Cependant pour pouvoir effectuer la jointure il vous faudrait une colonne pays_id dans votre table VILLES.
Ainsi vous pourriez écrire la requête suivante :
Ensuite dans votre code vous réutilisez les mêmes nom de variables en PHP, ce qui peut créer des conflits.
A+
]]>villes.php
<?php
$mysqli = new mysqli('localhost', 'root', '', 'exercice_projet_villes');
$mysqli->set_charset("utf8");
?>
<?php
$result = $mysqli->query('SELECT ville_id, ville_nom FROM villes');
while ($row = $result->fetch_array()) {
$villes[$row['ville_id']] = $row['ville_nom'];
}
$result = $mysqli->query('SELECT pays.pays_id, pays_nom FROM pays INNER JOIN villes
WHERE pays.pays_id = villes.pays_id GROUP BY pays_nom ORDER BY pays_nom');
while ($row = $result->fetch_array()) {
$pays_liste[$row['pays_id']] = $row['pays_nom'];
echo '<pre>';
print_r($pays_liste);
echo '</pre>';
}
?>
<ul>
<?php
if (!empty($villes)) {
foreach ($villes as $id => $ville) : ?>
<li><a href="ville.php?id=<?php echo $id; ?>"><?php echo $ville; ?></a></li>
<?php endforeach ?>
<?php } ?>
</ul>
<ul>
<?php
if (!empty($pays_liste)) {
foreach ($pays_liste as $id => $pays) : ?>
<li><a href="pays.php?id=<?php echo $id; ?>"><?php echo $pays; ?></a></li>
<?php endforeach ?>
<?php } ?>
</ul>
<?php
$result->free();
$mysqli->close();
?>
pays.php
<?php require('includes/inc-connexion.php'); ?>
<?php
$pays_id = $_GET['id'];
$result = $mysqli->query('SELECT pays_nom, ville_nom, ville_id FROM pays INNER JOIN villes
WHERE villes.pays_id = pays.pays_id AND pays.pays_id = ' . $pays_id);
while ($row = $result->fetch_array()) {
$pays_nom = $row['pays_nom'];
$villes[$row['ville_id']] = $row['ville_nom'];
}
?>
<?php
$result->free();
$mysqli->close();
?>
]]>