<!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>