1

Hola buen día me serviría de mucho que me ayudaran con lo siguiente:

Prácticamente el código tiene un select en donde el valor que seleccione se vaya al script pero hasta el momento no me ha funcionado

 <script>
$('#id_tracto').on('change', function() { 
  $.ajax({   
  url : 'datos_reparacion.php',   
  data : { valor : valor },
  type : 'POST',
  dataType : 'json',
  success : function(json) {
    $("#patente_tracto").val(json.patente_tracto);
    $("#marca_tracto").val(json.marca_tracto);
    $("#propietario_tracto").val(json.propietario_tracto);
  },
    error : function(xhr, status) {
    alert('Disculpe, existió un problema');
  }
   });
});
   </script>
              <div class="col-md-4 position-relative">
              <label class="form-label">SELECCIONAR CAMION:</label>
              <select name="id_tracto" id="id_tracto" class="form-control">
              <option value="">Seleccione...</option>
               <?php
              // Realizamos la consulta para extraer los datos
              $consulta="SELECT * FROM tracto";
              $result=mysqli_query($mysqli,$consulta) or die (mysqli_error());
              while ($row=mysqli_fetch_array($result)){ 
              // En esta sección estamos llenando el select con datos extraidos de una base de datos.
              echo '<option value="'.$row['id_tracto'].'">'.$row['patente_tracto'].'</option>';
              }
              ?>
              </select> 
              </div>  
 <div class="col-md-4 position-relative">
                <label  class="form-label">MARCA CAMION:</label>
                <input type="text" class="form-control" name="marca_tracto" id="marca_tracto">
              </div>

*** Esto tengo en datos_reparacion.php***


<?php
    
   require("../../Conexion/Conectar_Bbdd_Oroverde.php");
    $valor=$_POST['valor'];
    $jsondata = array();


    $query="SELECT id_tracto,patente_tracto,marca_tracto,propietario_tracto from tracto where  id_tracto=$valor";
    $r=mysqli_query($mysqli,$query);
    $resultados= mysqli_fetch_array($r);

    
    $id_tracto=$resultados['id_tracto'];
    $patente_tracto=$resultados['patente_tracto'];
    $marca_tracto=$resultados['marca_tracto'];  
    $propietario_tracto=$resultados['propietario_tracto'];

   $jsondata['id_tracto'] = $id_tracto;
    $jsondata['patente_tracto'] = $patente_tracto;
    $jsondata['marca_tracto'] = $marca_tracto;
    $jsondata['propietario_tracto'] = $propietario_tracto;

     header('Content-type: application/json; charset=utf-8');
     echo json_encode($jsondata); 
     mysqli_close($mysqli);
?> 

**Esto tengo en el código, donde el script enviado el dato valor a datos_reparacion.php y hay hace las consulta y se devuelve los datos que necesito y los envia a los input que tengo mas abajo

