Autor Tema: [RETO] Lector de variables.  (Leído 1354 veces)

Desconectado -Pituko-

  • PHPero Experto
  • *****
  • Mensajes: 954
  • Karma: 20
  • Sexo: Masculino
  • ¡Hala Madrid!
    • Ver Perfil
[RETO] Lector de variables.
« en: 18 de Julio de 2011, 01:57:15 am »
Lector de variables.

Dificultad: Media (lo digo porque lo hice en 5 minutos pero unos me están diciendo que es algo dificil).
Se validará: Sintaxis, comentarios y tamaño del código.
Lenguaje: PHP.

Reto:
El usuario tiene que ingresar en un campo de un formulario "variable1=valor1;variable2=valor2;" y tienen que sacar el valor y el nombre de las variables y después imprimirlos como "El valor de la variable variable1 es valor1".
Eso es todo, la verdad no es mucha ciencia.

Premio: La satisfacción de haber ganado y un karma.

No se vale usar códigos ya hechos pero si se pueden ayudar de ellos (no usarlos, ayudarse) y del foro.

Tiene la aprobación de naveda y TLX.

Buena suerte.

YA HAY UN GANADOR Y ES westwest.
« Última modificación: 18 de Julio de 2011, 16:49:21 pm por -Pituko- »

Comunidad PHPeros

[RETO] Lector de variables.
« en: 18 de Julio de 2011, 01:57:15 am »

Desconectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re:[RETO] Lector de variables.
« Respuesta #1 en: 18 de Julio de 2011, 02:05:38 am »
Mucho animo a todos los que vayáis a participar ;)
Por favor, leete las Normas


Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:[RETO] Lector de variables.
« Respuesta #2 en: 18 de Julio de 2011, 02:23:05 am »

