Tema para preguntas random a Chatgpt 🤖

  • Autor Autor Carlos Arreola
  • Fecha de inicio Fecha de inicio
Estos errores ocurren porque la variable $nombrearchivo no existe en el momento en que estás intentando usarla en la función imagejpeg().

Sugiero que inicialices $nombrearchivo con $destino1 antes de cualquier condicional, así estará definida independientemente de las condiciones:

Insertar CODE, HTML o PHP:
$nombrearchivo = $destino1;
if($_FILES['fotoshop']['type'][$key] == 'image/png' || $_FILES['fotoshop']['type'][$key] == 'image/jpeg' || $_FILES['fotoshop']['type'][$key] == 'image/jpg') {
...

El segundo error aparece porque la ruta del archivo proporcionado a la función imagejpeg() no existe. Asegúrate de que el directorio que contiene el archivo exista y tenga permisos de escritura. Verifica la ruta en $nombrearchivo para asegurarte que se crea correctamente. Si el error persiste, puedes comprobar los permisos del directorio, cambiándolos si es necesario.
dame el codigo completo porfa
 
dame el codigo completo porfa
Por supuesto, aquí tienes el código ajustado:

PHP:
if(isset ($_POST['sellsend']) and isset ($_POST['nameif'])){
    foreach ($_FILES['fotoshop']['name'] as $key => $name) {
        if($_FILES['fotoshop']['type'][$key] == 'image/png' || $_FILES['fotoshop']['type'][$key] == 'image/jpg' || $_FILES['fotoshop']['type'][$key] == 'image/jpeg'){
            $nombrearchivo = "imguser/".bin2hex(random_bytes(mt_rand(2,5))).mt_rand(1,1000).$username.date("zihdYN").".jpg";
            $max_ancho = 1280;
            $max_alto = 900;
            $rtOriginal = $_FILES['fotoshop']['tmp_name'][$key];
            $original = ($_FILES['fotoshop']['type'][$key] == 'image/png' ? imagecreatefrompng($rtOriginal) : imagecreatefromjpeg($rtOriginal));
            list($ancho,$alto) = getimagesize($rtOriginal);
            $ancho_final = ($ancho<=$max_ancho) && ($alto<=$max_alto) ? $ancho : ($x_ratio * $alto < $max_alto ? $max_ancho : ceil($y_ratio * $ancho));
            $alto_final = ($ancho<=$max_ancho) && ($alto<=$max_alto) ? $alto : ($x_ratio * $alto < $max_alto ? ceil($x_ratio * $alto) : $max_alto);
            $lienzo = imagecreatetruecolor($ancho_final,$alto_final);
            imagecopyresampled($lienzo,$original,0,0,0,0,$ancho_final, $alto_final, $ancho, $alto);
            if($_FILES['fotoshop']['type'][$key] == 'image/jpeg'){
                imagejpeg($lienzo, $nombrearchivo);
            } else if($_FILES['fotoshop']['type'][$key] == 'image/png'){
                imagepng($lienzo, $nombrearchivo);
            }
        }
    }
}
Este código debería solucionar el problema de "Variable indefinida". Recuerda modificar las variables según tu necesidad, como $username y los índices de $_POST.
 
Por supuesto, aquí tienes el código ajustado:

PHP:
if(isset ($_POST['sellsend']) and isset ($_POST['nameif'])){
    foreach ($_FILES['fotoshop']['name'] as $key => $name) {
        if($_FILES['fotoshop']['type'][$key] == 'image/png' || $_FILES['fotoshop']['type'][$key] == 'image/jpg' || $_FILES['fotoshop']['type'][$key] == 'image/jpeg'){
            $nombrearchivo = "imguser/".bin2hex(random_bytes(mt_rand(2,5))).mt_rand(1,1000).$username.date("zihdYN").".jpg";
            $max_ancho = 1280;
            $max_alto = 900;
            $rtOriginal = $_FILES['fotoshop']['tmp_name'][$key];
            $original = ($_FILES['fotoshop']['type'][$key] == 'image/png' ? imagecreatefrompng($rtOriginal) : imagecreatefromjpeg($rtOriginal));
            list($ancho,$alto) = getimagesize($rtOriginal);
            $ancho_final = ($ancho<=$max_ancho) && ($alto<=$max_alto) ? $ancho : ($x_ratio * $alto < $max_alto ? $max_ancho : ceil($y_ratio * $ancho));
            $alto_final = ($ancho<=$max_ancho) && ($alto<=$max_alto) ? $alto : ($x_ratio * $alto < $max_alto ? ceil($x_ratio * $alto) : $max_alto);
            $lienzo = imagecreatetruecolor($ancho_final,$alto_final);
            imagecopyresampled($lienzo,$original,0,0,0,0,$ancho_final, $alto_final, $ancho, $alto);
            if($_FILES['fotoshop']['type'][$key] == 'image/jpeg'){
                imagejpeg($lienzo, $nombrearchivo);
            } else if($_FILES['fotoshop']['type'][$key] == 'image/png'){
                imagepng($lienzo, $nombrearchivo);
            }
        }
    }
}
Este código debería solucionar el problema de "Variable indefinida". Recuerda modificar las variables según tu necesidad, como $username y los índices de $_POST.
mysqli_query($conexion,"INSERT INTO ventas(foto1,foto2,foto3,foto4,foto5) VALUES ('foto1','foto2','foto3','foto4',foto5)");

oks ahora aqui, como hago que cuando se suban las fotos se envien a mi sql asi?
 
mysqli_query($conexion,"INSERT INTO ventas(foto1,foto2,foto3,foto4,foto5) VALUES ('foto1','foto2','foto3','foto4',foto5)");

oks ahora aqui, como hago que cuando se suban las fotos se envien a mi sql asi?
Tendrías que guardar las rutas de las imágenes en un array y luego usar esas rutas para guardarlas en la base de datos. Aquí te dejo un ejemplo ajustado:

PHP:
if(isset ($_POST['sellsend']) and isset ($_POST['nameif'])){
    $rutas = [];
    foreach ($_FILES['fotoshop']['name'] as $key => $name) {
        if($_FILES['fotoshop']['type'][$key] == 'image/png' || $_FILES['fotoshop']['type'][$key] == 'image/jpg' || $_FILES['fotoshop']['type'][$key] == 'image/jpeg'){
            $nombrearchivo = "imguser/".bin2hex(random_bytes(mt_rand(2,5))).mt_rand(1,1000).$username.date("zihdYN").".jpg";
            $rutas[] = $nombrearchivo; // guardamos toda la ruta.
            // Aquí sigue el resto de tu código..
         }
    }

    // Aquí realizas el insert en la base de datos (después del loop)
    if(count($rutas) >= 5) {
        $query = "INSERT INTO ventas(foto1,foto2,foto3,foto4,foto5) VALUES ('".$rutas[0]."','".$rutas[1]."','".$rutas[2]."','".$rutas[3]."','".$rutas[4]."')";
        mysqli_query($conexion, $query);
    }
}
Ese código espera que se suban siempre cinco imágenes. Deberías controlar que sean 5 o adaptar tu BD para admitir menos. Asegúrate de sanitizar y validar los datos correctamente antes de insertarlos en la base de datos para evitar inyecciones SQL.
 
Tendrías que guardar las rutas de las imágenes en un array y luego usar esas rutas para guardarlas en la base de datos. Aquí te dejo un ejemplo ajustado:

PHP:
if(isset ($_POST['sellsend']) and isset ($_POST['nameif'])){
    $rutas = [];
    foreach ($_FILES['fotoshop']['name'] as $key => $name) {
        if($_FILES['fotoshop']['type'][$key] == 'image/png' || $_FILES['fotoshop']['type'][$key] == 'image/jpg' || $_FILES['fotoshop']['type'][$key] == 'image/jpeg'){
            $nombrearchivo = "imguser/".bin2hex(random_bytes(mt_rand(2,5))).mt_rand(1,1000).$username.date("zihdYN").".jpg";
            $rutas[] = $nombrearchivo; // guardamos toda la ruta.
            // Aquí sigue el resto de tu código..
         }
    }

    // Aquí realizas el insert en la base de datos (después del loop)
    if(count($rutas) >= 5) {
        $query = "INSERT INTO ventas(foto1,foto2,foto3,foto4,foto5) VALUES ('".$rutas[0]."','".$rutas[1]."','".$rutas[2]."','".$rutas[3]."','".$rutas[4]."')";
        mysqli_query($conexion, $query);
    }
}
Ese código espera que se suban siempre cinco imágenes. Deberías controlar que sean 5 o adaptar tu BD para admitir menos. Asegúrate de sanitizar y validar los datos correctamente antes de insertarlos en la base de datos para evitar inyecciones SQL.
no entendi nada jsjs, mejor dame el codigo completo
 
no entendi nada jsjs, mejor dame el codigo completo
Lo siento por la confusión. Aquí tienes el código completo con la parte del guardado de las rutas de las imágenes y la inserción en la base de datos:

PHP:
if(isset ($_POST['sellsend']) and isset ($_POST['nameif'])){
    $rutas = [];
    foreach ($_FILES['fotoshop']['name'] as $key => $name) {
        if (($_FILES['fotoshop']['type'][$key] == 'image/png') || ($_FILES['fotoshop']['type'][$key] == 'image/jpeg') || ($_FILES['fotoshop']['type'][$key] == 'image/jpg')){
            $nombrearchivo = "imguser/".bin2hex(random_bytes(mt_rand(2,5))).mt_rand(1, 1000).$username.date("zihdYN").".jpg";
            $rutas[] = $nombrearchivo;
            $max_ancho = 1280;
            $max_alto = 900;
            $rtOriginal = $_FILES["fotoshop"]["tmp_name"][$key];
            
            if ($_FILES['fotoshop']['type'][$key] == 'image/jpeg') {
                $original = imagecreatefromjpeg($rtOriginal);
            } else {
                $original = imagecreatefrompng($rtOriginal);
            }
            
            list($ancho, $alto) = getimagesize($rtOriginal);
            $x_ratio = $max_ancho / $ancho;
            $y_ratio = $max_alto / $alto;
           
            if (($ancho <= $max_ancho) && ($alto <= $max_alto)){
                $ancho_final = $ancho;
                $alto_final = $alto;
            } elseif (($x_ratio * $alto) < $max_alto){
                $alto_final = ceil($x_ratio * $alto);
                $ancho_final = $max_ancho;
            } else {
                $ancho_final = ceil($y_ratio * $ancho);
                $alto_final = $max_alto;
            }
            
            $lienzo = imagecreatetruecolor($ancho_final, $alto_final); 
            imagecopyresampled($lienzo, $original, 0, 0, 0, 0, $ancho_final, $alto_final, $ancho, $alto);

            if($_FILES['fotoshop']['type'][$key] == 'image/jpeg'){
                imagejpeg($lienzo, $nombrearchivo);
            } else if($_FILES['fotoshop']['type'][$key] == 'image/png'){
                imagepng($lienzo, $nombrearchivo);
            }
        }
    }

    if(count($rutas) == 5) {
        mysqli_query($conexion, "INSERT INTO ventas(foto1,foto2,foto3,foto4,foto5) VALUES ('".$rutas[0]."','".$rutas[1]."','".$rutas[2]."','".$rutas[3]."','".$rutas[4]."')");
    }
}

Recuerda cambiar $username por el nombre de usuario real y asegúrate de que la conexión a la base de datos sea correcta ($conexion). También, controla que siempre se suban cinco imágenes o deberás de adaptar el código para admitir un número diferente.
 
Lo siento por la confusión. Aquí tienes el código completo con la parte del guardado de las rutas de las imágenes y la inserción en la base de datos:

PHP:
if(isset ($_POST['sellsend']) and isset ($_POST['nameif'])){
    $rutas = [];
    foreach ($_FILES['fotoshop']['name'] as $key => $name) {
        if (($_FILES['fotoshop']['type'][$key] == 'image/png') || ($_FILES['fotoshop']['type'][$key] == 'image/jpeg') || ($_FILES['fotoshop']['type'][$key] == 'image/jpg')){
            $nombrearchivo = "imguser/".bin2hex(random_bytes(mt_rand(2,5))).mt_rand(1, 1000).$username.date("zihdYN").".jpg";
            $rutas[] = $nombrearchivo;
            $max_ancho = 1280;
            $max_alto = 900;
            $rtOriginal = $_FILES["fotoshop"]["tmp_name"][$key];
           
            if ($_FILES['fotoshop']['type'][$key] == 'image/jpeg') {
                $original = imagecreatefromjpeg($rtOriginal);
            } else {
                $original = imagecreatefrompng($rtOriginal);
            }
           
            list($ancho, $alto) = getimagesize($rtOriginal);
            $x_ratio = $max_ancho / $ancho;
            $y_ratio = $max_alto / $alto;
          
            if (($ancho <= $max_ancho) && ($alto <= $max_alto)){
                $ancho_final = $ancho;
                $alto_final = $alto;
            } elseif (($x_ratio * $alto) < $max_alto){
                $alto_final = ceil($x_ratio * $alto);
                $ancho_final = $max_ancho;
            } else {
                $ancho_final = ceil($y_ratio * $ancho);
                $alto_final = $max_alto;
            }
           
            $lienzo = imagecreatetruecolor($ancho_final, $alto_final);
            imagecopyresampled($lienzo, $original, 0, 0, 0, 0, $ancho_final, $alto_final, $ancho, $alto);

            if($_FILES['fotoshop']['type'][$key] == 'image/jpeg'){
                imagejpeg($lienzo, $nombrearchivo);
            } else if($_FILES['fotoshop']['type'][$key] == 'image/png'){
                imagepng($lienzo, $nombrearchivo);
            }
        }
    }

    if(count($rutas) == 5) {
        mysqli_query($conexion, "INSERT INTO ventas(foto1,foto2,foto3,foto4,foto5) VALUES ('".$rutas[0]."','".$rutas[1]."','".$rutas[2]."','".$rutas[3]."','".$rutas[4]."')");
    }
}

Recuerda cambiar $username por el nombre de usuario real y asegúrate de que la conexión a la base de datos sea correcta ($conexion). También, controla que siempre se suban cinco imágenes o deberás de adaptar el código para admitir un número diferente.
como hago para que un input muestre la cantidad de dinero con .00 siempre?
 
como hago para que un input muestre la cantidad de dinero con .00 siempre?
Para lograr esto, puedes usar JavaScript y un evento en el input. Aquí te doy un ejemplo usando la función toFixed(2), que formatea un número usando notación de punto fijo.

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" oninput="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
  x.value = parseFloat(x.value).toFixed(2);
}
</script>

