PHP - 5ta Entrega Estructuras de control
Hoy les traigo las tan esperadas estructuras de control.
Luego de pensar varias definiciones y consular bastante al maestro del indexado de la web. Creo que la mejor definición para las Estructuras de control se la merece pnp.net y es la siguiente:
Todo script PHP está construido en base a una serie de sentencias. Una sentencia puede ser una asignación, una llamada de función, un ciclo, una sentencia condicional o incluso una sentencia que no hace nada (una sentencia vacía). Las sentencias generalmente finalizan con un punto y coma. Adicionalmente, las sentencias pueden agruparse en un conjunto de sentencias, encapsulándolas entre corchetes. Un grupo de sentencias es una sentencia por sí misma también
Enlace original -> Aquí.
Como venimos viendo y sin previo aviso en tutoriales anteriores, la estructura "if" evalúa por valor booleano y si da VERDADERO/TRUE se ejecuta.
El anterior les va a parecer familiar, ya que es el último ejemplo con el que terminamos los operadores, en el Post anterior. En donde también vamos a publicar el resultado.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Operadores incremento</title> </head> <body> <form action="operadoresLogicos.php" method="POST"> <p>Operador de incremento:</p> <fieldset> <legend>Validate el incremento</legend> <p>Aquí le decimos a PHP que nos valide si colocamos los dos valores en los campos. </p> <input type="text" id="tipo1" name="tipo1" value=""/> <input type="text" id="tipo2" name="tipo2" value=""/> <br /><br /> <input type="submit" value="verificar"/> <input type="reset" value="Limpiar" /> </fieldset> </form> <?php if ($_POST['tipo1'] and $_POST['tipo2']) { echo "<br />Perfecto colocaste ".$_POST['tipo1']." en el primer campo Y ".$_POST['tipo2']." para el segundo. "; } else { echo "<br />No colocaste valores en ninguno de los campos."; } ?> </body> </html>
If Else.
Se usa para continuar ejecutando si la expresión no valida.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Operadores incremento</title> </head> <body> <form action="incrementoDecremento.php" method="POST"> <p>Operador de incremento:</p> <fieldset> <legend>Validate el incremento</legend> <p>Nuesto valor de inicio va a ser 1, desde allí hasta 100 le decimos que cuente.</p> <input type="text" id="tipo1" name="tipo1" value=""/> <br /><br /> <input type="submit" value="verificar"/> <input type="reset" value="Limpiar" /> </fieldset> </form> <?php echo 'Con esto nuestro código contaría hasta el valor que le digamos mostrando el valor de nuestras valores generados sucesivamente '.'<br>'; if($_POST['tipo1'] < 100) { foreach(range(1, $_POST['tipo1']) as $contar) echo $contar." "; } else { echo 'Eppa, el valor no puede ser superior o igual a 100 :)...'; } /* if(++$_POST['tipo1']) { echo $_POST['tipo1']; } /* ?> </body> </html>
Como vimos en el anterior y no es por reciclar código, sino que es sólo por el hecho de no crear varios ejemplos de las mismas cosas y que no se torne aburrido ;).
Resultado -> Click Aquí.
Elseif.
Ahora si con ejemplo nuevo, se podría decir que es un anidamiento de etiquetas si valida la expresión continúa ejecutando y si la VUELVE a validar continúa, ésto se puede repetir la cantidad de veces que se quiera.
Traducido al español.
si ($unaVariable > $otraVariable)
{
echo "unaVariable es mayor que otraVariable";
} entonces/mas si($unaVariable == $otraVariable) {
{
echo "unaVariable es igual a otraVariable";
}entonces{
echo "unaVariable es menor que otraVariable";
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Estructuras de control.</title> </head> <body> <form action="estructurasControlElseIf.php" method="POST"> <p>Estructuras de Control Else If:</p> <fieldset> <legend>Valida con los siguientes campos</legend> <input type="text" id="tipo1" name="tipo1" value=""/> <br /><br /> <input type="text" id="tipo2" name="tipo2" value=""/> <br /><br /> <input type="submit" value="verificar"/> <input type="reset" value="Limpiar" /> </fieldset> </form> <?php echo "<p>El primer valor debe ser mayor o igual que el segundo valor: </p>"; if($_POST['tipo1'] > $_POST['tipo2']) { echo '<p>El primer valor es mayor al segundo.</p>'; } elseif ($_POST['tipo1'] == $_POST['tipo2']) { echo '<p>OK, los valores son iguales.</p>'; } else { echo '<p>El primer valor es menor que el segundo.<p>'; } ?> </body> </html>
Como se ve, no se difiere mucho de lo que venimos haciendo ;)... a practicar con las variables escribiendo y generando nuevos ejemplos. ejejee.
Resultado -> Click Aquí.
While
En el siguiente vamos a hacer que PHP cuente desde 1 hasta 10, tené en cuenta que sólo es para practicar :).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Estructuras de control while</title> </head> <body> <form action="estructurasWhileContar.php" method="POST"> <p>Estructuras de Control While:</p> <fieldset> <legend>Hagamos que PHP cuente</legend> <input type="text" id="tipo1" name="tipo1" value=""/> <br /><br /> <input type="submit" value="verificar"/> <input type="reset" value="Limpiar" /> </fieldset> </form> <?php echo "<p>Contar hasta 10 desde: 1.</p>"; if($_POST['tipo1'] === '1') { while($_POST['tipo1'] <= 10) { echo $_POST['tipo1']++; } } else { echo "<p><srong><font color=red>El único valor que se puede colocar es 1</font></strong></p>"; } ?> </body> </html>
Colocamos un condicional if y le decimos que, si el valor no es identico a 1 Nos de el mensaje de error sino que vaya y compruebe while. Allí recorre los valores hasta que llega a 10.
Resultado -> Click Aquí.
Do While
Con el siguiente comprobamos por única vez la expresión.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Estructuras de control while</title> </head> <body> <form action="estructurasWhileContar.php" method="POST"> <p>Estructuras de Control While:</p> <fieldset> <legend>Hagamos que PHP cuente</legend> <input type="text" id="tipo1" name="tipo1" value=""/> <br /><br /> <input type="submit" value="verificar"/> <input type="reset" value="Limpiar" /> </fieldset> </form> <?php echo "<p>Contar hasta 10 desde: 1.</p>"; do { if($_POST['tipo1'] === '1') { echo "<p><srong><font color=red>El único valor que se puede colocar es 1</font></strong></p>"; } echo $_POST['tipo1']++; } while($_POST['tipo1'] <= 10) ?> </body> </html>
Si de TRUE/VERDAERO va y recorre la expresión del while.
Resultado -> Click Aquí.
For
Son los más complejos y es importante comprender bien su funcionamiento, seguimos viéndolo sobre el formulario.
for(expr1; expr2;epxpr3)
{
sentencia
}
for($evaluamosExpresion; $seEjecuta; $evaluaSiLasAnterioresSiguenVerdaderas)
{
if ($evaluamosExpresion > 10){
echo $evaluamosExpresion;
}
}
El ejemplo anterior parece estar claro... pero nos vamos a extender a crearlo código con los formularios que veníamos usando.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Estructuras de control for</title> </head> <body> <form action="estructurasFor.php" method="POST"> <p>Estructuras de Control For:</p> <fieldset> <legend>Seguimos contando con PHP</legend> <input type="text" id="tipo1" name="tipo1" value=""/> <br /><br /> <input type="submit" value="verificar"/> <input type="reset" value="Limpiar" /> </fieldset> </form> <?php if (trim($_POST['tipo1'], "abcdefghijklmnopqrstuvwxyz")) { for($_POST['tipo1']; $_POST['tipo1'] <=100; $_POST['tipo1']++){ echo $_POST['tipo1']; } } else{ echo 'Eppa!, los caracteres no están permitidos'; } ?> </body> </html>
Resultado -> Click Aquí.
Lo primero que hago es con if decirle que no me permita ésos caracteres, luego con for decimos que si el valor es menor 0 igual a 100 cuentes desde el valor que le traemos del formulario.
Foreach
Se acuerdan que en el tutorial 3 usamos un foreach para contar hasta 10, vamos a avanzar un poco el código para que el array cuente según el valor que le coloquemos.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Estructuras de control for each</title> </head> <body> <form action="estructurasForEach.php" method="POST"> <p>Estructuras de Control For Each:</p> <fieldset> <legend>Seguimos contando con PHP</legend> <input type="text" id="tipo1" name="tipo1" value=""/> <br /><br /> <input type="submit" value="verificar"/> <input type="reset" value="Limpiar" /> </fieldset> </form> <?php if (trim($_POST['tipo1'], "abcdefghijklmnopqrstuvwxyz")){ $contar = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20); foreach(range(0, $_POST['tipo1']) as $contar){ if($contar <= 20){ echo $contar; } { } } echo "<--Perfecto PHP puede contar, aunque sólo hasta 20"; } else { echo "<strong><font color=red>No se permiten carateres. Sólo números!</font></strong>"; } ?> </body> </html>
Básicamente lo que hace foreach es levantar un array y recorrerlo, pero lo recorre en un sólo sentido. Por lo que es necesario llamar a la función reset, cada vez que se quiera recorrer el array nuevamente.
Resultado -> Click aquí.
Break
Se permite recorrer el valor hasta que se indique.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Estructuras de control break</title> </head> <body> <form action="estructurasBreak.php" method="POST"> <p>Estructuras de Control Break:</p> <fieldset> <legend>Seguimos contando con PHP</legend> <p>El array tiene los siguientes valores: cero, uno, dos, tres, cuatro, cinco, seis, siete, ocho nueve, diez.<p> <input type="text" id="tipo1" name="tipo1" value=""/> <br /><br /> <input type="submit" value="verificar"/> <input type="reset" value="Limpiar" /> </fieldset> </form> <?php if (trim($_POST['tipo1'], "0123456789., ")){ $arrValores = array("cero", 'uno', 'dos', 'tres', 'cuatro', 'cinco', 'seis', 'siete', 'ocho', 'nueve', 'diez'); while (list(,$valStop) = each($arrValores)){ if($valStop == $_POST['tipo1']){ break; } echo "<ul>"; echo "<li>".$_POST['tipo1']."</li>"; echo "</ul>"; } echo "Verificacion de palabra escrita: <strong>". $_POST['tipo1']."</strong>."; }else { echo "No están permitidos los números, tampoco que el formulario quede en blanco."; } ?> <p>Nota si la palabra no se encuentra en el array se va a recorrer entero, mostrando todas las claves que tiene :p .</p> </body> </html>
Al inicio... como venimos haciendo le colocamos un trim.... para que no permita colocar números. Luego con un bucle While le decimos que liste y guarde en una variable $valStop los valores de $arrValores, si lo encuentra hace un break y muestra los valores de las claves almacenadas hasta el valor que se indica.
Resultado -> Click Aquí
En ésta práctica vamos a ver como controlar el ingreso de caracteres en un formulario:
<?php $contarTexto = $_POST['tipo1']; $chars = strlen($contarTexto); if ($chars == 2) { //$espacios = substr_count($texto, " "); //$num_chars_ok = $chars - $espacios; echo $chars."<br>"; //echo $espacios."<br>"; //echo $num_chars_ok; } else { echo "El valor tiene que ser igual a 2 caracteres en los campos."; } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <fieldset> <legend>Recordá sóolo se permiten 2 caracteres.</legend> <input type="text" id="tipo1" name="tipo1" value="<?php echo $_POST['tipo1']; ?>"/> <br /> <input type="submit" value="Enviar" name="Enviar"/> <input type="reset" value="Limpiar" /> </fieldset> </form>
Creamos una variable que trae el dato del formulario, luego chars que contiene la función strlen, que cuenta los caracteres que se ingresan, para el ejemplo no se pueden ingresar 1 caracter ni 3 (ni hablar de más de 3)
Y continúa!... a no desesperar...