Une erreur de syntaxe Javascript

Fermé
new-dev Messages postés 17 Date d'inscription jeudi 8 décembre 2016 Statut Membre Dernière intervention 6 février 2017 - 12 déc. 2016 à 13:15
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 13 déc. 2016 à 10:15
Bonjour,

J'ai fait un mixe de Php et de javascript, tout sur la même page. Mon code fonctionne nickel mais j'ai juste une erreur à l'ouverture du ficher et quand j'actualise la page. Quand je "submit" ça fonctionne. J'ai juste un petit problème de syntaxe avec ma variable age en javascript qui récupère ma variable $age en php.

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
</head>

<body>


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

    <br />
    <br />
        <select name="jour" id="jour">
            <option> Jour </option>
            <?php

            for ($i = 1; $i <= 30; $i++)
            {
                echo '<option value=\'' . $i . '\'>' . $i . '</option>';
            }
            ?>
        </select>

        <select name='mois' id="mois">
            <option> Mois </option>
            <?php

            for ($i = 1; $i < 13; $i++)
            {
                echo '<option value=\'' . $i . '\'>' . $i . '</option>';
            }
            ?>
        </select>

        <select name="annee" id="annee">
            <option> Annee </option>
            <?php

            for ($i =1930; $i <= 2016; $i++)
            {
                echo'<option value=\'' . $i .'\'>' . $i . '</option>';
            }
            ?>
        </select>

        <br />
        <br />
        <input type="submit" id="submit" name="submit"/>
        <br />
        <br />
        <input id="price" />
    </form>

<hr>

<?php

    if (isset($_POST['annee'])) {

        $jour = $_POST['jour'];
        $mois = $_POST['mois'];
        $annee = $_POST['annee'];

        if (!empty($jour) && !empty($mois) && !empty($annee)) {

            $date = explode('/', date('d/m/Y'));
            print_r($date);
            if (($mois < $date[1]) || (($mois == $date[1] && $jour <= $date[0]))) {
                $age = $date[2] - $annee;
                echo 'vous avez ' .$age. ' ans';
            }

            if (($mois > $date[1]) || (($mois == $date[1] && $jour > $date[0]))) {
                $age = $date[2] - $annee -1;
            }
        } else {
            print_r($date);
            $age = $date[2] - $annee - 1;
        }
    }



?>

<script>

    var age='<?PHP echo $age;?>';

    if(age >= 12) {
            document.getElementById('price').value = 32;
        }
         else {
        document.getElementById('price').value = 24;
        }

</script>
</body>

</html>


Merci pour votre aide
A voir également:

4 réponses

Utilisateur anonyme
12 déc. 2016 à 13:58
Bonjour

Tu as des apostrophes inutiles autour de <?php echo $age; ?>, car age est un nombre et n'a pas à être écrit entre apostrophes.
Mais ça ne devrait pas empêcher ton script de marche.

Autre remarque : lors du premier appel, $age n'est pas défini et, sans ces apostrophes inutiles, tu aurais une erreur de script. Une erreur, qui en cache une autre…

Pour en venir au fait, peux-tu décrire en quoi consiste ton problème avec cette variable ? J'ai l'impression que tu voudrais que 'price' soit modifié en temps réel en fonction de l'année, sans valider le formulaire : si c'est l'effet recherché, c'est normal que ça ne marche pas, car ta variable PHP $age n'est remise à jour que quand tu envoies le formulaire.
1
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
12 déc. 2016 à 14:04
Salut,

La variable $age n'est pas définie au premier chargement de la page.

Une solution pour corriger ce problème est d'afficher le script uniquement si la variable $age est définie :
<?php if (isset($age)) : ?>
<script>
    var age='<?PHP echo $age;?>';

    if(age >= 12) {
        document.getElementById('price').value = 32;
    } else {
        document.getElementById('price').value = 24;
    }
</script>
<?php endif; ?>


Une autre solution est d'initialiser la variable javascript à 0 si la variable php n'existe pas et de modifier légèrement la condition js :
    var age='<?PHP echo isset($age) ? $age : 0; ?>';

    if (age != 0) {
        if(age >= 12) {
            document.getElementById('price').value = 32;
        } else {
            document.getElementById('price').value = 24;
        }
    }


Bonne journée,
1
new-dev Messages postés 17 Date d'inscription jeudi 8 décembre 2016 Statut Membre Dernière intervention 6 février 2017 1
Modifié par new-dev le 12/12/2016 à 15:15
Merci ça marche. J'ai utiliser la première technique. Plus qu'une chose. J'ai rajouter une balise select avec 2 options

<select id="type" name="selectname">
        <option value="journee" id="journee"> Journée </option>
        <option value="demijournee" id="demijournee"> Demi-journée </option>
</select>


et dans mon code javascript :

<?php if (isset($age)) : ?>
<script>

    var age = <?PHP echo $age;?>;


        if (age >= 12 && (document.getElementById('type').value == "demijournee")) {
                document.getElementById('price').value = 10;
            }

    else {
            document.getElementById('price').value = 20;
        }

</script>
<?php endif; ?>



Quand je coche l'option select "demijournee". Le tarif reste toujours à 20. J'ai essayé d'ajouter un attribut onchange à ma balise select et de l'appeler via une fonction en javascript, ça change rien.

