Foros del Web » Programando para Internet » PHP »

Cortar n Cadenas en 2 con un patron comùn

Estas en el tema de Cortar n Cadenas en 2 con un patron comùn en el foro de PHP en Foros del Web. Amigos Manoloweb, y LeonardoP, realmente lo de las expresiones regulares todavia me queda muy grande. Tengo esta necesidad, ("resuelta", pero no creo que sea la ...
  #1 (permalink)  
Antiguo 28/08/2003, 20:09
Usuario baneado!
 
Fecha de Ingreso: diciembre-2002
Ubicación: En mi chozita
Mensajes: 142
Antigüedad: 15 años
Puntos: 0
Cortar n Cadenas en 2 con un patron comùn

Amigos Manoloweb, y LeonardoP, realmente lo de las expresiones regulares todavia me queda muy grande.

Tengo esta necesidad, ("resuelta", pero no creo que sea la forma idonea de hacerlo), donde quisiera que la variable $todas pudiese tener utilidad, es decir, ...nuevamente decirle a php:

$todas = funcionX($todas);

Quizas la solucion sea nuevamente, (para sorpresa de quienes no conocemos el PHP), CREAR la funcion, o quizas sea una funcion que yo no he podido hallar.

Aunque creo que el "script" creado dice por si solo lo que pretendo que haga,
lo aclaro para no hacerles perder mucho más tiempo del REALMENTE requerido:

Cortar una cadena en 2 partes:

$a = "En foros del web encuentras a Manoloweb y LeonardoP. [Tambien a Razacala con sus preguntas de aprendiz]";

Como hacer para que cualquier cadena con cualquier contenido tipo:

"bla bla bla, [más bla, bla, bla]"

quede dividida en lo que hay afuera de [] y lo que hay adentro de []

Nota: La idea es poder hacerlo de manera funcional sobre 50 cadenas de una sola vez.

*************************************************
Código PHP:
<TABLE BGCOLOR=AABBCC><TR>
<?php

$a 
"Para poder                Esta seria la opcion: Elegida AA [01]";
$b "imprimir el contenido        Esta seria la opcion: Elegida BB [02]";
$c "de [ ] esteticamente    Esta seria la opcion: Elegida CC [03]";
$d "en celdas individuales        Esta seria la opcion: Elegida DD [04]";

/* $todas = "$a$b$c$d";     Sera que esta variable tiene utilidad?

como veran logre cortar las cadenas utilizando 2 funciones SOBRE CADA UNA, y creo que no debe ser asi, por que aqui solo son 4 cadenas, pero si tenemos 40? */

$a1 explode("[",$a);    // Toma solo el valor hasta [
$a2 strstr($a,"[");    // Toma solo el valor desde [
$b1 explode("[",$b);    // Toma solo el valor hasta [
$b2 strstr($b,"[");    // Toma solo el valor desde [
$c1 explode("[",$c);    // Toma solo el valor hasta [
$c2 strstr($c,"[");    // Toma solo el valor desde [
$d1 explode("[",$d);    // Toma solo el valor hasta [
$d2 strstr($d,"[");    // Toma solo el valor desde [

echo "<TD align=center>Opcion elegida<BR></TD><TD align=center>Valor</TD></TR><TR>";
echo 
"<TD>$a1[0]<BR></TD><TD>$a2</TD></TR><TR>";
echo 
"<TD>$b1[0]<BR></TD><TD>$b2</TD></TR><TR>";
echo 
"<TD>$c1[0]<BR></TD><TD>$c2</TD></TR><TR>";
echo 
"<TD>$d1[0]<BR></TD><TD>$d2</TD></TR><TR>";
?>

</TABLE>
 Sin que importe la extension de lo que halla entre los [ ]

<br><br><br><br>

Como por ejemplo:
<TABLE BGCOLOR=PERU><TR>

<?php

$a 
"Para poderlas    Esta seria la opcion: AA [06546541]";
$b "imprimir        Esta seria la opcion: BB [025454]";
$c "esteticamente    Esta seria la opcion: CC [0343]";
$d "en tablas        Esta seria la opcion: DD [O incluso texto extenso, o no extenso]";

$todas "$a$b$c$d";    // Sera que esta variable tiene utilidad?

$a1 explode("[",$a);    // Toma solo el valor hasta [
$a2 strstr($a,"[");    // Toma solo el valor desde [
$b1 explode("[",$b);    // Toma solo el valor hasta [
$b2 strstr($b,"[");    // Toma solo el valor desde [
$c1 explode("[",$c);    // Toma solo el valor hasta [
$c2 strstr($c,"[");    // Toma solo el valor desde [
$d1 explode("[",$d);    // Toma solo el valor hasta [
$d2 strstr($d,"[");    // Toma solo el valor desde [

echo "<TD align=center>Opcion elegida<BR></TD><TD align=center>Valor</TD></TR><TR>";
echo 
"<TD>$a1[0]<BR></TD><TD>$a2</TD></TR><TR>";
echo 
"<TD>$b1[0]<BR></TD><TD>$b2</TD></TR><TR>";
echo 
"<TD>$c1[0]<BR></TD><TD>$c2</TD></TR><TR>";
echo 
"<TD>$d1[0]<BR></TD><TD>$d2</TD></TR><TR>";
?>
</TABLE>
Ya saben: $G
  #2 (permalink)  
Antiguo 30/08/2003, 01:50
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 14 años, 4 meses
Puntos: 1
Hola,

Bueno, la verdad es que tengo que confesar que no me queda muy claro lo que buscas realmente. No entiendo realmente lo que tienes en mente respecto a la variable $todas, y no se muy bien de qué hablas cuando te refieres a la `funcionX()'.

En fin, ya que me has pedido el favor de ayudarte con esto, me atreveré a presentar un pequeño ejemplo que produce la misma salida que el segmento de código que has publicado, con la diferencia de que el siguiente script hace uso de una pequeña expresión regular para extraer los fragmentos de cadena que pareces necesitar.

Quizás te sea de ayuda. Si no es así, y estás buscando otro tipo de cosas, por favor coméntalo, de modo que podamos ir buscando la solución que realmente necesitas.

Código:
<table bgcolor="#aabbcc">
 <tr>
  <td align="center">Opcion elegida</td>
  <td align=center>Valor</td>
 </tr>

<?php

$cadenas = array (
    'Para poder                Esta seria la opcion: Elegida AA [01]',
    'imprimir el contenido        Esta seria la opcion: Elegida BB [02]',
    'de [ ] esteticamente    Esta seria la opcion: Elegida CC [03]',
    'en celdas individuales        Esta seria la opcion: Elegida DD [04]');

foreach ($cadenas as $cadena) {
    preg_match ('/^(.*)(\\[.*)$/', $cadena, $coincidencias);

    list ($no_usado, $cadena1, $cadena2) = $coincidencias;
    echo " <tr>\n  <td>$cadena1</td><td>$cadena2</td>\n </tr>\n";
}

?>

</table>

<p>Sin que importe la extension de lo que halla entre los [ ]</p>
<p>Como por ejemplo:</p>

<table bgcolor="#cd8539">
 <tr>
  <td align="center">Opcion elegida</td>
  <td align=center>Valor</td>
 </tr>

<?php

$cadenas = array (
    'Para poderlas    Esta seria la opcion: AA [06546541]',
    'imprimir        Esta seria la opcion: BB [025454]',
    'esteticamente    Esta seria la opcion: CC [0343]',
    'en tablas        Esta seria la opcion: DD ' .
    '[O incluso texto extenso, o no extenso]');

foreach ($cadenas as $cadena) {
    preg_match ('/^(.*)(\\[.*)$/', $cadena, $coincidencias);

    list ($no_usado, $cadena1, $cadena2) = $coincidencias;
    echo " <tr>\n  <td>$cadena1</td><td>$cadena2</td>\n </tr>\n";
}

?>

</table>
Un cordial saludo.
  #3 (permalink)  
Antiguo 30/08/2003, 08:15
Usuario baneado!
 
Fecha de Ingreso: diciembre-2002
Ubicación: En mi chozita
Mensajes: 142
Antigüedad: 15 años
Puntos: 0
Gratisimas Leonardo

Muchas gracias por tomarte la molestia de colaborarme, en efecto creo que mi POST demuestra lo bobisimo que aun soy en el PHP, al no haber utilizado el LIST, ni el FOREACH.

Parece ser que olvide algo importantisisisisimo:

LOS DATOS VIENEN POR UN FORM.HTM, el cual tendria varios <SELECT>, (n <SELECT> = n cadenas)

Claro que has comprendido lo que quiero hacer!, de hecho hiciste el script, pero la idea es hacerlo tomando los datos que vienen por un FORM.HTM, por ejemplo:

Código PHP:
<FORM ACTION=index.php METHOD=POST>
      <select name="Regalo" size="1">
        <option selected value="No seleccionaste regalo">Selecciona un regalo:</option>
        <option value="Un cuaderno [Y un lapiz]">Un cuaderno [Y un lapiz]</option>
        <option value="Un cuaderno [Y un borrador]">Un cuaderno [Y un borrador]</option>
        <option value="Un cuaderno [Y un mapa]">Un cuaderno [Y un mapa]</option>
        <option value="Un cuaderno [Y un libro]">Un cuaderno [Y un libro]</option>
        <option value="Un cuaderno [Y dos frutas]">Un cuaderno [Y dos frutas]</option>
      </select>
<INPUT TYPE=SUBMIT VALUE=ENVIAR></FORM>
<TABLE BGCOLOR=AABBCC><TR>
<?php

echo "<TD>Elegiste:<BR>$Regalo<BR>Pero mi idea es poder hacer esto:</TD></TR><TR><TD ALIGN=CENTER>Elegiste:</TD><TD ALIGN=CENTER>Y te regalaremos:</TD></TR><TR>";

$Regalo1 explode("[",$Regalo);    // Toma solo el valor hasta [
$Regalo2 strstr($Regalo,"[");    // Toma solo el valor desde [
echo "<TD>$Regalo1[0]</TD><TD>$Regalo2</TD></TR></TABLE><TABLE BGCOLOR=PERU><TR>";
?>

Pero ahora imagina que tenemos:

<select name="Regalo1"
<select name="Regalo2"
<select name="Regalo3"
<select name="Regalo4"
<select name="Regalo5"

Y cada uno de ellos contiene valores diferentes de la forma:

<option value="Parte1AA [Parte2AA]">Parte1AA [Parte2AA]</option>
<option value="Parte1BB [Parte2BB]">Parte1BB [Parte2BB]</option>
<option value="Parte1CC [Parte2CC]">Parte1CC [Parte2CC]</option>

Pos eso el titulo es "n cadenas", por que la idea es poder utilizar indefinido # de <SELECT>, bien sean 5, o 10; 1 o 50.

Gratisimas por la ayuda Leonardo, oye, por cierto, estas en Mexico o en españa?
  #4 (permalink)  
Antiguo 30/08/2003, 20:26
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 14 años, 4 meses
Puntos: 1
Hola nuevamente,

Cita:
en efecto creo que mi POST demuestra lo bobisimo que aun soy en el PHP, al no haber utilizado el LIST, ni el FOREACH
Realmente no creo que ese tipo de cosas sean señales de que seas "bobisimo". En la programación, es muy común que diferentes personas lleguen a diferentes soluciones de un mismo problema. Y si alguna implementación particular no se te ha ocurrido, y piensas que debiste haberla pensado antes, es más una señal de que quizás necesitas un poco más de práctica; no tienes de qué preocuparte, ya verás cómo con el tiempo las respuestas van "fluyendo" de forma natural y te sentirás mucho más cómodo y familiarizado con la sintaxis de los lenguajes de programación que uses.


Respecto al problema, aquí te presento una variación del segmento de código, que en esta ocasión procesa datos recibidos mediante el método HTTP POST. Nota que hay una matriz ($campos) que es declarada con los nombres de los campos que serán procesados por el script. En el ejemplo se encuentran dos campos, pero podrían ser más.

Código:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

<select name="Regalo1" size="1">
<option selected value="No seleccionaste regalo">
Selecciona un regalo:</option>
<option value="Un cuaderno [Y un lapiz]">
Un cuaderno [Y un lapiz]</option>
<option value="Un cuaderno [Y un borrador]">
Un cuaderno [Y un borrador]</option>
<option value="Un cuaderno [Y un mapa]">
Un cuaderno [Y un mapa]</option>
<option value="Un cuaderno [Y un libro]">
Un cuaderno [Y un libro]</option>
<option value="Un cuaderno [Y dos frutas]">
Un cuaderno [Y dos frutas]</option>
</select>

<br />

<select name="Regalo2" size="1">
<option selected value="No seleccionaste regalo">
Selecciona un regalo:</option>
<option value="Parte1AA [Parte2AA]">Parte1AA [Parte2AA]</option>
<option value="Parte1BB [Parte2BB]">Parte1BB [Parte2BB]</option>
<option value="Parte1CC [Parte2CC]">Parte1CC [Parte2CC]</option>
</select>

<br />

<input type="submit" value="Enviar" />
</form>



<?php

// Campos a ser procesados.
$campos = array ('Regalo1', 'Regalo2');


foreach ($campos as $campo) {
    if (! isset ($_POST[$campo])) {
        echo "<p>El campo $campo no esta definido</p>\n";
        continue;
    }

    preg_match ('/^(.*)(\\[.*)$/', $_POST[$campo], $coincidencias);

    list ($no_usado, $cadena1, $cadena2) = $coincidencias;

    echo <<<FIN_SALIDA
<table bgcolor="#AABBCC">
 <tr>
  <td align="center">Elegiste:</td>
  <td align="center">Y te regalaremos:</td>
 </tr>
 <tr>
  <td>$cadena1</td>
  <td>$cadena2</td>
 </tr>
</table>
<br />
FIN_SALIDA;

}

?>
Quizás te pueda resultar útil en aquello que estás desarrollando.


Cita:
por cierto, estas en Mexico o en españa?
En Colombia.


Saludos.
  #5 (permalink)  
Antiguo 31/08/2003, 16:10
Usuario baneado!
 
Fecha de Ingreso: diciembre-2002
Ubicación: En mi chozita
Mensajes: 142
Antigüedad: 15 años
Puntos: 0
Al colocar el titulo caigo en cuenta:mSe puede hacer un list (campo 1,2, y 3) ?

Que bueazo que seas "Kmarada", en que ciudad naciste?, Cali, Medellin, Bucaramanga, Bogota?... La costa?...

Ahora donde vives Leonardo?, yo, en Medellin.

Bueno, mira:

Con todo respeto, creo que no tomaste en cuenta la opcion de que la persona deje algun campo sin elegir, pues para no saturar la pantalla colocamos solo 1 0 2 <SELECT, pero en algun momento podria ser necesario utilizar 20 o 30, y la persona no los elegira to2.

Es muy valioso tu tiempo, y has dedicado un poco a mi problema. GRACIAS.

Intentare ser más detallado:

Yo modifique un script que imprime "esteticamente y de forma "automatica" una tabla con 2 columnas: la columna n Variables y la columna n Valores.

Pero cuando intento hacerla ESTETICA, ya no me queda más que pedir la yuda de ustedes, por que no se como cortar "n valores" en la forma que he comentado.
Código PHP:
<?php
echo"<table><tr><td colspan=2 ALIGN=CENTER>Estos son los datos:</TD>";
while (list (
$Variable$Valor) = each ($HTTP_POST_VARS)) {
$Valor ereg_replace("\n","<BR>",$Valor);
    echo 
"</TR><TR><TD ALIGN=RIGHT VALIGN=TOP><P CLASS=D><B>$Variable:</B></TD><TD ALIGN=LEFT><P CLASS=N>$Valor</TD>";
}
?>
</TR></TABLE>
Ahora, si existiera la "funcionX", o si pudiera acoplar tu script al script que yo acondicione simplemente imagina la versatilidad en la impresion de los datos!.

Es muy claro que si los valores no estuvieran de la forma: "bla bla [ blo blo ]" la tabla quedaria "bonita", pero para lo que estoy haciendo los valores deben estar asi:

Código PHP:
<?php
echo"<table><tr><td colspan=2 ALIGN=CENTER>Estos son los datos:</TD>";
while (list (
$Variable$Valor) = each ($HTTP_POST_VARS)) {
    
$Valor ereg_replace("\n","<BR>",$Valor);

    
$Valor ereg_replace("\n","<BR>",$Valor);

        echo 
"</TR><TR><TD ALIGN=RIGHT VALIGN=TOP><P CLASS=D><B>$Variable:</B></TD><TD ALIGN=LEFT><P CLASS=N>$Valor</TD>";
}
?>
</TR></TABLE>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<select name="Planeta" size="1">
<option selected value="No seleccionaste Planeta">Selecciona un planeta:</option>
<option value="Saturno [ Sabado ]">Saturno [ Sabado ]</option>
<option value="Venus [ Viernes ]">Venus [ Viernes ]</option>
<option value="Jupiter [ Jueves ]">Jupiter [ Jueves ]</option>
</select>

<select name="Numero" size="1">
<option selected value="No seleccionaste Numero">Selecciona un numero:</option>
<option value="1 [ Domingo ]">1 [ Domingo ]</option>
<option value="2 [ Lunes ]">2 [ Lunes ]</option>
<option value="3 [ Miercoles ]">3 [ Miercoles ]</option>
</select>
<TEXTAREA COLS=14 ROWS=4 NAME=Comentario></TEXTAREA>
<input type="submit" value="Enviar" />
</form>
Por eso amigo y profesor Leonardo, comento lo de n Cadenas, ya que como puedes ver he agregado el campo "Comentario", y hasta el moemnto todo ha ido bien, pero al llegar a los campos <SELECT y sus valores

"bla bla [ blo blo ]" todas las tablas se debaratan de estetik.

Más aún, la idea es colocar botones de radio, etc.

Te agradecere mucho si me das un chance más de lograr mi proposito con tu ayuda.

Hoy Domingo con el script que me obsequiaste he cacharreado largo rato, pero no logro el asunto.

Puedes ver que sí se puede aplicar una funcion a $Valor "durante" el while, por jemplo le aplico: ereg_replace()

De la misma manera quisiera aplicarle una funcion a $Valor que permita la impresion de la tabla con 3 <TD>.

El primer <TD> contiene el nombre de la Variable.
El segundo <TD> contiene la primera parte de la Variable.
El tercer <TD> contiene la segunda parte de la Variable, es decir, la que este encerrada entre [ y ].

La verdad es que me dio la impresion que seria más claro como lo expuse desde el principio del POST.

Por favor, disculpen mi error de no ser claro.
Por favor, diganme si acaso este es otro "chicharron".

Comprendo que el corazon del script de Leonardo esta aqui:

foreach ($campos as $campo) {
if (! isset ($_POST[$campo])) {
echo "<p>El campo $campo no esta definido</p>\n";
continue;
}
preg_match ('/^(.*)(\\[.*)$/', $_POST[$campo], $coincidencias);
list ($no_usado, $cadena1, $cadena2) = $coincidencias;

Y que de él, el "procesador" es este:

preg_match ('/^(.*)(\\[.*)$/', $_POST[$campo], $coincidencias);

Pero no supe como hacer con él algo parecido a:

$Valor = dividir $Valor en $cadena1 y $cadena2, siendo $cadena2 el contenido de lo que halla entre [ y ]

Siendo finalmente convertida la lista en 3 campos:

$variable, $cadena1, y $cadena2

Y pudiendo entonces imprimir de manera extremadamente funcional los datos asi:

echo "<TD>$variable</TD><TD>$cadena1</TD><TD>$cadena2</TD>

Gracias por por todo, en especial por su paciencia.
  #6 (permalink)  
Antiguo 01/09/2003, 00:21
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 14 años, 4 meses
Puntos: 1
Cita:
en que ciudad naciste?, Cali, Medellin, Bucaramanga, Bogota?... La costa?...

Ahora donde vives Leonardo?
Nací y vivo en Bogotá.


Respecto al problema, voy a tener que disculparme por mi pobre capacidad de síntesis frente a tu enunciado. Hay partes de tu explicación que entiendo perfectamente, pero así mismo hay otras que simplemente me confunden.

Sin embargo, nuestro propósito es colaborar; no importa mucho si vamos construyendo la solución paso a paso, siempre y cuando las cosas queden claras en últimas.

Así que, en base a la interpretación que le doy a tu problema, la siguiente es una modificación que se me ha ocurrido para el script.


Código:
<table>
 <tr>
  <td colspan="3" align="center">Estos son los datos:</td>
 </tr>


<?php

while ((list ($var, $val) = each ($_POST))) {
    $var = htmlspecialchars ($var);

    if (preg_match ('/^(.*)\\[(.*)\\]/', $val, $coincidencias)) {
        $cadena1 = nl2br (htmlspecialchars ($coincidencias[1]));
        $cadena2 = nl2br (htmlspecialchars ($coincidencias[2]));
    } else {
        $cadena1 = nl2br (htmlspecialchars ($val));
        $cadena2 = '';
    }

    echo <<<FIN
 <tr>
  <td>$var</td>
  <td>$cadena1</td>
  <td>$cadena2</td>
 </tr>
FIN;
}

?>

</table>

<br /><hr /><br />

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

<select name="Planeta" size="1">
<option selected value="No seleccionaste Planeta">
Selecciona un planeta:</option>
<option value="Saturno [ Sabado ]">Saturno [ Sabado ]</option>
<option value="Venus [ Viernes ]">Venus [ Viernes ]</option>
<option value="Jupiter [ Jueves ]">Jupiter [ Jueves ]</option>
</select>

<br />

<select name="Numero" size="1">
<option selected value="No seleccionaste Numero">Selecciona un numero:</option>
<option value="1 [ Domingo ]">1 [ Domingo ]</option>
<option value="2 [ Lunes ]">2 [ Lunes ]</option>
<option value="3 [ Miercoles ]">3 [ Miercoles ]</option>
</select>

<br />

<textarea cols="14" rows="4" name="Comentario"></textarea>

<br />

<input type="submit" value="Enviar" />

</form>

¿Nos hemos acercado un poco más? :)


Saludos
  #7 (permalink)  
Antiguo 01/09/2003, 20:51
Usuario baneado!
 
Fecha de Ingreso: diciembre-2002
Ubicación: En mi chozita
Mensajes: 142
Antigüedad: 15 años
Puntos: 0
Un chicharron

Es exactamente de lo que he hablado desde el principio!.

Te haz acercado 100%, por que si no te has acercado + es por que yo no he detallado.

$G, : )

Solo hay un unico "chicharron":

Desde que hice el post me parecio que la solucion al chicharron era ELEGIR a cuales campos imprimir y a cuales no creando la variable:

$todas = "$a$b$c$d"; // Variables seleccionadas

En el caso actual:

$todas = "$Planeta$Numero$Comentario y "$n cadenas seleccionadas" ";

POR QUE CHICHARRON?

Pos por que hay unos campos tipo HIDDEN que no deben ser impresos, sino que deben continuar OCULTOS.

NOTA:
************************************
Le quite esto a $var por que las variables no van a contener cosas "dañinas...", ni saltos de linea.

Con absoluto respeto a tu impecable script para hacer en 8 lineas el corte a ncadenas,

(yo lo estava haciendo en 3 lineas por cada variable, es decir que ncadenas = 3nvariables... Uff!, una locura!)

retire las funciones nl2br y htmlspecialchars (); por que algunas variables contendran por ejemplo:
<LI>Valor, <td>valor, etc...

Ya lo veras por que, (tal como lo he pensado desde que enviaste la primer desinteresada respuesta que me diste), te hare llegar mi humilde script para que te rias un poquito... Y para que... (Quizas), le des uso.

******************************

Es decir: no debiera salir ese chicharron, y aunque hoy Lunes intente hacer:

$todas = "$Planeta$Numero$Comentario";

No logre que me funcionara, pero mira cuánto me haz hecho avanzar en el proyecto "nCadenas / 2" !!

*************************

<table><tr><td colspan="3" align="center">Estos son los datos:</td></tr>
<?php

while ((list ($var, $val) = each ($_POST))) {
if (preg_match ('/^(.*)\\[(.*)\\]/', $val, $coincidencias)) {
$cadena1 = $coincidencias[1];
$cadena2 = $coincidencias[2];
} else {
$cadena1 = $val;
$cadena2 = '';
}
$cadena1 = ereg_replace("\n","<BR>",$cadena1);
echo <<<FIN
<tr>
<td BGCOLOR=AABBCC VALIGN=TOP ALIGN=RIGHT>$var:</td>
<td BGCOLOR=FFD098 VALIGN=TOP>$cadena1</td>
<td BGCOLOR=FFB878 VALIGN=TOP>$cadena2</td>
FIN;
}

?>
<TD>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<textarea cols="14" rows="4" name="Comentario"></textarea>
<select name="Planeta" size="1">
<option selected value="Planeta: No">
Selecciona un planeta:</option>
<option value="Saturno [ Sabado ]">Saturno [ Sabado ]</option>
<option value="Venus [ Viernes ]">Venus [ Viernes ]</option>
<option value="Jupiter [ Jueves ]">Jupiter [ Jueves ]</option>
</select>
<INPUT TYPE=HIDDEN NAME=CHICHARRON VALUE="Esto debe verse?: NO">
<select name="Numero" size="1">
<option selected value="Numero: No">Selecciona un numero:</option>
<option value="1 [ Domingo ]">1 [ Domingo ]</option>
<option value="2 [ Lunes ]">2 [ Lunes ]</option>
<option value="3 [ Miercoles ]">3 [ Miercoles ]</option>
</select>
</TD></TR></TABLE></TD></TR></TABLE>
<input type="submit" value="Enviar"></form>

****************************

Que agrabale tu ayuda.

Raza de aca!
  #8 (permalink)  
Antiguo 01/09/2003, 23:11
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 14 años, 4 meses
Puntos: 1
Cita:
Desde que hice el post me parecio que la solucion al chicharron era ELEGIR a cuales campos imprimir y a cuales no
Sí, creo haber entendido este punto desde un comienzo. Por eso en un mensaje anterior te comenté:

(..) Nota que hay una matriz ($campos) que es declarada con los nombres de los campos que serán procesados por el script. En el ejemplo se encuentran dos campos, pero podrían ser más.


La idea de esa variable (la matriz $campos) es precisamente que se pueda elegir cuáles campos mostrar.

Veamos una modificación más del script, teniendo en cuenta este modelo de elección nuevamente:

Código:
<table>
 <tr>
  <td colspan="3" align="center">Estos son los datos:</td>
 </tr>

<?php

// Definimos explicitamente los campos que van a mostrarse
$campos = array ('Comentario', 'Planeta', 'Numero');


foreach ($campos as $var) {
    $val = $_POST[$var];

    if (preg_match ('/^(.*)\\[(.*)\\]/', $val, $coincidencias)) {
        $cadena1 = $coincidencias[1];
        $cadena2 = $coincidencias[2];
    } else {
        $cadena1 = $val;
        $cadena2 = '';
    }

    $cadena1 = ereg_replace("\n", "<BR>", $cadena1);

    echo <<<FIN
 <tr>
  <td bgcolor="#AABBCC" valign="top" align="right">$var:</td>
  <td bgcolor="#FFD098" valign="top">$cadena1</td>
  <td bgcolor="#FFB878" valign="top">$cadena2</td>
 </tr>
FIN;
}

?>

</table>


<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

<textarea cols="14" rows="4" name="Comentario"></textarea>

<select name="Planeta" size="1">
<option selected value="Planeta: No">
Selecciona un planeta:</option>
<option value="Saturno [ Sabado ]">Saturno [ Sabado ]</option>
<option value="Venus [ Viernes ]">Venus [ Viernes ]</option>
<option value="Jupiter [ Jueves ]">Jupiter [ Jueves ]</option>
</select>

<input type="hidden" name="CHICHARRON" value="Esto debe verse?: NO" />

<select name="Numero" size="1">
<option selected value="Numero: No">Selecciona un numero:</option>
<option value="1 [ Domingo ]">1 [ Domingo ]</option>
<option value="2 [ Lunes ]">2 [ Lunes ]</option>
<option value="3 [ Miercoles ]">3 [ Miercoles ]</option>
</select>

<input type="submit" value="Enviar" />
</form>

En este caso, como existen tres campos que deben ser mostrados, contra uno solo que debe permanecer escondido, quizás sería más cómodo definir mejor aquellos campos que deben excluirse, en cuyo caso la lógica del ciclo se modificaría ligeramente. Por ejemplo:

Código:
// Definimos explicitamente los campos que _no_ deben mostrarse
$campos_a_excluir = array ('CHICHARRON');


while ((list ($var, $val) = each ($_POST))) {
    if (in_array ($var, $campos_a_excluir))
        continue;

    if (preg_match ('/^(.*)\\[(.*)\\]/', $val, $coincidencias)) {
        $cadena1 = $coincidencias[1];
        $cadena2 = $coincidencias[2];
    } else {
        $cadena1 = $val;
        $cadena2 = '';
    }

    $cadena1 = ereg_replace("\n", "<BR>", $cadena1);

    echo <<<FIN
 <tr>
  <td bgcolor="#AABBCC" valign="top" align="right">$var:</td>
  <td bgcolor="#FFD098" valign="top">$cadena1</td>
  <td bgcolor="#FFB878" valign="top">$cadena2</td>
 </tr>
FIN;
}

Saludos
  #9 (permalink)  
Antiguo 02/09/2003, 14:47
Usuario baneado!
 
Fecha de Ingreso: diciembre-2002
Ubicación: En mi chozita
Mensajes: 142
Antigüedad: 15 años
Puntos: 0
Es necesario $todas

No Leonardo, realmente me disculpo con usted por ser tan canson, pero es que aunque lo intento no logro hacerlo.

Usted con todo el camello que debe de tener...

Perdoname hombre por molestar tanto, yo creo que con esta respuesta si terminas con el chicharron, ( Es decir: YO )

No quiero abusar de la mano de ayuda que me has brindado, pero no hallo escapatoria.

Mira:

La parte 1 de "prosesador.php" ya esta gracias al script que me diste hoy Martes.

Pero prosesador.php imprime 2 partes; y para la segunda definitivamente es necesario que la variable $todas pueda ser utilizada, (Esa variable se declara en otra pagina.php, y es la suma de otras variables, cada una de ellas del tipo:

"blabla [bloblo]")

Por que el usuario tiene la posibilidad de sumar ncampos elegi2 por el mismo, y luego, poder sumar +, y +, y +...

La primera parte en efecto se puede arregal con:
while ((list ($var, $val) = each ($_POST))) {

Pero la segunda exige dar uso a $todas.

Asi que otra vez me estanque con esto:

<TABLE>
<?php
$a = "Para poderlas Esta seria la opcion: AA [06546541]";
$b = "imprimir Esta seria la opcion: BB [025454]";
$c = "esteticamente Esta seria la opcion: CC [0343]";
$d = "en tablas Esta seria la opcion: DD [O incluso texto extenso, o no extenso]";
$e = "Para poderlas Esta seria la opcion: AA [06546541]";
$f = "imprimir Esta seria la opcion: BB [025454]";
$g = "esteticamente Esta seria la opcion: CC [0343]";
$h = "en tablas Esta seria la opcion: DD [O incluso texto extenso, o no extenso]";

// $todas = "$a$b$c$d$e$f$g$h";

$cadenas = array ("$a$b$c$d$e$f$g$h");

// En $cadenas no se pueden sumar variables, alli se tiene que colocar la variable $todas:
// Es decir, se requiere que se pueda hacer asi:
// $cadenas = array ($todas);

foreach ($cadenas as $cadena) {
preg_match ('/^(.*)(\\[.*)$/', $cadena, $coincidencias);

list ($no_usado, $cadena1, $cadena2) = $coincidencias;
echo " <tr>\n <td BGCOLOR=AABBCC>$cadena1</td><td>$cadena2</td>\n </tr>\n";
}
?>

Última edición por RAZACALA; 02/09/2003 a las 14:52
  #10 (permalink)  
Antiguo 02/09/2003, 15:17
Usuario baneado!
 
Fecha de Ingreso: diciembre-2002
Ubicación: En mi chozita
Mensajes: 142
Antigüedad: 15 años
Puntos: 0
TAG, creo que ayuda

NOTA:

Creo que este dato que omiti es importante:

Cuando sumo las variables, les coloco un tag html:

$todas = "<LI>$a<LI>$b<LI>$c<LI>$d<LI>$e<LI>$f<LI>$g<LI>$h" ;

Asi, cuando las imprimo, me sale "la pepita! de las listas", (Menos con Netscape).

...Pero mis visitas son de IE.

Por eso fue que me vi obigado a omitir las funciones que tu ya sabes.

Creo que sin ese <LI>, o "Factor común entre las cadenitas de $total", no se podria, verdad?.

Salu2 LeonardoP

Última edición por RAZACALA; 02/09/2003 a las 15:24
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:58.