<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Afficher la distance entres 2 villes d'après un array associatif</title>
<style type="text/css" media="all">
.erreur {
    background: red; 
    color: white;
    padding: 1ex;
}
.distance {
    background: green; 
    color: white;
    padding: 1ex;
}
</style>
</head>

<body> 

<?php
error_reporting(E_ALL); // pour éviter les affichage de "Notice..." (de simples remarques)

if(isset($_GET['source'])) // petit bout de code trouvé sur le siteduzero.com
{
    show_source(__FILE__); 
    exit; 
}

$distances = array(
                "Lille" => array("Paris" => 221, "Nice" => 1154, "Brest" => 728, "Lyon" => 685),
                "Paris" => array("Nice" => 929, "Brest" => 595, "Lyon" => 460),
                "Nice" => array("Brest" => 1068, "Lyon" => 472),
                "Brest" => array("Lyon" => 1015)
                );
                
/* si le formulaire a effectivement été envoyé */
if ($_POST)
{
    /* on créé un tableau qui contiendra les erreurs si il y en a */
    $erreurs = array();
    
    /* on récupère les valeurs */
    $depart = $_POST["depart"];
    $arrivee = $_POST["arrivee"];
    if ($depart == $arrivee) {$erreurs[] = "Vous devez choisir deux villes différentes !";}
    
    /* on va détermine la distance */
    else // quand $depart != $arrivee
    {    
        /* si $distances[$depart][$arrivee] n'est pas pas vide = une valeur existe */
        if(!empty($distances[$depart][$arrivee])) 
        {
            $distance = $distances[$depart][$arrivee];
        }
        else // quand $distances[$depart][$arrivee] n'existe pas, il faut lire le tableau dans l'autre sens
        {
            $distance = $distances[$arrivee][$depart];
        }
    } 
} // FIN du  if ($_POST) 
?>

<h1>Afficher la distance séparant 2 villes d'après un tableau triangulaire</h1>

<form method="post" action="">

<?php 
if (!empty($erreurs)) // si il y a des erreurs, on les affiche
{
    echo "<div class='erreur'>
    <p><strong>Erreurs</strong> :</p>
    <ul>";
    foreach ($erreurs as $valeur)
    {
        echo "<li>$valeur</li>\n";
    }
echo "</ul>
</div>\n";
}
?>
    <p><label for="f_depart">Choisissez une ville de d&eacute;part</label> 
    <select name="depart" id="f_depart">
        <option value="Brest">Brest</option>
        <option value="Lille">Lille</option>
        <option value="Lyon">Lyon</option>
        <option value="Nice">Nice</option>
        <option value="Paris">Paris</option>
    </select></p>
    
    <p><label for="f_arrivee">Choisissez une ville d'arriv&eacute;e</label> 
    <select name="arrivee" id="f_arrivee">
        <option value="Brest">Brest</option>
        <option value="Lille">Lille</option>
        <option value="Lyon">Lyon</option>
        <option value="Nice">Nice</option>
        <option value="Paris">Paris</option>
    </select></p>
    
    <p><input type="submit" value="Afficher la distance entre les deux villes" /></p>
</form>

<?php 
if ($_POST && empty($erreurs)) // si le formulaire a été envoyé et qu'il n'y a pas d'erreurs
{
    echo "<p class='distance'>La distance entre $depart et $arrivee vaut <strong>$distance</strong> km.</p>";
} 
?>

<p><a href="?source">Afficher le code source PHP</a>. <a href="http://www.phpsources.org/scripts-poujolrost-mathias-6488-PHP.htm">Mes autres bouts de codes PHP/MySQL</a>.</p>

</body>
</html>