Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Correspondance américaine d’une note de musique


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Correspondance américaine d’une note de musique
    Bonjour voici mon code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    <!DOCTYPE html>
     
    <?php
     
    $notes = array("do" => "C", "ré" => "D", "mi" => "E", "fa" => "F", "sol" => "G", "la" => "A", "si" => "B");
     
    $message = "";
     
    if($_SERVER["REQUEST_METHOD"] == "POST") {
     
    	if(empty($_POST["note_classique"])) {
     
    		$message = '<p>Aucune note choisie !</p>';
        }
        else {
     
        	$note = $_POST["note_classique"];
     
            $message = '<p>La notation américaine pour la note ' . $note . ' est ' . $note_americaine . '</p>';
        }
    }
     
    ?>
     
    <html lang="fr">
     
    <head>
        <title>Correspondance américaine d’une note de musique</title>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/style.css">
    </head>
     
    <body>
    	<h1>Correspondance des notes de musique classiques et anglaises</h1>
        <form action="note.php" method="post">
        	<fieldset>
        		<legend>Correspondance classique->anglaise</legend>
                <p>Choisissez une note: </p>
                <select name="note_classique">
                	<?php foreach($notes as $note_classique => $note_americaine) {
     
                		echo '<option value="' . $note_americaine . '">' . $note_classique . '</option>';
                    }
     
                    ?>
                </select><br>
            </fieldset>
        </form>
     
        <div id="result">
            <?php echo $message; ?>
        </div>
    </body>
     
    </html>


    Quand je choisie une note dans la liste -> Notice: Undefined variable: note_americaine in C:\wamp64\www\devoir 2\note.php on line 19

    Merci pour votre aide & bon weekend

  2. #2
    Membre expert
    Bonjour,
    il semble que le problème se situe dans le fichier note.php. Ca pourrait servir de le donner...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  3. #3
    Expert confirmé
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $message = '<p>La notation américaine pour la note ' . $note . ' est ' . $note_americaine . '</p>';

    Il faut que tu accèdes à ton tableau $notes, ce que tu ne fais pas ci-dessus.

    Possibilité :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $message = '<p>La notation américaine pour la note ' . $note . ' est ' . $notes[$note] . '</p>';


    Ou en valorisant $note_americaine :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    $note = $_POST["note_classique"];
    $note_americaine = $notes[$note];
    $message = '<p>La notation américaine pour la note ' . $note . ' est ' . $note_americaine . '</p>';
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  4. #4
    Membre à l'essai
    Voici mon nouveau code :

    page1.php

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    <!DOCTYPE html>
     
    <?php
     
    $notes = array("do" => "C", "ré" => "D", "mi" => "E", "fa" => "F", "sol" => "G", "la" => "A", "si" => "B");
     
    $message = "";
     
    if($_SERVER["REQUEST_METHOD"] == "POST") {
     
    	if(empty($_POST["note_classique"])) {
     
    		$message = '<p>Aucune note choisie !</p>';
        }
        else {
     
        	$note = $_POST["note_classique"];
     
            $note_americaine = $notes[$note];
     
            $message = '<p>La notation américaine pour la note ' . $note . ' est ' . $note_americaine . '</p>';
        }
    }
     
    ?>
     
    <html lang="fr">
     
    <head>
        <title>Correspondance américaine d’une note de musique</title>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/style.css">
    </head>
     
    <body>
    	<h1>Correspondance des notes de musique classiques et anglaises</h1>
        <form action="note.php" method="post">
        	<fieldset>
        		<legend>Correspondance classique->anglaise</legend>
                <p>Choisissez une note: </p>
                <select name="note_classique">
                	<?php foreach($notes as $note_classique => $note_americaine) {
     
                		echo '<option value="' . $note_americaine . '">' . $note_classique . '</option>';
                    }
     
                    ?>
                </select><br>
            </fieldset>
        </form>
     
        <div id="result">
            <?php echo $message; ?>
        </div>
    </body>
     
    </html>


    note.php

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    <!DOCTYPE html>
     
    <?php
     
    $notes = array("" => "", "do" => "C", "ré" => "D", "mi" => "E", "fa" => "F", "sol" => "G", "la" => "A", "si" => "B");
     
    $message = "";
     
    if($_SERVER["REQUEST_METHOD"] == "POST") {
     
    	if(empty($_POST["note_classique"])) {
     
    		$message = '<p>Aucune note choisie !</p>';
        }
        else {
     
        	$note = $_POST["note_classique"];
     
            $note_americaine = $notes[$note];
     
            $message = '<p>La notation américaine pour la note ' . $note . ' est ' . $note_americaine . '</p>';
        }
     
        return;
    }
     
    ?>
     
    <html lang="fr">
     
    <head>
        <title>Correspondance américaine d’une note de musique</title>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/style.css">
        <script type="text/javascript" src="js/script.js"></script>
    </head>
     
    <body>
    	<h1>Correspondance des notes de musique classiques et anglaises</h1>
        <form action="note.php" method="post" id="form">
        	<fieldset>
        		<legend>Correspondance classique->anglaise</legend>
                <p>Choisissez une note: </p>
                <select name="note_classique" id="note_classique">
                    <option value=""></option>
                	<?php foreach($notes as $note_classique => $note_americaine) {
     
                		echo '<option value="' . $note_americaine . '">' . $note_classique . '</option>';
                    }
     
                    ?>
                </select><br>
            </fieldset>
        </form>
     
        <div id="result">
            <?php echo $message; ?>
        </div>
    </body>
     
    </html>


    Malgré ça, j'ai toujours la même erreur.

  5. #5
    Expert confirmé
    1. Ah mais non, ma réponse n'est pas bonne puisque tu mets la note américaine dans le formulaire (tu mets la réponse dans la question, original ;-) )

    2. Pourquoi 2 scripts identiques ?

    Exemple avec un script unique note.php :

    Code PHP :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?php
     
    // Tableau de correspondances
    $notes = [
        "" => "", "do" => "C", "ré" => "D", "mi" => "E", 
        "fa" => "F", "sol" => "G", "la" => "A", "si" => "B",
    ];
     
    $notes_classiques = array_keys($notes); // ["", "do", "ré", "mi", ...]
     
    if (isset($_POST['note_classique'])) {
        if ($_POST['note_classique'] === '') {
            $message = 'Aucune note choisie !';
        } else {
            $note_classique = $_POST['note_classique'];
            $note_americaine = $notes[$note_classique];
            $message = "La notation américaine pour la note $note_classique est $note_americaine";
        }
    }
     
    ?>
    <!doctype> 
    <html lang="fr">
    <head>
        <title>Correspondance américaine d’une note de musique</title>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/style.css">
        <script type="text/javascript" src="js/script.js"></script>
    </head>
    <body>
    	<h1>Correspondance des notes de musique classiques et anglaises</h1>
        <form action="note.php" method="post" id="form">
        	<fieldset>
        		<legend>Correspondance classique->anglaise</legend>
                <p>Choisissez une note: </p>
                <select name="note_classique" id="note_classique">
                    <option value=""></option>
                	<?php foreach($notes_classiques as $note_classique): ?>
                 		<option><?= htmlspecialchars($note_classique) ?></option>
                     <?php endforeach ?>
                </select><br>
            </fieldset>
        </form>
     
        <?php if (isset($message)): ?>
            <div id="result"><?= htmlspecialchars($message) ?></div>
        <?php endif ?>
     
    </body>
    </html>
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Membre expert
    Seb, j'ai un peu modifié ton script car comme il n'y a pas de bouton de type submit, l'action du formulaire n'est jamais appelée. Mais pas réussi...

    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?php
    // Tableau de correspondances
    $notes = [
         "do" => "C", "ré" => "D", "mi" => "E",
        "fa" => "F", "sol" => "G", "la" => "A", "si" => "B",
    ];
     
    $notes_classiques = array_keys($notes); // ["do", "ré", "mi", ...]
     
    if (isset($_POST['note_classique'])) {
        if ($_POST['note_classique'] === '') {
            $message = 'Aucune note choisie !';
        } else {
            $note_classique = $_POST['note_classique'];
            $note_americaine = $notes[$note_classique];
            $message = "La notation américaine pour la note $note_classique est $note_americaine";
        }
    }
     
    ?>
    <!doctype>
    <html lang="fr">
    <head>
        <title>Correspondance américaine d’une note de musique</title>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/style.css">
        <script type="text/javascript" src="js/script.js"></script>
    </head>
    <body>
    	<h1>Correspondance des notes de musique classiques et anglaises</h1>
        <form action="" method="post" id="form">
        	<fieldset>
        		<legend>Correspondance classique->anglaise</legend>
                <p>Choisissez une note: </p>
                <select name="note_classique" id="note_classique" onchange="submit"><!-- tout chgt ds le select lance l'action du form -->
                    <option value=""></option>
                	<?php foreach($notes_classiques as $note_classique): ?>
                 		<option><?= htmlspecialchars($note_classique) ?></option>
                     <?php endforeach ?>
                </select><br>
            </fieldset>
        </form>
     
        <?php if (isset($message)): ?>
            <div id="result"><?= htmlspecialchars($message) ?></div>
        <?php endif ?>
     
    </body>
    </html>

    Même ainsi, elle n'est jamais appelée ; je sèche...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  7. #7
    Expert confirmé
    Je viens de tester ceci (bouton submit ajouté), et ça fonctionne :

    Code PHP :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?php
    // Tableau de correspondances
    $notes = [
         "do" => "C", "ré" => "D", "mi" => "E",
        "fa" => "F", "sol" => "G", "la" => "A", "si" => "B",
    ];
     
    $notes_classiques = array_keys($notes); // ["do", "ré", "mi", ...]
     
    if (isset($_POST['note_classique'])) {
        if ($_POST['note_classique'] === '') {
            $message = 'Aucune note choisie !';
        } else {
            $note_classique = $_POST['note_classique'];
            $note_americaine = $notes[$note_classique];
            $message = "La notation américaine pour la note $note_classique est $note_americaine";
        }
    }
     
    ?>
    <!doctype>
    <html lang="fr">
    <head>
        <title>Correspondance américaine d’une note de musique</title>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/style.css">
        <script type="text/javascript" src="js/script.js"></script>
    </head>
    <body>
    	<h1>Correspondance des notes de musique classiques et anglaises</h1>
        <form method="post" id="form">
        	<fieldset>
        		<legend>Correspondance classique->anglaise</legend>
                <p>Choisissez une note: </p>
                <select name="note_classique" id="note_classique" onchange="submit"><!-- tout chgt ds le select lance l'action du form -->
                    <option value=""></option>
                	<?php foreach($notes_classiques as $note_classique): ?>
                 		<option><?= htmlspecialchars($note_classique) ?></option>
                     <?php endforeach ?>
                </select>
                <input type="submit">
            </fieldset>
        </form>
     
        <?php if (isset($message)): ?>
            <div id="result"><?= htmlspecialchars($message) ?></div>
        <?php endif ?>
     
    </body>
    </html>
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  8. #8
    Membre expert
    Je confirme ; ça marche, mais Seb, saurais-tu me dire pourquoi ma version ne marchait pas ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  9. #9
    Expert confirmé
    J'ai juste retiré le action vide et ajouté le submit
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  10. #10
    Membre expert
    Oui, d'ailleurs le action="" sert juste à dire que l'action se trouve dans le fichier courant. Visiblement, si on met rien, c'est pareil.

    Par contre, j'ai déjà fait des formulaires avec un select et pas de bouton submit, et rien que changer la sélection suffisait à lancer l'action. Par contre, je m'étais trompé car dans le select, il fallait rajouter onChange="this.parentNode.submit()", mais là, ça ne marche pas, et je comprends pas pourquoi...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  11. #11
    Expert confirmé
    Parce que le parent du select est le fieldset, pas le form.

    Il faudrait faire onchange="this.form.submit()"
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  12. #12
    Membre expert
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  13. #13
    Membre à l'essai
    Bonjour à tous, chez moi tout fonctionne.

    Merci à tous & bonne journée

###raw>template_hook.ano_emploi###