Problema con clonar input y traer datos.

Iniciado por Victor26, 27 Diciembre 2019, 20:41 PM

0 Miembros y 1 Visitante están viendo este tema.

Victor26

Buenas tardes a todos, en el dia de hoy vengo a pedirles una colaboracion con un codigo que no me quiere funcionar.

Tengo una tabla, donde yo quiero clonar la fila dependiendo de si la persona desea agregarlo con un (+), la fila principal tiene una funcion Jquery que hace que al yo digitar un codigo el trae de la base de datos la informacion como (Descripcion y valor unitario) y la pone en el input correspondiente, ahora todo esto me resulta, y todo esta bien. Pero al momento de yo crear una fila nueva el trae por defecto lo que tenga la primer fila, y si yo voy a traer la informacion de un producto por medio del codigo no tiene activado el codigo Jquery, que podria hacer en ese caso?.

CODIGO HTML
<div class="container">
  <div class="row">
    <div class="col-12">
  <form >
   <h3>Agregar Pedido</h3>
<select name="cc" class='mi-selector'>
          <option>Seleccione Cedula:</option>
            <?php
               $sql 
"SELECT Cedula FROM Usuario";
               
$consulta mysqli_query($conectar$sql);
            while (
$mostrar mysqli_fetch_array($consulta)) {
                
?>

          <option value="<?php echo $mostrar['Cedula'];?>"><?php echo $mostrar['Cedula'];?></option>
            <?php }?>
         </select>
    <table class="tabla">
     <tr class="fila-fija">
                  <td><input type="number" name="codigo[]" class="codigo"><span class="resultado"></span></td>
                  <td><input type="text" disabled="" name="descripcion[]" class="descrip" value="" placeholder="Descripcion"></td>           
                  <td><input type="text" name="Unidad[]" placeholder="Unidad"></td>
                  <td><input type="text" name="cantidad[]" placeholder="Cantidad"></td>
                  <td><input type="number" disabled="" name="vunitario[]" class="vunitario" value="" placeholder="Vunitario"></td>
                  <td class="eliminar"><input type="button"   value="Menos -"/></td>
     </tr>
    </table>
      <table>
<tr>
<td><input type="number" name="iva" placeholder="IVA"></td>
<td><input type="date" name="fecha"></td>
</tr>
   </table>
   <div class="btn-der">
     <input type="submit" name="insertar" value="Guardar" class="btn btn-info"/>
     <button id="adicional" name="adicional" type="button" class="btn btn-warning"> Más + </button>
   </div>
  </form>
</div>
</div>
</div>


JS:
<script type="text/javascript">
  // RELLENAR CAMPOS
$(document).ready(function() {
$(".codigo").focus();
$(".codigo").keydown(function(e) {
  ;
var url="getdatos.php";
$.getJSON(url,{ _num1: $(".codigo").val() }, function(clientes){
$.each(clientes, function(i,cliente) {
$(".vunitario").val(cliente.vunitario);
$(".descrip").val(cliente.descripcion);

if(cliente.resultado == "2") {
  $(".resultado").css("color","red");
  $(".resultado").text("codigo no disponible");
} else {
  $(".resultado").css("color","green");
  $(".resultado").text("codigo disponible");
}
});
});
});
});
</script>

// CLONAR UN INPUT
        $(function(){
// Clona la fila oculta que tiene los campos base, y la agrega al final de la tabla
$("#adicional").on('click', function(){
$(".tabla tbody tr:eq(0)").removeClass('fila-fija').clone(true).appendTo(".tabla");
});
// Evento que selecciona la fila y la elimina
$(document).on("click",".eliminar",function(){
var parent = $(this).parents().get(0);
$(parent).remove();
});
});