<form action="" method="post">
Introduce las variables y sus valores en formato nombre1=valor1;nombre2=valor2;...:
<
br />
La primera letra de cada variable no puede ser mayusculase reconvertirá a minuscula
<br />
<
input name="var" />
<
br />
<
input type="submit" value="Enviar" />
</
form>
<?
php // lo de arriba era un simple formulario
if($_POST[&#39;var&#39;]) { // si existe la variable que contiene el texto del input var, el formulario se envió asi que...
echo &#39;<br /><br />&#39;;
if(!preg_match(&#39;/^([a-z0-1_]+=.*(;|$))+/i&#39;, $_POST[&#39;var&#39;])) { die(&#39;Formato incorrecto&#39;); } // comprobamos que los valores se hayan introducido correctamente
$ex explode(&#39;;&#39;, $_POST[&#39;var&#39;]); // separamos cada variable de manera que cada elemento en $ex contenga nombre=valor
foreach($ex as $v) { // recorremos el array
$e explode(&#39;=&#39;, $v); // separamos cada elemento para obtener el nombre ($e[0]) y valor ($e[1])
$n strtolower(substr($e[0], 01)).substr($e[0], 1); // almacenamos el nombre en otra variable, pasando a minuscula la primera letra con strtolower() para poder hacer lo de abajo
$$n $e[1]; // creamos la variable
echo &#39;<br />El valor de la variable <b>&#39;.$n.&#39;</b> es <b>&#39;.$e[1].&#39;</b>&#39;; // mostramos el texto
}// cerramos foreach
}// cerramos if
?>


No se si estará bien, sobre todo la expresión regular ya que hace mucho que no las toco y son las 2:22 de la mañana xD

Desconectado -Pituko-

  • PHPero Experto
  • *****
  • Mensajes: 954
  • Karma: 20
  • Sexo: Masculino
  • ¡Hala Madrid!
    • Ver Perfil
Re:[RETO] Lector de variables.
« Respuesta #3 en: 18 de Julio de 2011, 02:42:48 am »

<form action="" method="post">
Introduce las variables y sus valores en formato nombre1=valor1;nombre2=valor2;...:
<
br />
La primera letra de cada variable no puede ser mayusculase reconvertirá a minuscula
<br />
<
input name="var" />
<
br />
<
input type="submit" value="Enviar" />
</
form>
<?
php // lo de arriba era un simple formulario
if($_POST[&#39;var&#39;]) { // si existe la variable que contiene el texto del input var, el formulario se envió asi que...
echo &#39;<br /><br />&#39;;
if(!preg_match(&#39;/^([a-z0-1_]+=.*(;|$))+/i&#39;, $_POST[&#39;var&#39;])) { die(&#39;Formato incorrecto&#39;); } // comprobamos que los valores se hayan introducido correctamente
$ex explode(&#39;;&#39;, $_POST[&#39;var&#39;]); // separamos cada variable de manera que cada elemento en $ex contenga nombre=valor
foreach($ex as $v) { // recorremos el array
$e explode(&#39;=&#39;, $v); // separamos cada elemento para obtener el nombre ($e[0]) y valor ($e[1])
$n strtolower(substr($e[0], 01)).substr($e[0], 1); // almacenamos el nombre en otra variable, pasando a minuscula la primera letra con strtolower() para poder hacer lo de abajo
$$n $e[1]; // creamos la variable
echo &#39;<br />El valor de la variable <b>&#39;.$n.&#39;</b> es <b>&#39;.$e[1].&#39;</b>&#39;; // mostramos el texto
}// cerramos foreach
}// cerramos if
?>


No se si estará bien, sobre todo la expresión regular ya que hace mucho que no las toco y son las 2:22 de la mañana xD
Esta bien, solo uno que otro error, la prueba lo hice con google=buscador;phperos=foro;.
Todavía no se te puede declarar ganador porque alguien puede mejorar los pormenores o hacerlo mas pequeño, así que a esperar.
No me pareció eso de las mayúsculas y minúsculas, se me hizo innecesario, pero lo de la expresión regular esta bastante bien y te digo que no se me había ocurrido.
http://img30.imageshack.us/img30/5295/16711509.png

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:[RETO] Lector de variables.
« Respuesta #4 en: 18 de Julio de 2011, 04:01:23 am »
Esta bien, solo uno que otro error, la prueba lo hice con google=buscador;phperos=foro;.
Todavía no se te puede declarar ganador porque alguien puede mejorar los pormenores o hacerlo mas pequeño, así que a esperar.
No me pareció eso de las mayúsculas y minúsculas, se me hizo innecesario, pero lo de la expresión regular esta bastante bien y te digo que no se me había ocurrido.
http://img30.imageshack.us/img30/5295/16711509.png
No conté con eso, supongo que bastaría con usar esto:
[php]
<form action="" method="post">
Introduce las variables y sus valores en formato nombre1=valor1;nombre2=valor2;...:
<br />
La primera letra de cada variable no puede ser mayuscula, se reconvertirá a minuscula
<br />
<input name="var" />
<br />
<input type="submit" value="Enviar" />
</form>
<?php // lo de arriba era un simple formulario
if($_POST['var']) { // si existe la variable que contiene el texto del input var, el formulario se envió asi que...
echo '<br /><br />';
if(!preg_match('/^([a-z0-1_]+=.*(;|$))+/i', $_POST['var'])) { die('Formato incorrecto'); } // comprobamos que los valores se hayan introducido correctamente
$ex = explode(';', $_POST['var']); // separamos cada variable de manera que cada elemento en $ex contenga nombre=valor
foreach($ex as $v) { // recorremos el array
if(empty($v)){continue;} // si el valor está en blanco, saltamos al siguiente
$e = explode('=', $v); // separamos cada elemento para obtener el nombre ($e[0]) y valor ($e[1])
$n = strtolower(substr($e[0], 0, 1)).substr($e[0], 1); // almacenamos el nombre en otra variable, pasando a minuscula la primera letra con strtolower() para poder hacer lo de abajo
$$n = $e[1]; // creamos la variable
echo '<br />El valor de la variable <b>'.$n.'</b> es <b>'.$e[1].'</b>'; // mostramos el texto
}// cerramos foreach
}// cerramos if
?>

Desconectado -Pituko-

  • PHPero Experto
  • *****
  • Mensajes: 954
  • Karma: 20
  • Sexo: Masculino
  • ¡Hala Madrid!
    • Ver Perfil
Re:[RETO] Lector de variables.
« Respuesta #5 en: 18 de Julio de 2011, 16:47:00 pm »
No conté con eso, supongo que bastaría con usar esto:

<form action="" method="post">
Introduce las variables y sus valores en formato nombre1=valor1;nombre2=valor2;...:
<
br />
La primera letra de cada variable no puede ser mayusculase reconvertirá a minuscula
<br />
<
input name="var" />
<
br />
<
input type="submit" value="Enviar" />
</
form>
<?
php // lo de arriba era un simple formulario
if($_POST[&#39;var&#39;]) { // si existe la variable que contiene el texto del input var, el formulario se envió asi que...
echo &#39;<br /><br />&#39;;
if(!preg_match(&#39;/^([a-z0-1_]+=.*(;|$))+/i&#39;, $_POST[&#39;var&#39;])) { die(&#39;Formato incorrecto&#39;); } // comprobamos que los valores se hayan introducido correctamente
$ex explode(&#39;;&#39;, $_POST[&#39;var&#39;]); // separamos cada variable de manera que cada elemento en $ex contenga nombre=valor
foreach($ex as $v) { // recorremos el array
if(empty($v)){continue;} // si el valor está en blanco, saltamos al siguiente
$e explode(&#39;=&#39;, $v); // separamos cada elemento para obtener el nombre ($e[0]) y valor ($e[1])
$n strtolower(substr($e[0], 01)).substr($e[0], 1); // almacenamos el nombre en otra variable, pasando a minuscula la primera letra con strtolower() para poder hacer lo de abajo
$$n $e[1]; // creamos la variable
echo &#39;<br />El valor de la variable <b>&#39;.$n.&#39;</b> es <b>&#39;.$e[1].&#39;</b>&#39;; // mostramos el texto
}// cerramos foreach
}// cerramos if
?>

Excelente y como nadie participó (ni quiere participar), te doy tu karma y te pido naveda que cierres el post.

Este es mi código:
Código: [Seleccionar]
Introduce en el campo las variables en formato <b>variable1=valor1;variable2=valor2;</b>:
<form method="post" action="">
<input name="vars" /><br />
<input type="submit" name="send" value="Mostrar" />
</form>
<br /><br />
<?php
if(isset(
$_POST[&#39;send&#39;])) {//Si ha enviado el formulario//
if(empty($_POST[&#39;vars&#39;])) //Si el formulario esta vacío//
die(&#39;No rellenaste el formulario&#39;); //Mensaje de Error//
else { //Si no esta vacío el formulario//
$dato $_POST[&#39;vars&#39;]; //Para mayor comodidad, le asignamos a la variable $dato el valor de $_POST[&#39;vars&#39;]//
$lector1 explode(";"$dato); //dividimos la variable $dato en cuantas partes se pueda a partir de ";"//
foreach($lector1 as $ex) { //recorremos el array generado por explode//
$v explode("="$ex); //dividimos la variable $explodes en 2 a partir de "="//
echo ($v[0] and $v[1] != "")? "El valor de la variable <b>".$v[0]."</b> es <b>".$v[1]."</b><br />\n"""//Mostramos los valores//
//Cerramos foreach//
//Cerramos segundo if//
//Cerramos primer if//
?>


Solo le faltarían tus expresiones regulares y estaría perfecto XD.
« Última modificación: 18 de Julio de 2011, 16:50:04 pm por -Pituko- »