</body>
</html>
Con este código, la función myFunction() se lanzará cada vez que el usuario escriba en el campo de texto. Transformará el texto ingresado a un número flotante y luego lo formateará para tener dos dígitos después del punto decimal. Si no es un número, dará NaN.

Nota: Si se introduce un valor no numérico, la función parseFloat() devolverá NaN (No es un número). Para una validación avanzada y mensajes de error, se necesitará agregar código adicional.
 
Para lograr esto, puedes usar JavaScript y un evento en el input. Aquí te doy un ejemplo usando la función toFixed(2), que formatea un número usando notación de punto fijo.

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" oninput="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
  x.value = parseFloat(x.value).toFixed(2);
}
</script>

</body>
</html>
Con este código, la función myFunction() se lanzará cada vez que el usuario escriba en el campo de texto. Transformará el texto ingresado a un número flotante y luego lo formateará para tener dos dígitos después del punto decimal. Si no es un número, dará NaN.

Nota: Si se introduce un valor no numérico, la función parseFloat() devolverá NaN (No es un número). Para una validación avanzada y mensajes de error, se necesitará agregar código adicional.
pero quiero que separe las cifras de contado, por ejemplo si es 1$ que coloque 1,00$ y si es una cifra mayor de 1000$ los separe por 1.000,00 y asi sucesivamente nose si me explico?
 