Merci
1
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
12 déc. 2016 à 16:39
D'après ta condition, si la variable age est inférieur à 12 on passe directement au else sans tenir compte de la valeur.
Ne faudrait-il pas remplacer ton opérateur ET (&&) par un OU (||) ?
0
new-dev Messages postés 17 Date d'inscription jeudi 8 décembre 2016 Statut Membre Dernière intervention 6 février 2017 1 > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
Modifié par new-dev le 12/12/2016 à 17:11
Non c'est bien un (&& Et). Je veux diviser le tarif par 2 si l'âge de l'utilisateur est supérieur à 12 ans et si seulement il a choisit l'option (demijournee), ça ne fonctionne pas. J'ai tout testé, si je mets un âge supérieur à 12 et que je sélectionne bien demi-journée, j'arrive toujours dans le else.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 déc. 2016 à 19:01
Bonjour,

D'après ton code ... il s'exécute (UNIQUEMENT) au chargement de la page.;...
Pour actualiser le "price" en fonction du choix réalisé dans la balise SELECT ... tu dois le faire sur un ONCHANGE


par exemple :
function changePrice(){
  var age = <?PHP echo $age;?>;
  var typeJour =  document.getElementById('type').value;
  if (age >= 12 && typeJour == "demijournee)) {
      document.getElementById('price').value = 10;
   } else {
     document.getElementById('price').value = 20;
  }
}



Ensuite, pour l'appeller au chargement de ta page tu as juste à faire
<script type="text/javascript">
 changePrice();
</script>


et pour actualiser en fonction du choix réalisé dans la balise SELECT:
<select id="type" name="selectname" onchange="changePrice();">
    <option value="journee" id="journee"> Journée </option>
    <option value="demijournee" id="demijournee"> Demi-journée </option>
</select>
1
new-dev Messages postés 17 Date d'inscription jeudi 8 décembre 2016 Statut Membre Dernière intervention 6 février 2017 1
Modifié par new-dev le 12/12/2016 à 19:26
Bonjour,

J'avais essayer en mettant un attribut onchange, ça ne fonctionnait pas. J'ai essayer en mettant exactement ton code et je me retrouve avec 2 erreurs :
test2.php:12 Uncaught ReferenceError: changePrice is not defined(…)
test2.php:67 Uncaught SyntaxError: Invalid or unexpected token

Du coup je te remontre mon code en entier, je pense que ça sera mieux (sans ton code) :

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
</head>

<body>


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


    <select id="type" name="selectname">
        <option value="journee" id="journee"> Journée </option>
        <option value="demijournee" id="demijournee"> Demi-journée </option>
    </select>


    <br />
    <br />
        <select name="jour" id="jour">
            <option> Jour </option>
            <?php

            for ($i = 1; $i <= 30; $i++)
            {
                echo '<option value=\'' . $i . '\'>' . $i . '</option>';
            }
            ?>
        </select>

        <select name='mois' id="mois">
            <option> Mois </option>
            <?php

            for ($i = 1; $i < 13; $i++)
            {
                echo '<option value=\'' . $i . '\'>' . $i . '</option>';
            }
            ?>
        </select>

        <select name="annee" id="annee">
            <option> Annee </option>
            <?php

            for ($i =1930; $i <= 2016; $i++)
            {
                echo'<option value=\'' . $i .'\'>' . $i . '</option>';
            }
            ?>
        </select>

        <br />
        <br />

        <p> réduction <input type="checkbox" id="reduction" /> </p>

        <input type="submit" id="submit" name="submit"/>
        <br />
        <br />
        <input id="price" />
    </form>

<hr>

<?php

    if (isset($_POST['annee'])) {

        $jour = $_POST['jour'];
        $mois = $_POST['mois'];
        $annee = $_POST['annee'];

        if (!empty($jour) && !empty($mois) && !empty($annee)) {

            $date = explode('/', date('d/m/Y'));
            print_r($date);
            if (($mois < $date[1]) || (($mois == $date[1] && $jour <= $date[0]))) {
                $age = $date[2] - $annee;
                echo 'vous avez ' .$age. ' ans';
            }

            if (($mois > $date[1]) || (($mois == $date[1] && $jour > $date[0]))) {
                $age = $date[2] - $annee -1;
                echo 'vous avez ' .$age. ' ans';
            }


        } else {
            print_r($date);
            $age = $date[2] - $annee - 1;
        }
    }



?>

<?php if (isset($age)) : ?>
<script>

    var age = <?PHP echo $age;?>;


        if (age >= 12 && (document.getElementById('type').value== "demijournee")) {
                document.getElementById('price').value = 10;
            }

        else {
            document.getElementById('price').value = 20;
        }




</script>
<?php endif; ?>




</body>

</html>



Merci pour ton aide.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > new-dev Messages postés 17 Date d'inscription jeudi 8 décembre 2016 Statut Membre Dernière intervention 6 février 2017
13 déc. 2016 à 10:15

Du coup je te remontre mon code en entier, je pense que ça sera mieux (sans ton code) :

Oui... sans mon code ... je pourrais donc te refaire le code correctement....
mais je préfèrerai voir plutôt ce que TOI tu as mal fait pour te le corriger.

Donc montre nous le code AVEC mes modifs.
0