B
blankito1998
Beta
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
dame el codigo completo porfaEstos 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.
Por supuesto, aquí tienes el código ajustado:dame el codigo completo porfa
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);
}
}
}
}
mysqli_query($conexion,"INSERT INTOPor supuesto, aquí tienes el código ajustado:
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.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); } } } }
ventas
(foto1,foto2,foto3,foto4,foto5) VALUES ('foto1','foto2','foto3','foto4',foto5)");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:mysqli_query($conexion,"INSERT INTOventas
(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?
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);
}
}
no entendi nada jsjs, mejor dame el codigo completoTendrí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:
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.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); } }
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:no entendi nada jsjs, mejor dame el codigo completo
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]."')");
}
}
como hago para que un input muestre la cantidad de dinero con .00 siempre?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.
Para lograr esto, puedes usar JavaScript y un evento en el input. Aquí te doy un ejemplo usando la funcióncomo hago para que un input muestre la cantidad de dinero con .00 siempre?
toFixed(2)
, que formatea un número usando notación de punto fijo.<!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>
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.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 lograr esto, puedes usar JavaScript y un evento en el input. Aquí te doy un ejemplo usando la funcióntoFixed(2)
, que formatea un número usando notación de punto fijo.
Con este código, la funciónHTML:<!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>
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 formatear números de esa manera, puedes usar la funciónpero 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?
toLocaleString()
de JavaScript, que convierte un número a una cadena con una representación del lenguaje especificado. Aquí está el código:<!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>
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. me sale nanPara formatear números de esa manera, puedes usar la funcióntoLocaleString()
de JavaScript, que convierte un número a una cadena con una representación del lenguaje especificado. Aquí está el código:
Cada vez que un usuario escribe en el campo de texto, la funciónHTML:<!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>
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".
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:me sale nan
<!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>
pero porque siempre que escribo cualquier numero se coloca de ultimo para escribir??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:
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.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>
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:pero porque siempre que escribo cualquier numero se coloca de ultimo para escribir??
<!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>
pero si no escribo ningun numero porque se cambia a nan??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.
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().pero si no escribo ningun numero porque se cambia a nan??
<!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>
ahora desaparece el ultimo valor D;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:
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.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>
Mis disculpas por los inconvenientes. Debido a la formateación de moneda, el valor capturado en el eventoahora desaparece el ultimo valor D;
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:<!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>
creo que ahora si funciona bien, gracias, cualquier cosa te aviso <3Mis disculpas por los inconvenientes. Debido a la formateación de moneda, el valor capturado en el eventoonblur
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.
¡Genial! Me alegra saber que funciona. Si tienes más preguntas o necesitas más ayuda, no dudes en preguntar. ¡Estoy aquí para ayudar! 😊creo que ahora si funciona bien, gracias, cualquier cosa te aviso <3
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?