pero quiero que separe las cifras de contado, por ejemplo si es 1$ que coloque 1,00$ y si es una cifra mayor de 1000$ los separe por 1.000,00 y asi sucesivamente nose si me explico?
Para formatear números de esa manera, puedes usar la función toLocaleString() de JavaScript, que convierte un número a una cadena con una representación del lenguaje especificado. Aquí está el código:

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" oninput="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
  x.value = parseFloat(x.value.replace(/,/g, '')).toLocaleString("en-US", {style: "currency", currency: "USD", minimumFractionDigits: 2});
}
</script>

</body>
</html>
Cada vez que un usuario escribe en el campo de texto, la función myFunction() se activará. Esta función eliminará todas las comas del valor actual (si las hay), luego convertirá el texto a un número flotante y lo formateará con el formato "en-US" para tener siempre dos dígitos después del punto decimal y una coma como separador de miles.

Nota: Este script formateará la cifra en tiempo real cada vez que el usuario escribe algo, y en algunos casos puede ser un poco confuso para el usuario. Por ejemplo, si se intenta escribir "1350", después de escribir "1" se convertirá a "1.00", lo que podría no ser lo esperado. Para evitar este comportamiento, podría ser mejor aplicar el formato solo después de que el usuario haya terminado de escribir, por ejemplo, al perder el enfoque del campo de texto (evento "onblur") en lugar del evento "oninput".
 