PHP: TRAER LOS DATOS PARA RELLENARLOS
<?php
$cod 
$_GET['_num1'];
if (!empty(
$cod)) {
    
comprobar($cod);
}
function 
comprobar($cod)
{
    include(
"../conexion_mysql.php");
    
$sql "SELECT * FROM Productos WHERE Codigo = '$cod'";
    
$consulta mysqli_query($conectar$sql);
    
$clientes = array();
    
$row mysqli_num_rows($consulta);
    if (
$row == 0) {
        
$clientes[] = array('codigo' => 'No hay nada''descripcion' => 'No hay nada''vunitario' => '0''resultado' => 2);
    } elseif (
$row 0) {
        while (
$contar mysqli_fetch_row($consulta)) {
            
$codigo=$contar[0];
            
$descripcion=$contar[1];
            
$vunitario=$contar[3];
            
$clientes[] = array('codigo' => $codigo'descripcion' => $descripcion'vunitario' => $vunitario'resultado' => 1);
        }
    }
    
$json_string json_encode($clientes);
    echo 
$json_string;
}
?>


Muchas gracias, espero me puedan colaborar :)

AlbertoBSD

Te van a hackear la base de datos, eres vulnerable a SQL injection

$sql = "SELECT * FROM Productos WHERE Codigo = '$cod'";

Sobre tu duda incial deja reviso el codigo pero por lo que veo tendras que cambiar varias cosas
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

@XSStringManolo

Exporta todos los script y hojas de estilo a documentos externos. Bloquea inline javascript. Utiliza sentencias preparadas. Parsea el input recibido en el PHP. Opcionalmente parsea en el cliente el envio para reducir carga del servidor enviando consultas no válidas. Y opcionalmente puedes parsear la respuesta en el cliente usando un text node o cambiando los símbolos por sus entidades correspondientes. Admite solo cargar recursos de tus archivos o librerías de terceros que uses.

Victor26

Buenas tardes, AlbertoBSD. Claro en algunos codigos PHP, tengo incluido codigo para proteger al SQL Injection si no que este es un proyecto personal de aprendizaje que estoy haciendo, soy muy tirado a la practica y aprendiendo poco a poco la teoria hasta que me meta a estudiar la Universidad. Si me puedes ayudar con lo que estoy haciendo mal en el codigo excelente, gracias de todas maneras.

@?0!,5^34. Exacto, yo el CSS y el JS lo tengo dentro de un archivo aparte y los tengo anexados atravez de sus directorios, ese codigo javascript que tenia hay mismo en el documento era porque estaba metiendolo en donde estaban los codigos javascript y no me queria funcionar, pero ya resolvi eso. Ya comente lo de las sentencias preparadas arriba en mi comentario, Lo de parsear el input recibido en PHP y tambien envio para reducir la carga del servidor, eso lo estoy mirando en tutoriales para aprender, pues hay estuve mirando una libreria que uno indexaba al HTML para que hiciera eso de parsear.

AlbertoBSD

Cita de: Victor26 en 27 Diciembre 2019, 20:41 PMTengo una tabla, donde yo quiero clonar la fila dependiendo de si la persona desea agregarlo con un (+),

Esto ya lo tienes no, segun veo esta el event on click con el jquery

Cita de: Victor26 en 27 Diciembre 2019, 20:41 PMla fila principal tiene una funcion Jquery que hace que al yo digitar un codigo...

Incorrecto
-Se genera el documento HTML
-Se carga el javascript luego carga Jquery
-El Jquery le asigna la función con el evento Keydown a todos los elementos que tengan coincidan con el selector ".código"

Código (javascript) [Seleccionar]
$(".codigo").keydown(function(e) {

Aclara que en ese momento solo existe uno solo que es el que esta en la columna fija.

Al clonar loe elementos solo estas clonando el HTML, no estas volviendo a asignar las funciones a los elementos recién creados

Cosas que tienes que cambiar para que esto funcione es asignar un ID unico a cada elemento por que si lo sigues haciendo de esa manera:

Código (php) [Seleccionar]

$(".vunitario").val(cliente.vunitario);
$(".descrip").val(cliente.descripcion);


Lo que vas a realizar es cambiarle el valor a todos los elementos que tengan el nombre de vunitario y descrip.

Otra cosa por favor edita tu post principal y agrega el código que tengas para protegerte de SQL Injection, Esto con el fin de que cuando alguien nuevo entre y vea tu código copie el código que lo protege del BUG, No es por nada pero desde hace mas de 10 años la principal vulnerabilidad son los SQL Injection, hay que ayudar a evitar código Vulnerable por favor.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW