No ejecuto, interpreto, sigo o aplico lo que el texto demanda.

Aucune_solution -  
jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   -
Bonjour,
Quiero recuperar el valor de un país que es una lista, para asociarle el código de teléfono en mi campo de teléfono. Y esto antes de validar mi formulario, no encuentro ninguna solución, ¿cómo puedo hacerlo por favor?

Gracias

6 respuestas

  1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
     
    Tu veux :
    Seleccionas un PAÍS de tu lista desplegable
    En ese momento.. el indicativo (teléfono) del país correspondiente aparece en tu campo de entrada TEL...

    Sabiendo que:
    - La lista de indicativos de países está presente en una tabla de tu BDD....

    ENTONCES:
    - Detectas el cambio de país en tu select gracias al método ONCHANGE
    <select id="countrySelect" name="country" onchange="check();getIndicateurPays();">


    - Recuperas, a través de AJAX, el indicativo del PAÍS correspondiente
    por lo que debes hacer una página PHP especialmente dedicada para recuperar el indicativo del país a través de una consulta sql y usarlo con la llamada AJAX.

    - Pones en tu INPUT TEL... el indicativo recuperado a través de AJAX (en javascript)

    Nivel Javascript (AJAX):

     function getIndicateurPays(){ var urlAjx = 'cheminverstonfichier/indicatifPays.ajx.php'; var pays = $("#countrySelect").val(); var data = {pays:pays}; $.ajax({ url: urlAjx, dataType: "json", type: "POST", data: data, async: false, success: function(reponse){ $("#tel_struct").val(reponse); }, error: function(jqXHR, textStatus){ var error = formatErrorMessage(jqXHR, textStatus); alert('error :' + error); } }); } function formatErrorMessage(jqXHR, exception) { if (jqXHR.status === 0) { return ('No conectado.\nPor favor verifica tu conexión a la red.'); } else if (jqXHR.status == 404) { return ('La página solicitada no encontrada. [404]'); } else if (jqXHR.status == 500) { return ('Error interno del servidor [500].'); } else if (exception === 'parsererror') { return ('Error de análisis de JSON solicitado fallido.'); } else if (exception === 'timeout') { return ('Error de tiempo de espera.'); } else if (exception === 'abort') { return ('Solicitud Ajax abortada.'); } else { return ('Error no controlado.\n' + jqXHR.responseText); } } 


    Y del lado de PHP
     // aquí incluyes tu archivo de conexión a tu BDD // luego: // recuperación de las variables POST $pays = isset($_POST['pays'])?$_POST['pays']:NULL; if($pays){ // aquí tu consulta: $sql = "SELECT * FROM tatable WHERE pays='$pays'"; // ejecución de tu consulta : $result = ------ } // Luego devuelve los datos hacia el ajax : echo json_encode($result); 


    Eso es todo ...
    Te dejo completar!
    2
    1. Aucune_solution
       
      ¡Muchas gracias, es muy amable!
      0
    2. Aucune_solution
       
      Tendría una última pregunta sobre el valor del país.
      Inicialmente, el país tiene un cierto valor, y en este caso no tengo el indicativo, tendría que seleccionar el país primero.
      ¿Cómo puedo obtener el indicativo en este caso?
      0
      1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830 > Aucune_solution
         
        No he entendido nada...

        Tu lista desplegable... ¿te devuelve bien el "valor" del país (en este caso, su ID)?
        Así que, en el where de tu consulta... ¿lo utilizas...?

        Por supuesto... el código que te doy es puramente a título de ejemplo... no conociendo la estructura de tu BBDD... pero puedo deducir que debería parecerse a algo así:
         $sql = "SELECT champIndicatif FROM tatable WHERE id_pays='$pays'"; 
        0
      2. Aucune_solution > jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención  
         
        ¡Gracias!
        He intentado tu código, funcionó la primera vez, no estoy seguro de cómo. Lo volví a intentar ahora, pero no pasa nada, he puesto el archivo Ajax por un lado y el archivo que contiene los inputs por otro, con la URL del ajax: fichier_des_inputs.php, ¿es eso correcto?
        0
  2. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
     
    Hola,
    Para esto necesitas usar JAVASCRIPT con AJAX
    Lo ideal sería pasar por JQUERY (la sintaxis y el uso del ajax son simplificados, creo)

    https://openclassrooms.com/fr/courses/1567926-un-site-web-dynamique-avec-jquery/1569648-le-fonctionnement-de-ajax

    --
    Atentamente,
    Jordane
    1
    1. Aucune_solution
       
      Je suis désolé, mais je ne peux pas vous aider avec cela.
      0
    2. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830 > Aucune_solution
       
      .... bueno.... con AJAX.... como te lo indiqué anteriormente...
      Lee el tutorial que te mencioné... explica cómo utilizarlo.
      0
    3. Aucune_solution
       
      De nada :)
      0
    4. Aucune_solution
       
      No entiendo muy bien. En mi caso, no voy a utilizar POST, y GET tampoco conviene.
      0
    5. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830 > Aucune_solution
       
      ???
      No tienes otras posibilidades.....
      0
  3. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
     

    He puesto el archivo Ajax aparte, el archivo que contiene los inputs aparte, con como URL del ajax: fichier_des_inputs.php, ¿es correcto eso?

    No lo creo...

    ¿El archivo ajax... qué significa? ¿El archivo que contiene el código PHP de la parte AJAX o el código Javascript?
    Si te refieres al código PHP... es el que debe ir en la URL.

    Lo ideal sería que nos publiques el código de cada uno de tus archivos (indicando bien su nombre para que nos podamos organizar).

    En orden:
    El código que contiene tus campos (tu lista desplegable, tus inputs (Tel ....)
    Este archivo también puede contener el Javascript del ajax (a menos que lo hayas puesto en un archivo aparte).
    El código del archivo PHP llamado por el AJAX.

    PD: Cuando haces desarrollo Javascript (y/o AJAX) es MUY recomendable utilizar las herramientas de depuración de tu navegador de internet para ver si hay errores y observar un poco lo que está pasando. Para ello, te aconsejo encarecidamente que utilices el plugin FIREBUG para Firefox....
    Y aquí hay un tutorial para aprender a utilizarlo: https://eric-pommereau.developpez.com/tutoriels/outil-web/firebug/

    --
    Atentamente,
    Jordane
    1
    1. Aucune_solution
       
      Quería decir con el archivo ajax, el archivo que contiene el código ajax + el código PHP.
      0
  4. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
     

    Quiero conocer el valor del país antes de enviar el formulario, lo necesito para especificar el indicativo del teléfono

    ¿Lo necesitas O ¿Dónde?
    ¿Para qué?

    ¿Por qué ANTES del ENVÍO?

    Tu pregunta no es lo suficientemente clara y precisa ... ¡es casi imposible que podamos responderte!
    No sabemos nada de tu código .... ni de lo que quieres hacer exactamente .....

    --
    Atentamente,
    Jordane
    0
  5. Aucune_solution
     
    J'ai besoin de connaître la valeur du pays afin de remplir le champ numéro de téléphone avec l'indicatif correspondant, par exemple si je sélectionne la France, je dois avoir automatiquement dans le champ téléphone (33) .....
    Voici mon code :
    <form action="traitement_formulaire.php" method="post" id="sky-form" class="sky-form"> <!-- Pays ------> <select id="countrySelect" name="country" onchange="check()"> <?php $reponse = $bdd->query('SELECT * FROM pays'); echo '<OPTION VALUE="">Pays</OPTION>'; while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) { echo '<OPTION VALUE="'.$donnees["id_pays"].'" >' . $donnees["pays"].'</OPTION>'; } ?> <!--Tél générique--> <input type="tel" name="tel_struct" id="tel_struct" placeholder="Téléphone générique"> </form> 
    0
  6. Aucune_solution
     
    Voici mes archivos:
    archivo 1: test2_pays.php
     <select id="countrySelect" name="country" onchange="check();getIndicateurPays();">?php $reponse = $bdd->query('SELECT * FROM pays'); echo '<OPTION VALUE="">Pays</OPTION>'; while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) { echo '<OPTION VALUE="'.$donnees["id_pays"].'">'.$donnees["pays"].'</OPTION>'; } ?> </select> <input type="tel" name="tel_struct" id="tel_struct" placeholder="Téléphone générique"> 

    archivo 2: test_pays.php
     <?php // aquí incluyes tu archivo de conexión a tu BDD include("connexion.php"); // luego: // recuperación de las variables POST $pays = isset($_POST['country']); if($pays){ // aquí tu consulta: $sql = "SELECT * FROM pays WHERE id_pays='$pays'"; // ejecución de tu consulta: $bdd->exec($sql); } // Luego envía los datos hacia el ajax: echo json_encode($result); ?> <script> function getIndicateurPays(){ var urlAjx = 'test2_pays.php'; var pays = $("#countrySelect").val(); var data = {pays:pays}; $.ajax({ url: urlAjx, dataType: "json", type: "POST", data: data, async: false, success: function(reponse){ $("#tel_struct").val(reponse); }, error: function(jqXHR, textStatus){ var error = formatErrorMessage(jqXHR, textStatus); alert('error :' + error); } }); } function formatErrorMessage(jqXHR, exception) { if (jqXHR.status === 0) { return ('No conectado.\nPor favor verifica tu conexión de red.'); } else if (jqXHR.status == 404) { return ('La página solicitada no fue encontrada. [404]'); } else if (jqXHR.status == 500) { return ('Error interno del servidor [500].'); } else if (exception === 'parsererror') { return ('El análisis del JSON solicitado falló.'); } else if (exception === 'timeout') { return ('Error de tiempo de espera.'); } else if (exception === 'abort') { return ('Solicitud Ajax abortada.'); } else { return ('Error no controlado.\n' + jqXHR.responseText); } } </script>
    0
    1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
       
      Oula ... non ... !

      Tienes un documento que contiene :
      - Tus campos HTML (incluida tu lista de países) + el javascript asociado
      - Un archivo PHP que contiene únicamente el código necesario para tu AJAX

      En resumen :
       <select id="countrySelect" name="country" onchange="check();getIndicateurPays();"> ?php $reponse = $bdd->query('SELECT * FROM pays'); echo '<OPTION VALUE="">País</OPTION>'; while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) { echo '<OPTION VALUE="'.$donnees["id_pays"].'">'.$donnees["pays"].'</OPTION>'; } ?> </select> <input type="tel" name="tel_struct" id="tel_struct" placeholder="Teléfono genérico"> <script type="text/javascript"> function getIndicateurPays(){ var urlAjx = 'test2_pays.php'; var pays = $("#countrySelect").val(); var data = {pays:pays}; $.ajax({ url: urlAjx, dataType: "json", type: "POST", data: data, async: false, success: function(reponse){ $("#tel_struct").val(reponse); }, error: function(jqXHR, textStatus){ var error = formatErrorMessage(jqXHR, textStatus); alert('error :' + error); } }); } function formatErrorMessage(jqXHR, exception) { if (jqXHR.status === 0) { return ('No conectado.\nPor favor, verifica tu conexión a la red.'); } else if (jqXHR.status == 404) { return ('La página solicitada no fue encontrada. [404]'); } else if (jqXHR.status == 500) { return ('Error interno del servidor [500].'); } else if (exception === 'parsererror') { return ('Error al analizar JSON solicitado.'); } else if (exception === 'timeout') { return ('Error de tiempo de espera.'); } else if (exception === 'abort') { return ('Solicitud Ajax abortada.'); } else { return ('Error inesperado.\n' + jqXHR.responseText); } } </script> 


      Código del archivo AJAX PHP :
       <?php // aquí incluyes tu archivo de conexión a tu BDD include("connexion.php"); // luego : // recuperación de las variables POST $pays = isset($_POST['country']) ? $_POST['country'] : NULL; if($pays){ // aquí tu consulta: $sql = "SELECT * FROM pays WHERE id_pays='$pays'"; // ejecución de tu consulta : $bdd->exec($sql); } // Luego devuelve los datos hacia el ajax : echo json_encode($result); ?> 

      Además, has sido capaz de modificar código ... cuando solo era necesario hacer un simple copiar/pegar...
      Para recuperar una variable correctamente, debes usar :
       // recuperación de las variables POST $pays = isset($_POST['country']) ? $_POST['country'] : NULL; 

      Mientras que tú.. al recuperar lo que te había dado.. lo modificaste a :
       $pays = isset($_POST['country']); 

      ==>>> ¡Lo que no funcionará!


      Luego ...
      Cuando haces consultas de tipo SELECT ... no olvides que debes hacer un FETCH del resultado para poder leer el contenido... Te propongo usar directamente un fetchall()
      Sin olvidar que es preferible usar consultas preparadas en lugar de un EXEC.

      Así que tu código se convierte en :

       if($pays){ // aquí tu consulta: $sql = "SELECT indicatif FROM pays WHERE id_pays=':pays'"; $params = array(':pays'=>$pays); // ejecución de tu consulta : $sth = $bdd->prepare($sql); $sth->execute($params); $result = $sth->fetchAll(); } // Luego devuelve los datos hacia el ajax : echo json_encode($result[0]['indicatif']); 
      0
    2. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
       
      NB : Pensarás en modificar la consulta, para poner ( en lugar de "indicatif") el nombre del campo de tu tabla... el que contiene el indicativo del país

      Igual en el echo json_encode ...
      0
    3. Aucune_solution
       
      Merci beaucoup !
      ¿Cómo estableciste el vínculo entre las dos páginas HTML/JS y PHP?
      0
    4. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
       
      Ben ... he considerado que la página llamada por el AJAX era: test2_pays.php
      y entonces... en el JS se encuentra aquí:
       var urlAjx = 'test2_pays.php'; 
      0
    5. Aucune_solution
       
      Ok, gracias, pero ¿consideras entonces test2_pays.php como el código del archivo PHP llamado por Ajax?
      0