Para formatear números de esa manera, puedes usar la función toLocaleString() de JavaScript, que convierte un número a una cadena con una representación del lenguaje especificado. Aquí está el código:

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" oninput="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
  x.value = parseFloat(x.value.replace(/,/g, '')).toLocaleString("en-US", {style: "currency", currency: "USD", minimumFractionDigits: 2});
}
</script>

</body>
</html>
Cada vez que un usuario escribe en el campo de texto, la función myFunction() se activará. Esta función eliminará todas las comas del valor actual (si las hay), luego convertirá el texto a un número flotante y lo formateará con el formato "en-US" para tener siempre dos dígitos después del punto decimal y una coma como separador de miles.

Nota: Este script formateará la cifra en tiempo real cada vez que el usuario escribe algo, y en algunos casos puede ser un poco confuso para el usuario. Por ejemplo, si se intenta escribir "1350", después de escribir "1" se convertirá a "1.00", lo que podría no ser lo esperado. Para evitar este comportamiento, podría ser mejor aplicar el formato solo después de que el usuario haya terminado de escribir, por ejemplo, al perder el enfoque del campo de texto (evento "onblur") en lugar del evento "oninput".
me sale nan
 
Mis disculpas por eso. "NaN" aparece cuando la función parseFloat intenta parsear algo que no es un número. Para solucionar esto, puedes agregar una validación que chequee si el valor del input es numérico antes de intentar formatearlo. Aquí está el código:

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" oninput="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
  
  // Esto eliminará cualquier carácter que no sea numérico o un punto decimal
  x.value = x.value.replace(/[^0-9.]/g, '');
  
  if(!isNaN(x.value) && x.value !== '') {
    x.value = parseFloat(x.value.replace(/,/g, '')).toLocaleString("en-US", {style: "currency", currency: "USD"});
  }
}
</script>

</body>
</html>
Este código reemplazará cualquier carácter que no sea un número o un punto decimal con en blanco antes de intentar parsearlo a un número.
 
Mis disculpas por eso. "NaN" aparece cuando la función parseFloat intenta parsear algo que no es un número. Para solucionar esto, puedes agregar una validación que chequee si el valor del input es numérico antes de intentar formatearlo. Aquí está el código:

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" oninput="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
 
  // Esto eliminará cualquier carácter que no sea numérico o un punto decimal
  x.value = x.value.replace(/[^0-9.]/g, '');
 
  if(!isNaN(x.value) && x.value !== '') {
    x.value = parseFloat(x.value.replace(/,/g, '')).toLocaleString("en-US", {style: "currency", currency: "USD"});
  }
}
</script>

</body>
</html>
Este código reemplazará cualquier carácter que no sea un número o un punto decimal con en blanco antes de intentar parsearlo a un número.
pero porque siempre que escribo cualquier numero se coloca de ultimo para escribir??
 
pero porque siempre que escribo cualquier numero se coloca de ultimo para escribir??
Ese comportamiento se debe a que cada vez que ingresas un número, el código está volviendo a establecer el valor del campo de texto, y eso hace que el cursor se mueva al final del texto. Un posible enfoque para resolver tu problema consiste en aplicar la formateación cuando el campo pierda el enfoque en lugar de hacerlo con cada cambio. Aquí te dejo un ejemplo:

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" onblur="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
  if (x.value != '') {
    x.value = parseFloat(x.value.replace(/,/g, '')).toLocaleString("en-US", {style: "currency", currency: "USD"});
  }
}
</script>

</body>
</html>

Este código formateará el número solo cuando el campo pierda el enfoque (por ejemplo, después de hacer clic fuera del campo o al pasar a otro campo). Esto debería permitirte ingresar números sin que el cursor se mueva al final al escribir.
 
