[SOLUCIONADO] [Taller de PHP] Ejercicio III

Iniciado por [T]Killer, Junio 01, 2011, 01:45:31 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 01, 2011, 01:45:31 PM Ultima modificación: Marzo 22, 2014, 02:18:47 PM por Expermicid
No entiendo nada del ejercicio tres, y me lo han explicado un poco por IRC pero cada persona lo entiende de una forma distinta y aquí no se aclara nadie, ni ellos ni yo, ¡jajaj!

A ver si alguien que sepa SEGURO que entiende el ejercicio puede explicármelo o ponerme un ejemplo (sin code, para evitar copiarme).

$4lu2

Cita de: Taller de PHP - Unidad I - Ejercicio IIIIII.   Hacer un script con un formulario que te pida un mensaje y un número, comprobar que ese número realmente lo sea y si lo es, mediante un bucle mostrar el mensaje esa misma cantidad de números.

En un formulario tu tienes dos casillas de texto, una para un mensaje y otra para un carácter numérico, en ésta ingresas un carácter, una vez enviado el formulario comprobarás que el carácter enviado sea numérico, en caso de no ser númerico muestre un error diciendo que no es numérico, por caso contrario (si sí es numérico) muestre el mensaje ingresado "x" cantidad de veces, ejemplo:

Caso 1
Mensaje: Hola
Numero: 2
Imprime>
Hola
Hola

Caso 2
Mensaje: Hola
Numero: T
Imprime>
Error, no es un número

Saludos.
Cada vez que me das Karma me motivas

¡Perfecto!

Muchas gracias, me pongo a ello ahora mismo.

$4lu2

Perfecto, cualquier duda comentas.
Cada vez que me das Karma me motivas

Bueno, tengo hechos el 1 y el 2, pero el 3 eso del bucle como que no voy a saber hacerlo... incluso he buscado + info por Google y nada, ¿estoy suspendido? Jajajaj :P

Junio 02, 2011, 10:52:58 AM #5 Ultima modificación: Junio 02, 2011, 04:35:50 PM por Xt3mP
Código: php

<?php
if(isset($_POST['go'])): //Si se envio el formulario
$msg = $_POST['msg']; //Mensaje
$num = $_POST['num']; //Numero
  if(!is_numeric($num)): //Si no es numerico
    echo 'Error, no es numerico';
  else: //Si es numerico
    for($asdf = 0; $asdf<$num; $asdf++): //Comenzamos el bucle
      echo $asdf.' - '.$msg; //Mostramos mensaje
    endfor; //Cerramos el bucle
  endif; //Cerramos if de comparacion numerica
endif; //Cerramos if de envio de formulario
?>
<form action="" method="POST">
Mensaje: <input type="text" name="msg" /><br />
Numero: <input type="text" name="num" /><br />
<input type="submit" name="go" value="Enviar" />
</form>


La variable $asdf no tiene que tener ese nombre, comúnmente se utiliza $i así que no te confundas con eso, ese solo sería un método en un solo .php, saludos :)
Cada vez que me das Karma me motivas

Junio 02, 2011, 03:26:24 PM #6 Ultima modificación: Junio 02, 2011, 03:41:44 PM por KR0N3N
Buuff, las primeras líneas hasta el comienzo del bucle lo tenía yo bien! Y ahora qué hago si me has hecho ya el ejercicio jajaj lo hago igualmente y te lo envio tambien?

Gracias!!

EDITO: He probado tu código para tomarlo como ejemplo y no funciona, no paran de salir errores :S

No tiene ningún error más que el de endfor; pero es porque en la línea 10:

Código: php
<?php
for($asdf = 0; $asdf<$num; $asdf++)
?>


Se me olvido ponerle los dos puntos finales quedando así:

Código: php
<?php
for($asdf = 0; $asdf<$num; $asdf++):
?>


Tambien en:

Código: php
<?php
echo $asdf.' - '.$msg;
?>


Cambialo por (esto es por estética):

Código: php
<?php
echo $asdf.' - '.$msg.'<br />';
?>


Y el resultado sería:



Esto:

Código: php

<?php
for($i; $i<10; $i++)
{
//Test
}
?>


Es igual que:

Código: php

<?php
for($i; $i<10; $i++):
//Test
endfor;
?>


Pero como vez nos ahorramos una línea, saludos.
PD: Hazlo a tu manera.
Cada vez que me das Karma me motivas

Junio 02, 2011, 06:17:46 PM #8 Ultima modificación: Junio 02, 2011, 06:44:01 PM por KR0N3N
Aaaaaamigo, sabía que los dos puntos (:) y el endfor; equivalía a { y }, no sé cómo lo averigüé, pero me vino a la cabeza rápido y sin apenas saber de PHP jajaj

$4lu2!

EDITO: Hay una cosa que creo que no está explicada y no sé si lo entiendo: if(isset($_POST['go'])): //Si se envio el formulario

Eso para qué sirve? Porque es que yo eso lo entiendo como si fuera el botón SUBMIT :S para qué vale eso que determina si se ha enviado el formulario si de igual forma sin eso el botón ya se dirige al procesar.php y es lo mismo, no?? Es que no sé no lo entiendo mucho xD

Lo que pasa es que en mi código lo hago en un solo archivo y si no compruebo que se envió el formulario literalmente siempre tiraría error (error, no es numérico), entonces el isset es para saber si alguna variable, constante, etc, tiene algún valor y como sabemos, value es de valor, entonces el botón tiene de valor Enviar en este caso, con isset (como dije anteriormente) comprobamos que tenga algo ese botón para de esta manera y con lógica saber que se envió.
No necesariamente debes comprobar el botón, puedes utilizar la casilla de texto:

Código: php

<?php
if(isset($_POST['msg'])): //Si se envio el formulario
//Bla bla bla
endif; //Cerramos if de envio de formulario
?>
<form action="" method="POST">
Mensaje: <input type="text" name="msg" /><br />
<input type="submit" name="go" value="Enviar" />
</form>


En resúmen, comprobamos con isset que algun ítem del formulario tenga valor (te recomendaría siempre utilizar el del botón) ya que si no lo hacemos (y lo ponemos en un solo archivo o inclusive en diferente página) tirará algo que no queremos, ejemplo:

Código: html

<form action="test.php" method="POST">
Mensaje: <input type="text" name="msg" /><br />
<input type="submit" name="go" value="Enviar" />
</form>


Código: php

<?php
if($_POST['msg'] == 'xt3mp'):
  echo 'Es Xt3mP';
else:
  echo 'No es Xt3mP';
endif;
?>


Si tu entras por el formulario y lo envías con el valor Xt3mP (se enviará a test.php) te dirá "Es Xt3mP", pero si tu entras directamente a test.php siempre te tirará "No es Xt3mP" porque no se comprueba que se envió algo.

Esto mismo pasaria si pusieramos todo en un solo archivo .php, siempre tirará "No es Xt3mP", por eso compruebo que se haya envíado literalmente el formulario.

Es solo un ejemplo, saludos.
Cada vez que me das Karma me motivas

Ah, es que yo tengo los dos archivos por separado, el formulario.html y el procesar.php, entonces no sé si eso tengo que dejarlo o qué, aunque de momento está ahí.

Por cierto, me va gustando eso de los dos puntos (:), te ahorras unas cuantas líneas en realidad y es más cómodo jeje...

Tu script trabaja bien si entras a formulario.html y posteriormente envias los datos a procesar.php, pero que pasa si entras directamente a procesar.php? Te tirara el error ya que no se envio el formulario por lo tanto la comprobacion seria nula literalmente, por eso recomiendo comprobar que se haya enviado realmente el formulario, saludos.
Cada vez que me das Karma me motivas

Junio 03, 2011, 03:20:53 PM #12 Ultima modificación: Junio 03, 2011, 03:44:15 PM por KR0N3N
Vale, ya lo he entendido. Yo pensaba que sólo en tu caso, es decir, todo en un mismo archivo PHP, era necesario comprobar el envío, pero ya me acabas de aclarar que no es sólo en tu caso, sino también en el mío de los dos archivos por separado.

Una pregunta, ¿este código es correcto? Funcionar funciona, pero no sé yo si está bien planteado...

Código: php
<?php
// Constantes
define('const1','valorconst1');
if(defined('const1')) #Comprobamos si está definida y si lo está...
echo 'La constante <b>const1</b> está definida y su valor es <b>'.const1,'</b>.<br />';
else
echo 'La constante <b>const1</b> no está definida.<br />';
if(defined('const2'))
echo 'La constante <b>const2</b> está definida y su valor es '.const2;
else
echo 'La constante <b>const2</b> no está definida.';
?>


$4lu2

Si esta bien pero te recomendaría cerrar los if para evitar problemas de sintáxis en un futuro; simplemente es una recomendación.
Cada vez que me das Karma me motivas

El tema se ha marcado como solucionado, lo cierro.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
El tema se ha marcado como solucionado, lo cierro.

Lo siento por abrir de nuevo el tema pero si te das cuenta en este mismo tema le he resuelto varias dudas de mi taller a KR0N3N, el fue el que puso solucionado en el título del post, saludos.
Cada vez que me das Karma me motivas

Tema re-abierto a pedido del usuario para mas dudas del taller.

Sí, gracias, y aquí va la siguiente duda: ¿el ejercicio 4 hay que hacer exactamente todos los temas que se han explicado en el paper, absolutamente todos? Es que son bastantes... yo de momento llevo hechos los más importantes :o

Pues no es obligatorio que utilizes todas las del taller, pero si al menos unas cuantas para que de esta manera vayas prácticando y tu aprendizaje sea mucho mejor; saludos.
Cada vez que me das Karma me motivas