keane1991
  • 133
  • 6
  • 1
    ¿Dónde estás definiendo la variable `valor` que estás pasando en el parámetro `data` de la petición: `data : { valor : valor }`? ¿Cuál es tu problema en concreto? La pregunta no es muy clara. – A. Cedano Mar 03 '22 at 23:29
  • @A.Cedano no la tengo definida. :(. Lo que quiero es que el valor que seleccione en el select sea enviado al script para luego abrir url : 'datos_reparacion.php', realizar la consulta que tengo en ese archivo y luego se recargue en los input. saludos – keane1991 Mar 04 '22 at 00:36
  • @A.Cedano defini la variable valor. Pero aun así no no entra al script con el id=id_tracto. Te agradecería mucho tus consejos – keane1991 Mar 04 '22 at 01:22
  • Pulsa en [edit] poniendo cómo tienes el código ahora. Sin ver cómo estás definiendo la variable, poco podremos hacer. Explica también cómo tienes organizado todo, qué tienes en `datos_reparacion.php`, etc. – A. Cedano Mar 04 '22 at 11:29
  • @A.Cedano logre solucionar el problema del select pero no me carga los km https://es.stackoverflow.com/questions/520220/como-cargar-datos-seleccionado-en-una-tabla si le puede echar un vistazo – keane1991 Mar 16 '22 at 15:55

1 Answers1

2

En tu código Javascript no estás obteniendo el valor del select, sin lo cual el servidor no recibirá datos para procesar.

$('#id_tracto').on('change', function() { 
  /*
     Aquí asignas a la variable valor
     el valor del option que haya sido seleccionado
  */
  var valor= $(this).val();
  $.ajax({   
  url : 'datos_reparacion.php',   
  data : { valor : valor },
  type : 'POST',
  dataType : 'json',
  success : function(json) {
    $("#patente_tracto").val(json.patente_tracto);
    $("#marca_tracto").val(json.marca_tracto);
    $("#propietario_tracto").val(json.propietario_tracto);
  },
    error : function(xhr, status) {
    alert('Disculpe, existió un problema');
  }
   });
});

Luego, el código PHP lo puedes simplificar también. Mysqli dispone de una función mysqli_fetch_assoc que te crea un array asociativo con los nombres de columna => valores, de modo que no tengas que poner a mano cada cosa.

<?php
    
   require("../../Conexion/Conectar_Bbdd_Oroverde.php");
    $valor=$_POST['valor'];
    $jsondata = array();

    $query="SELECT id_tracto,patente_tracto,marca_tracto,propietario_tracto from tracto where  id_tracto=$valor";
    $r=mysqli_query($mysqli,$query);
    $resultados= mysqli_fetch_assoc($r);
    mysqli_close($mysqli);   
    header('Content-type: application/json; charset=utf-8');
    echo json_encode($resultados); 
    exit();
?> 

Así debería funcionar. Aunque todavía falta refinar un poco tu código, estableciendo control de errores. Y darle seguridad, aplicando consultas preparadas, pues tu actual consulta es altamente vulnerable a ataques de inyección SQL, lo cual supone un gravísimo agujero de seguridad.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221
  • muchas gracias por ayudarme. Pero al momento de ejecutar el programa me tira el erro del Ajax alert('Disculpe, existió un problema'); como que no entrar al Ajax – keane1991 Mar 04 '22 at 12:45
  • @keane1991 ¿podrías revisar la consola del navegador, para ver si la petición arroja un error 500 o un error 404 o algo por el estilo? Puede que haya errores del lado del servidor. Como dije al final de la respuesta, en tu código no hay control de errores. – A. Cedano Mar 04 '22 at 12:47
  • En la consola, en la parte de `Requests` deberás ver los `header` de la petición, que te mostrarán el código que respondió el servidor, para saber por qué está fallando. – A. Cedano Mar 04 '22 at 12:51
  • estimado no me sale ningún error en la consola. Solo el mensaje del ajax – keane1991 Mar 04 '22 at 12:52
  • No tiene por qué salir mensaje de error, yo quiero saber qué código de respuesta devolvió el servidor, si `200`, si `500` si `404` u otro. Quizá no estás mirando en el apartado correcto de la consola ¿? Son técnicas de depuración que deberías aprender si no quieres perder horas y horas queriendo saber por qué falla un código. **Me refiero a la consola del navegador, que activas desde una de las opciones del mismo**, no me refiero al alert que ves en la pantalla. – A. Cedano Mar 04 '22 at 12:53
  • Estimado le quiero agradecer por su buena voluntad. Sabe es que hace poco estoy retomando la programación y me gustaría saber un poco mas sobre esto que usted me comento "darle seguridad, aplicando consultas preparadas, pues tu actual consulta es altamente vulnerable a ataques de inyección SQL". Estaría eternamente agradecido por su ayuda – keane1991 Mar 04 '22 at 13:41
  • @keane1991 tanto en el [Manual de PHP](https://www.php.net/manual/es/mysqli.quickstart.prepared-statements.php) como en varias preguntas/respuestas de Stackoverflow se explica en qué consisten las consultas preparadas y qué hay que hacer para escribirlas. Revisa esa documentación y si tienes algún problema intentando puedes abrir una nueva pregunta. – A. Cedano Mar 04 '22 at 17:11