Ahora que ya conoces cómo podemos trabajar con PHP para hacer cosas más complejas te reto a realizar los siguientes ejercicios para que continúes practicando tu lógica.
Descuentos a la vista
En una tienda de ropa hay descuento del 35% en todos sus productos, debes realizar una función que reciba el valor de cada producto y le reste el 35% para mostrar luego su valor original y en cuánto queda su nuevo valor a pagar.
De mayor a menor
Escribe una solución para una tienda donde se requiere encontrar el orden en el cual se publicarán los productos en su página web. Para esto, se debe contar con las dimensiones de cada producto y aquellos más grandes (en ancho y alto) estarán en los primeros lugares, y aquellos más pequeños estarán al final.
Tip: Como entrada, debes recibir el ancho y alto de cada producto. Analiza su tamaño y después puedes exponer la lista de productos en el orden requerido como un array.
¡Ahora espero ver tus soluciones en los comentarios! Estaremos compartiendo las soluciones de toda nuestra comunidad.
Disfrútalos, aprende mucho y recuerda hacer tus preguntas para resolver cada tarea.
Reto 1: Me costó bastante porque quise que se crearan de manera dinámica cada cosa (de acuerdo a la cantidad ingresada de productos, se fabriquen los input), y luego en base a los productos ingresados se muestre el resultado.
Hice tres archivos y el resultado es el siguiente:
Códigoreto3.php:
<form action="proceso_productos.php" method="post"><label for="">Indicar cantidad de productos a ingresar:</label><br><input type="number" name="productsQuantity" id=""><button type="submit">Enviar</button></form>
<?phpfor($i=0;$i<count($_POST);$i++){echo"Nuevo precio de producto ".($i+1).": $".($_POST["product$i"]-($_POST["product$i"]*0.35))."<br>";}
Reto 2:
El segundo ejercicio fue un tanto similar, al inicio establecí el tamaño, luego, multipliqué largo por ancho para saber su tamaño final, y ordené el array de mayor a menor, finalmente imprimiendo el resultado.
Hice también 3 archivos, viéndose así:
Comparto el código de los retos:
entry.html:
<!DOCTYPEhtml><htmllang="es"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Entrada de productos</title></head><body><main><formaction="size_data_entry.php"method="post"><labelfor="">Indicar cantidad de productos a ingresar en la web:</label><br><inputtype="number"name="productsQuantity"id=""><buttontype="submit">Enviar</button></form></main></body></html>
size_data_entry.php:
<?php$productsQuantity=$_POST["productsQuantity"];$form="<form action='final_result.php' method='post'>";for($i=0;$i<$productsQuantity;$i++){$form.="Ingresar alto de producto ".($i+1).": "."<input type='number' name='productHeight".$i."'><br>"."Ingresar ancho de producto ".($i+1).": "."<input type='number' name='productWidth".$i."'><br>";}$button="<button type='submit'>Enviar</button>";$formCierre="</form>";echo$form.$button.$formCierre;
<?php
functiondescuento($total){returnround((35* $total)/100,2);}$products =["articulo 1"=>300,"articulo 2"=>500];echo "<h2>Toda la tienda esta con el 35% de descuento.</h2>";foreach($products as$name=> $price){ $ahorra =descuento($price); $total = $price - $ahorra; echo "$name price $$price - $ahorra after discount $$total <br>";}
Reto 2 De mayor a menor
Me tarde vastante poque me toco comprender un poco de POO y revisar bastante documentacion, pero me divertí
main.php
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="style.css"><title>Document</title></head><body><div class='form-container'><h4>Ingrese la cantidad de articulos que desee almacenar</h4><form action='width-height.php'class="form-main"><input type='number' name='cant'><button type='submit'>Enviar</button></form></div></body></html>
width-height.php
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="style.css"><title>Document</title></head><body><div class='form-container'><form action="analisis.php" method='$_POST'><?php for($i=0; $i < $_REQUEST["cant"]; $i++):?><div><label for="">ingrese los datos del producto<?=$i+1?></label><input type="text" placeholder='Ingrese el nombre del producto' name="nombre<?=$i?>"><input type='number' placeholder='Ingrese la altura en cm' name='height<?=$i?>'><input type="number" placeholder='Ingrese el ancho en cm' name='width<?=$i?>'></div><?php endfor;?><button type='submit'>Enviar</button></form></div></body></html>
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><form action="mayorMenor.php"><p>Calculador de mayor a menor de medidas de productos</p><div><p>Producto1</p><input placeholder="altura" type="number" name="product0Heigth"><input type="number" placeholder="ancho" name="product0Width"></div><div><p>Producto2</p><input placeholder="altura" type="number" name="product1Heigth"><input type="number" placeholder="ancho" name="product1Width"></div><div><p>Producto3</p><input placeholder="altura" type="number" name="product2Heigth"><input type="number" placeholder="ancho" name="product2Width"></div><input value="calcular" type="submit"></form></body></html>
<?php
$p1 = $_REQUEST['product0Heigth']+ $_REQUEST['product0Width'];$p2 = $_REQUEST['product1Heigth']+ $_REQUEST['product1Width'];$p3 = $_REQUEST['product2Heigth']+ $_REQUEST['product2Width'];$start ="Ordenado por orden de mayor de dimensión de productos el resultado es el siguiente: ";$d1 ="Dimensión de producto 1: $p1";$d2 ="Dimensión de producto 2: $p2";$d3 ="Dimensión de producto 3: $p3";if($p1 > $p2 && $p2 > $p3){ echo $start."<br>".$d1."<br>".$d2."<br>".$d3;}elseif($p1 > $p2 && $p3 > $p2){ echo $start."<br>".$d1."<br>".$d3."<br>".$d2;}elseif($p2 > $p3 && $p3 > $p1){ echo $start."<br>".$d2."<br>".$d3."<br>".$d1;}elseif($p2 > $p3 && $p1 > $p3){ echo $start."<br>".$d2."<br>".$d1."<br>".$d3;}elseif($p3 > $p1 && $p1 > $p2){ echo $start."<br>".$d3."<br>".$d1."<br>".$d2;}elseif($p3 > $p1 && $p2 > $p1){ echo $start."<br>".$d3."<br>".$d2."<br>".$d1;}?>
¿El método de la burbuja alguien ya lo implementó?
Intenté utilizar todo lo aprendido, entonces creé una página html donde solicita el número de productos, luego lleva a una página php donde aparece una matriz para ingresar nombre de producto, alto y ancho, en este php creo la variable $cantidad para hacer esa matriz.
<?php
$cantidad =($_REQUEST["productos"]);$form ="<form action='mayormenor.php'>";$button ="<button type = 'submit' > Enviar</button>";$formCierre ="</form>";print_r("ingrese nombre de producto, Ancho y Alto <br>");for($i=0; $i < $cantidad; $i++){//print_r("pasó " . $i . "<br>"); $form .="<input type ='text' name ='nombre".$i."'>"."<input type ='int' name ='ancho".$i."'>"."<input type ='int' name ='alto".$i."'>";}echo $form.$button.$formCierre;?>
Hasta ahí voy bien, pero al ingresar al tercer PHP llamado mayormenor.php la variable $cantidad no me funciona (no está definida) para poder guardar esa información en una propia array, apenas inicio a programar y no se como llamarla... googleando encontré global pero no me funciona, tampoco me sirvió include. me pueden por favor ayudar.
Hay un atributo llamado "hidden" de la etiqueta html. Si lo utilizas dentro del formulario este se ocultará la vista pero el mensaje se enviará igualmente al servidor. Lo utilizarías así:
En mi intento del segundo ejercicio tengo un error. Al añadir más elemetos al array "$boxes" siempre se sobreescribe el último elemento, entonces mi array no puede tener varios elementos, mas uno solamente. Sé que tiene que ver algo porque la añadidura ocurre dentro de un condicional que verifica que el botón sea presionado. ¿Cómo podría arreglar esto?
tarde pero seguro, aunque no esta bien pulido, Funcionaa!!!
<?php
$productos =["playera"=>100,"pantalon"=>150,"camisa"=>200,];echo "Decuento del 35% toda la tienda"."<br><br>";foreach($productos as$tipo=> $valor){ echo $tipo ." a $".$valor."<br>";}//html?><!DOCTYPE html><html><head><title>FormularioPOST</title></head><body><form method="post" action=""><label for="%">Precio:</label><input type="text" id="%" name="desx"><button type="submit">Enviar</button></form><?php
?></body></html><?php
if(isset($_POST['desx'])){functiondescuento($porcentaje){ echo "precio original: $".$_POST['desx']."<br>"; echo "descuento: $".($porcentaje*.35)."<br>"; echo "valor final: $".($porcentaje-($porcentaje*.35))."<br>";}descuento($_POST['desx']);echo "\n";};?>```
y de mayor a menor:
```js
<?php
$productos =["cafe"=>["ancho"=>"","alto"=>""],"azucar"=>["ancho"=>"","alto"=>""],"avena"=>["ancho"=>"","alto"=>""],"sopa"=>["ancho"=>"","alto"=>""],];// Verificar si se ha enviado el formularioif($_SERVER["REQUEST_METHOD"]=="POST"){ $i =0; $claves =array_keys($productos);foreach($productos as$key=> $value){ $user_ancho = $_POST["ancho_".$claves[$i]]; $user_alto = $_POST["alto_".$claves[$i]];// Asignar valores a 'ancho' y 'alto' $productos[$claves[$i]]["ancho"]= $user_ancho; $productos[$claves[$i]]["alto"]= $user_alto;// Calcular y agregar nueva clave 'dimensiones' $dimensiones =((int)$user_ancho *(int)$user_alto); $productos[$claves[$i]]["dimensiones"]= $dimensiones; $i++;}// Ordenar el array de mayor a menor por la clave "dimensiones"uasort($productos,function($a, $b){return $b['dimensiones']<=> $a['dimensiones'];});// Mostrar el resultado echo "<h4>Productos ordenados por dimensiones (de mayor a menor):</h4>";foreach($productos as$producto=> $c){ echo "<p>Producto: ".$producto."<br> Ancho: ".$c["ancho"]."<br> Alto: ".$c["alto"]."<br> Dimensión: ".$c["dimensiones"]."</p>";}}else{// Mostrar el formulario para ingresar datos echo '<form method="POST" action="">';foreach($productos as$producto=> $detalles){ echo "<h5>Producto: $producto</h5>"; echo 'Ancho: <input type="number" name="ancho_'.$producto.'" required><br>'; echo 'Alto: <input type="number" name="alto_'.$producto.'" required><br>';} echo '<button type="submit">Enviar</button>'; echo '</form>';}?>```
Paz y bien, este sería mi solución con relación a la primera actividad.
Descuentos a la vista.
<?php
// Función para calcular el valor con un 35% de descuentofunctiondescuento($valor){// Calcula el valor descontando el 35% y lo retorna $valorConDescuento = $valor -($valor *0.35);return $valorConDescuento;}// Inicializamos una variable para almacenar el resultado que se mostrará al usuario $resultado ="";// Verificamos si el formulario ha sido enviado y el valor ingresado es numéricoif(isset($_GET['valor'])&&is_numeric($_GET['valor'])){// Obtenemos el valor ingresado por el usuario desde el formulario $valor = $_GET['valor'];// Formateamos el valor original ingresado como moneda $valorFormateado =number_format($valor,2,',','.');// Calculamos el valor con descuento y lo formateamos como moneda $valorConDescuento =number_format(descuento($valor),2,',','.');// Almacenamos el resultado en una etiqueta <label> para mostrarlo en el formulario $resultado = "<label>ValorOriginal: \$$valorFormateado <br>Valor con Descuento: \$$valorConDescuento</label>";}// Mostramos el formulario al usuario echo "
<form action='' method='get'><h3>Descuentos a la vista</h3><p>Ingrese el valor del producto para aplicar descuento</p><input type='text' name='valor'><!--Campo para que el usuario ingrese el valor del producto --><br><br><button type='submit'>Enviar</button><!--Botón de envío del formulario --><br><br> $resultado <!--Muestra el resultado del cálculo debajo del botón de envío --></form> ";?>
$carrito = [];function agregarProductosCarrito(&$inventario, &$carrito){
while (true) { echo "\n Seleccione un articulo "; echo "\n Para terminar escriba 'Salir' \n"; $articulo = trim(readline());
// Ver la entrada del usuario echo "Entrada recibida: '$articulo'\n";
//condicion para salir del bucle if (strtolower($articulo) == 'salir') { break; } //se verifica si el articulo existe en el inventario if ($inventario[$articulo]) { # agrega el articulo al carrito $carrito[$articulo] = $inventario[$articulo]; //se elimina el articulo del inventario unset($inventario[$articulo]); echo "El articulo se agrego al carrito correctamente. \n"; } else { echo "El articulo no existe en inventario. \n"; } }}
function sumProdCar($carrito){ $precioTotal = 0;
foreach ($carrito as $precio) { $precioTotal += $precio; } return $precioTotal; echo "El valor total de la compra es de $" . $precioTotal . "\n";}
function descuento($carrito){ $valorCompra = sumProdCar($carrito); var_dump($valorCompra); $descuento = $valorCompra * 0.35; $valorTotal = $valorCompra - $descuento; echo "Valor total a pagar : $" . $valorTotal . "\n";}
$inventario =["camisa Hombre"=>55000,"camisa Mujer"=>45000,"pantalon Hombre"=>75000,"pantalon Mujer"=>65000,];functionobtenerPrecio($inventario, $clave){if($inventario[$clave]){return $inventario[$clave];}else{return"el articulo no existe";}}functionarticDisponibles($inventario){ echo "Articulo disponibles: \n"; echo "\nCamisa Hombre: $ ".obtenerPrecio($inventario,"camisa Hombre"); echo "\nCamisa Mujer: $ ".obtenerPrecio($inventario,"camisa Mujer"); echo "\nPantalon Hombre: $ ".obtenerPrecio($inventario,"pantalon Hombre"); echo "\nPantalon Mujer: $ ".obtenerPrecio($inventario,"pantalon Mujer");};$carrito =[];functionagregarProductosCarrito(&$inventario,&$carrito){while(true){ echo "\n Seleccione un articulo "; echo "\n Para terminar escriba 'Salir' \n"; $articulo =trim(readline());// Ver la entrada del usuario echo "Entrada recibida: '$articulo'\n";//condicion para salir del bucleif(strtolower($articulo)=='salir'){break;}//se verifica si el articulo existe en el inventarioif($inventario[$articulo]){ # agrega el articulo al carrito
$carrito[$articulo]= $inventario[$articulo];//se elimina el articulo del inventariounset($inventario[$articulo]); echo "El articulo se agrego al carrito correctamente. \n";}else{ echo "El articulo no existe en inventario. \n";}}}functionsumProdCar($carrito){ $precioTotal =0;foreach($carrito as $precio){ $precioTotal += $precio;}return $precioTotal; echo "El valor total de la compra es de $".$precioTotal."\n";}functiondescuento($carrito){ $valorCompra =sumProdCar($carrito);var_dump($valorCompra); $descuento = $valorCompra *0.35; $valorTotal = $valorCompra - $descuento; echo "Valor total a pagar : $".$valorTotal."\n";}articDisponibles($inventario);agregarProductosCarrito($inventario, $carrito);sumProdCar($carrito);descuento($carrito);
precio, con descuento del 35%
listo
Mayor a menor
<?phpfunction ordenarProductosPorTamaño(array $productos) { // Ordena los productos de mayor a menor basándose en el tamaño (ancho * alto) usort($productos, function($a, $b) { $tamañoA = $a['ancho'] * $a['alto']; $tamañoB = $b['ancho'] * $b['alto']; return $tamañoB <=> $tamañoA; // Nota el cambio para ordenar de mayor a menor }); return $productos;}$productos = [ ['ancho' => 30, 'alto' => 20], ['ancho' => 10, 'alto' => 10], ['ancho' => 20, 'alto' => 15], ['ancho' => 25, 'alto' => 30],];$productosOrdenados = ordenarProductosPorTamaño($productos);// Imprimir los productos ordenados para verificarforeach ($productosOrdenados as $producto) { echo "Producto - Ancho: {$producto['ancho']}, Alto: {$producto['alto']}, Tamaño: " . ($producto['ancho'] * $producto['alto']) . "\n";}
Descuento
<?php function calcularDescuento($precioOriginal) { // Calcular el valor del descuento (35% del precio original) $valorDescuento = $precioOriginal * 0.35; // Calcular el nuevo precio después del descuento $nuevoPrecio = $precioOriginal - $valorDescuento; // Imprimir el precio original y el nuevo precio echo "Precio Original: $" . number_format($precioOriginal, 2) . "\n"; echo "Nuevo Precio con Descuento: $" . number_format($nuevoPrecio, 2) . "\n";}// Ejemplo de usocalcularDescuento(100); // Suponiendo que el precio original del producto es $100