Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Victor26 en 27 Diciembre 2019, 20:41 pm



Título: Problema con clonar input y traer datos.
Publicado por: Victor26 en 27 Diciembre 2019, 20:41 pm
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
Código:
<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:
Código:
<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
Código:
<?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 :)


Título: Re: Problema con clonar input y traer datos.
Publicado por: AlbertoBSD en 28 Diciembre 2019, 19:13 pm
Te van a hackear la base de datos, eres vulnerable a SQL injection

Código:
$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


Título: Re: Problema con clonar input y traer datos.
Publicado por: @XSStringManolo en 28 Diciembre 2019, 22:54 pm
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.


Título: Re: Problema con clonar input y traer datos.
Publicado por: Victor26 en 30 Diciembre 2019, 21:54 pm
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.


Título: Re: Problema con clonar input y traer datos.
Publicado por: AlbertoBSD en 30 Diciembre 2019, 23:36 pm
Tengo 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

la 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
  1. $(".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
  1. $(".vunitario").val(cliente.vunitario);
  2. $(".descrip").val(cliente.descripcion);
  3.  

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!