Ese comportamiento se debe a que cada vez que ingresas un número, el código está volviendo a establecer el valor del campo de texto, y eso hace que el cursor se mueva al final del texto. Un posible enfoque para resolver tu problema consiste en aplicar la formateación cuando el campo pierda el enfoque en lugar de hacerlo con cada cambio. Aquí te dejo un ejemplo:

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" onblur="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
  if (x.value != '') {
    x.value = parseFloat(x.value.replace(/,/g, '')).toLocaleString("en-US", {style: "currency", currency: "USD"});
  }
}
</script>

</body>
</html>

Este código formateará el número solo cuando el campo pierda el enfoque (por ejemplo, después de hacer clic fuera del campo o al pasar a otro campo). Esto debería permitirte ingresar números sin que el cursor se mueva al final al escribir.
pero si no escribo ningun numero porque se cambia a nan??
 
pero si no escribo ningun numero porque se cambia a nan??
Lo siento por el error. "NaN" es el resultado de intentar convertir un string vacío o no numérico a un número usando la función parseFloat().

Vamos a cotejar que el valor no esté vacío y que su conversión a float (parseFloat) no sea NaN. Aquí tienes el código corregido:

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" onblur="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
  var value = parseFloat(x.value.replace(/,/g, ''));
  
  if (!isNaN(value) && x.value.trim() !== '') {
    x.value = value.toLocaleString("en-US", {style: "currency", currency: "USD"});
  } else {
    x.value = '';
  }
}
</script>

</body>
</html>
El código ahora comprueba que el valor convertido a float no sea NaN y que el valor ingresado no sea solo espacios vacíos antes de intentar formatearlo. En caso contrario, simplemente limpia el valor del input.
 
Lo siento por el error. "NaN" es el resultado de intentar convertir un string vacío o no numérico a un número usando la función parseFloat().

Vamos a cotejar que el valor no esté vacío y que su conversión a float (parseFloat) no sea NaN. Aquí tienes el código corregido:

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" onblur="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
  var value = parseFloat(x.value.replace(/,/g, ''));
 
  if (!isNaN(value) && x.value.trim() !== '') {
    x.value = value.toLocaleString("en-US", {style: "currency", currency: "USD"});
  } else {
    x.value = '';
  }
}
</script>

</body>
</html>
El código ahora comprueba que el valor convertido a float no sea NaN y que el valor ingresado no sea solo espacios vacíos antes de intentar formatearlo. En caso contrario, simplemente limpia el valor del input.
ahora desaparece el ultimo valor D;
 
ahora desaparece el ultimo valor D;
Mis disculpas por los inconvenientes. Debido a la formateación de moneda, el valor capturado en el evento onblur podría contener caracteres no numéricos (como el signo de moneda '$' y la coma ','). Podemos solucionar esto eliminando estos caracteres antes de hacer el procesamiento:

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" onblur="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
  var value = parseFloat(x.value.replace(/[\$,]/g, ''));
  
  if (!isNaN(value)) {
    x.value = value.toLocaleString("en-US", {style: "currency", currency: "USD"});
  } else {
    x.value = '';
  }
}
</script>

</body>
</html>

En este código, primero eliminamos el signo de moneda y las comas, luego hacemos la conversión a float. Así, el último valor no desaparecerá después de procesar la entrada.
 
Mis disculpas por los inconvenientes. Debido a la formateación de moneda, el valor capturado en el evento onblur podría contener caracteres no numéricos (como el signo de moneda '$' y la coma ','). Podemos solucionar esto eliminando estos caracteres antes de hacer el procesamiento:

HTML:
<!DOCTYPE html>
<html>
<body>

Cantidad: <input type="text" id="myInput" onblur="myFunction()">

<script>
function myFunction() {
  var x = document.getElementById("myInput");
  var value = parseFloat(x.value.replace(/[\$,]/g, ''));
 
  if (!isNaN(value)) {
    x.value = value.toLocaleString("en-US", {style: "currency", currency: "USD"});
  } else {
    x.value = '';
  }
}
</script>

</body>
</html>

En este código, primero eliminamos el signo de moneda y las comas, luego hacemos la conversión a float. Así, el último valor no desaparecerá después de procesar la entrada.
creo que ahora si funciona bien, gracias, cualquier cosa te aviso <3
 
creo que ahora si funciona bien, gracias, cualquier cosa te aviso <3
¡Genial! Me alegra saber que funciona. Si tienes más preguntas o necesitas más ayuda, no dudes en preguntar. ¡Estoy aquí para ayudar! 😊
 
Atrás
Arriba