PHP - llenar dos select dinamicamente

 
Vista:
sin imagen de perfil
Val: 10
Ha aumentado su posición en 17 puestos en PHP (en relación al último mes)
Gráfica de PHP

llenar dos select dinamicamente

Publicado por Y3rs3Y (7 intervenciones) el 25/09/2018 01:41:29
buenas tardes les explico mi consulta:

Tengo 4 select
el primero "clientes" se llena al cargar la pagina con una consulta mysql
el segundo "usuario" se llena con otra consulta mysql al seleccionar el "cliente"
esto esta funcionando mi problema esta en que quiero que al seleccionar el "usuario"
el tercero y cuarto se llenen con la informacion del "usuario" seleccionado

les dejo mi codigo que uso para llenar el segundo select "usuario"

Index.php

1
2
3
4
5
6
<form>
            <select id="cliente"></select>
            <select id="usario"></select>
            <select id="correo"></select>
            <select id="telefono"></select>
</form>

scrip.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$('#cliente').on('change', function(){
        var id = $('#cliente').val()
        $.ajax({
            type: 'POST',
            url: './usuario.php',
            data: {'id': id}
        })
        .done(function(datos){
            $('#usuario').html(datos)
        })
        .fail(function(){
            alert('Hubo un errror al cargar los usuarios')
        })
    })

usuario.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function getUsuario(){
    require_once 'conexion.php';
  $id = $_POST['id'];
  $stmt = $conexion->prepare("SELECT id, nom_usuario FROM usuario WHERE  id_cliente =:id_cliente");
        $stmt->execute([':id_cliente' => $id]);
  $usuario = '<option value="0">Elige un usuario</option>';
  while(
      $row = $stmt->fetch(PDO::FETCH_ASSOC)
      ){
    $usuario .= "<option value='$row[id]'>$row[nombre]</option>";
  }
  return $usuario;
}
echo getUsuario();

de esta manera lleno el select "usuario" y quiero que al seleccionar un usuario se llene el valor de los select
"telefono" y "correo" juntos.
tener en cuenta que la tabla usuario tiene todos los campos
id
nom_usuario
correo
telefono
id_cliente

espero alguien entienda mi problema para poder entender como aplicar esto.

si necesitan mas informacion solo pidanla.

Saludos

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de santi
Val: 588
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

llenar dos select dinamicamente

Publicado por santi (204 intervenciones) el 25/09/2018 02:19:23
Hola,

prueba pasándolo a json:

1
2
3
4
5
6
7
8
9
10
11
//php
$row['nombre'] = '<option value="'.$row['id'].'">'.$row['nombre'].'</option>';
$row['correo'] = '<option value="'.$row['correo'].'">'.$row['correo'].'</option>';
$row['telf'] = '<option value="'.$row['telf'].'">'.$row['telf'].'</option>';
 
print json_decode($row);//todo el resultado
 
//ajax
$('#usario').html(datos.nombre);
$('#correo').html(datos.correo);
$('#telefono').html(datos.telf);

Pero para ello tienes que pedir el contenido que necesitas a la bbdd y no solo el id y el nombre... Puedes traerlo todo con *:

1
$stmt = $conexion->prepare("SELECT * FROM usuario WHERE  id_cliente =:id_cliente");

A ver si funciona ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 10
Ha aumentado su posición en 17 puestos en PHP (en relación al último mes)
Gráfica de PHP

llenar dos select dinamicamente

Publicado por Y3rs3Y (7 intervenciones) el 25/09/2018 16:40:52
hola santi, gracias por tu respuesta intente el siguiente codigo pero no me funciona talvez estoy colocando algo mal
podrias orientarme mas

scrip.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$('#usuario').on('change', function(){
    var id = $('#usuario').val()
    $.ajax({
        type: 'POST',
        url: './datos.php',
        data: {'id': id}
    })
    .done(function(datos){
        $('#correo').val(datos.correo)
        $('#telefono').val(datos.telefono)
    })
    .fail(function(){
        alert('Hubo un errror al cargar los datos')
    })
})

datos.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
function getDatos(){
    require_once 'conexion.php';
  $id = $_POST['id'];
  $stmt = $conexion->prepare("SELECT * FROM usuario WHERE  id =:id");
        $stmt->execute([':id' => $id]);
  while(
      $row = $stmt->fetch(PDO::FETCH_ASSOC)
      ){
    $row['correo'] = '<option value="'.$row['correo'].'">'.$row['correo'].'</option>';
    $row['telefono'] = '<option value="'.$row['telefono'].'">'.$row['telefono'].'</option>';
    print json_decode($row);
  }
  return json_decode($row);
}
echo getDatos();

podrias ayudarme para ver que esta mal este deveria ser el proceso que al escoger un usuario me muestre su correo y telefono en los select "correo" y "telefono".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

llenar dos select dinamicamente

Publicado por Gonzalo (615 intervenciones) el 25/09/2018 05:07:27
Buenos dias don Yersey.

lo que le recomiendo que haga es usar un jquery para cliente, la idea es poner los Drop down de correo y telefono en un <div> con diferente nombre

1
2
3
4
5
6
<form>
    <select id="cliente"></select>
    <select id="usario"></select>
    <div id="DivCorreo"><select id="correo"></select></div>
    <div id="DivTelefono"><select id="telefono"></select></div>
</form>

y disparar el script igual con el evento change del dropdown del usuario.

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
('#usuario').on('change', function(){
    var id = $('#usuario').val()
    $.ajax({
        type: 'POST',
        url: './correo.php',
        data: {'id': id}
    })
    .done(function(datos){
        $('#DivCorreo').html(datos)
    })
    .fail(function(){
        alert('Hubo un errror al cargar los el correo')
    })
 
    $.ajax({
        type: 'POST',
        url: './Telefono.php',
        data: {'id': id}
    })
    .done(function(datos){
        $('#DivTelefono').html(datos)
    })
    .fail(function(){
        alert('Hubo un errror al cargar el telefono')
    })
})

tal vez deba mandar un empty para los 2 divs antes de llamar al arhivo php.

yo no uso html, yo uso append por eso mando el empty antes de recibir los datos, pero tal vez con html no sea necesario.

con html es posible que trabaje bien la primera vez y la segunda vez falle, si falla entonces el problema podria ser que html borre el div, si se le presenta el caso entonces debe incluir el div en la respuesta de php.

me llama la atencion: si funciona el script de javascript? no se mucho de JS pero creo que le faltan puntos y comas despues de algunos parentesis.

nos comenta si funciono.

salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar