Foros del Web » Programando para Internet » PHP »

swith CASE en php

Estas en el tema de swith CASE en php en el foro de PHP en Foros del Web. Hola me podrian explicar como funciona el CASE en php, tengo una pagina de un buscador en dicha pagina tengo 5 campos, cualquier campo que ...
  #1 (permalink)  
Antiguo 15/07/2003, 10:33
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 14 años, 5 meses
Puntos: 0
swith CASE en php

Hola me podrian explicar como funciona el CASE en php, tengo una pagina de un buscador en dicha pagina tengo 5 campos, cualquier campo que se llene va directamente a la consulta SQL y devuelve algun valor, solo que yo quiero enseñar al usuario cuantos registros encontre de tal input text del buscador, por decir encontre 5 registros de nombre.


por los momentos lo estoy haciendo asi:

if (@$HTTP_POST_VARS["fecha"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$fecha</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["corte"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$corte</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["numero"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$numero</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["magistrado"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$magistrado</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["tema"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$tema</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["caso"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$caso</b></font>: " . $num_total_registros . "<br>";
}


pero creo que el CASE reemplaza todo ese codigo o estoy mal ???




gracias!
  #2 (permalink)  
Antiguo 15/07/2003, 11:20
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Estas en lo correcto, solo que no entiendo que es lo que estas evaluando???

esta es la estructura del case (switch en PHP):


switch ($variable){

case "tal":
sentencias
break;

case "otro":
sentencias
break;

}
__________________
Manoloweb
  #3 (permalink)  
Antiguo 15/07/2003, 12:09
Avatar de temaqueja  
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 15 años, 4 meses
Puntos: 4
Cita:
Mensaje Original por Manoloweb
Estas en lo correcto, solo que no entiendo que es lo que estas evaluando???

esta es la estructura del case (switch en PHP):


switch ($variable){

case "tal":
sentencias
break;

case "otro":
sentencias
break;

otherwise: /* si no se cumple ninguna */
sentencias

}
__________________
_________________________
La computadora nació para resolver problemas que antes no existían
  #4 (permalink)  
Antiguo 15/07/2003, 12:12
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 14 años, 5 meses
Puntos: 0
CASE

ME FUNCIONA PERO NO LOGRO TRAERME EL VALOR DEL FORMULARIO DE BUSQUEDA

/*switch ($result)
{
case "$HTTP_POST_VARS['fecha']":

echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$fecha</b></font>: " . $num_total_registros . "<br>";

break;

case "$HTTP_POST_VARS['corte']":

echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$corte</b></font>: " . $num_total_registros . "<br>";

break;

}*/


con el codigo anterior me da un error (parse) si le quito el ( $ ) no me funciona, y estoy evaluando una busqueda en una tabla de una base de datos mysql
  #5 (permalink)  
Antiguo 15/07/2003, 12:24
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 16 años
Puntos: 38
Hola andinistas.

Yo creo que tu problema no se resuelve con un switch, ya que este comando ayuda cuando tienes que hacer distintas acciones por distintos valores de UNA SOLA variable. En tu caso tienes muchas variables que de evaluar afirmativamente, ejecutas acciones.

Saludos.
  #6 (permalink)  
Antiguo 15/07/2003, 12:33
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 14 años, 5 meses
Puntos: 0
de nuevo yo :)

entonces hago bien si ejecuto este codigo??:

// estos son los campos de search.php y que se ejecutan aqui en resultsjp.php
$fecha = @$HTTP_POST_VARS["fecha"];
$corte = @$HTTP_POST_VARS["corte"];
$numero = @$HTTP_POST_VARS["numero"];
$magistrado = @$HTTP_POST_VARS["magistrado"];
$tema = @$HTTP_POST_VARS["tema"];
$caso = @$HTTP_POST_VARS["caso"];

//ejecuto sentencia SQL con limite de registros
$result = mysql_query("SELECT id, fecha, corte, numero, magistrado, tema, caso FROM jurisprudencia WHERE fecha LIKE '%$fecha%' AND corte LIKE '%$corte%' AND numero LIKE '%$numero%' AND magistrado LIKE '%$magistrado%' AND tema LIKE '%$tema%' AND caso LIKE '%$caso%'");


//aqui es cuando muestro los resultados por decir si es del campo fecha entonces diga:

if (@$HTTP_POST_VARS["fecha"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$fecha</b></font>: " . $num_total_registros . "<br>";
}


//si es del campo corte entonces diga:

if (@$HTTP_POST_VARS["corte"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$corte</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["numero"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$numero</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["magistrado"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$magistrado</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["tema"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$tema</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["caso"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$caso</b></font>: " . $num_total_registros . "<br>";
}


bueno y asi con todos, yo pensaba que con Siwth CASE se podria resumir tanto codigo pero bueno no se puede porque estoy evaluando muchos parametros.


pero de todas formas esta bien como procedo a mostrar los resultados??


Saludos y Gracias!
  #7 (permalink)  
Antiguo 15/07/2003, 12:42
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Temaqueja...

...
otherwise: /* si no se cumple ninguna */
sentencias
}

Debe ser

...
default: /* si no se cumple ninguna */
sentencias
}




Andinistas...

Que tipo de campo es en el que recoges esas variables???

Puedo adivinar que es un campo tipo radio, en el que el usuario selecciona UNA opcion, es correcto?

En ese caso, llama a todos tus botones así:

<input type="radio" name="opcion" value="corte">
<input type="radio" name="opcion" value="numero">
<input type="radio" name="opcion" value="magistrado">
<input type="radio" name="opcion" value="etc">

Y luego haces tu switch así...
Código PHP:
switch ($_POST["opcion"]){

case 
"corte":
echo 
"<b>Número de registros encontrados con el criterio: <font color='red'><b>$corte</b></font>: " $num_total_registros "<br>";
break;

case 
"numero":
echo 
"<b>Número de registros encontrados con el criterio: <font color='red'><b>$numero</b></font>: " $num_total_registros "<br>";
break;

//etc...

__________________
Manoloweb
  #8 (permalink)  
Antiguo 15/07/2003, 12:46
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 14 años, 5 meses
Puntos: 0
hola

hola gracias por responder..

no es tipo radio es un input, bueno varios...

<FORM NAME="searchjp" METHOD="POST" ACTION="resultadosjp.php" name="searchjp">

<INPUT TYPE="text" NAME="corte">
<INPUT TYPE="text" NAME="numero">
<INPUT TYPE="text" NAME="magistrado">
<INPUT TYPE="text" NAME="caso">
<INPUT TYPE="text" NAME="tema">

</form>


y luego en resultadosjp.php hago lo siguiente:

$fecha = @$HTTP_POST_VARS["fecha"];
$corte = @$HTTP_POST_VARS["corte"];
$numero = @$HTTP_POST_VARS["numero"];
$magistrado = @$HTTP_POST_VARS["magistrado"];
$tema = @$HTTP_POST_VARS["tema"];
$caso = @$HTTP_POST_VARS["caso"];

//ejecuto sentencia SQL con limite de registros
$result = mysql_query("SELECT id, fecha, corte, numero, magistrado, tema, caso FROM jurisprudencia WHERE fecha LIKE '%$fecha%' AND corte LIKE '%$corte%' AND numero LIKE '%$numero%' AND magistrado LIKE '%$magistrado%' AND tema LIKE '%$tema%' AND caso LIKE '%$caso%' LIMIT $inicio,$TM");

//ejecuto sentencia SQL para saber el total de registros
$totalregistros = mysql_query("SELECT id, fecha, corte, numero, magistrado, tema, caso FROM jurisprudencia WHERE fecha LIKE '%$fecha%' AND corte LIKE '%$corte%' AND numero LIKE '%$numero%' AND magistrado LIKE '%$magistrado%' AND tema LIKE '%$tema%' AND caso LIKE '%$caso%'");

//miro a ver el número total de campos que hay en la tabla con esa búsqueda con la ayuda de la sentencia sql
$num_total_registros = mysql_num_rows($totalregistros);

//calculo el total de páginas
$total_paginas = ceil($num_total_registros / $TM);

if (@$HTTP_POST_VARS["fecha"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$fecha</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["corte"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$corte</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["numero"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$numero</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["magistrado"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$magistrado</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["tema"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$tema</b></font>: " . $num_total_registros . "<br>";
}

if (@$HTTP_POST_VARS["caso"])
{
echo "<b>Número de registros encontrados con el criterio: <font color='red'><b>$caso</b></font>: " . $num_total_registros . "<br>";
}

//pongo el número de registros total, el tamaño de página y la página que se muestra
echo "<b>Número de registros encontrados: </b>" . $num_total_registros . "<br>";
echo "<b>Se muestran páginas de</b> " . $TM . "<b> registros</b><br>";
echo "<b>Mostrando la página:</b> " . $pagina . " de " . $total_paginas . "<br>";
echo "<b>Página Número: </b>" .$pagina. "</spam><p>";


//muestro resultados tabla orientacion
echo "<center><table border = '0' width='500' align=center cellpadding='3' cellspacing='0' class='tableInformacion'> \n";
echo "<tr> \n";
if ($iPermiso > 3) {
echo "<td width='100' class='textwhite'><center><b>Editar</b></center></td> \n";
}
echo "<td width='50' class='textwhite'><b>Mirar</b></td> \n";
echo "<td width='100' class='tableMenu'>Fecha (a/m/d)</td> \n";
echo "<td width='140' class='tableMenu'>Corte</td> \n";
echo "<td width='100' class='tableMenu'>Número</td> \n";
echo "<td class='tableMenu'>Magistrado</td> \n";
echo "<td class='tableMenu'>Tema</td> \n";
echo "<td class='tableMenu'>Caso</td> \n";

while ($row = mysql_fetch_row($result))
{
// le coloco colores a las cedlas
if ($alternate == "1") {
$color = "tableData2";
$alternate = "2";
}
else {
$color = "tableData";
$alternate = "1";
}

//muestro links
echo "<tr class='$color'>";
if ($iPermiso > 3) {
echo "<td width='100'><center><a href='editardocjp.php?id=$row[0]'>Editar</a></center></td> \n";
}
echo "<td width='10'><a href='verdocjp.php?id=$row[0]'>Mirar</a></td> \n";
echo "<td width='100'>$row[1]</td> \n";
echo "<td width='140'>$row[2]</td> \n";
echo "<td width='100'>$row[3]</td> \n";
echo "<td>$row[4]</td> \n";
echo "<td>$row[5]</td> \n";
echo "<td>$row[6]</td> \n";
echo "</tr> \n";
}
echo "</table></center> \n";
echo "<p> \n";



//muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas > 1){
for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el índice de la página actual, no coloco enlace
//echo $pagina . " ";

echo "Página: " . $i . " - ";
else
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
echo "<a href='resultadosjp.php?pagina=" . $i . "'>Página: " . $i . "</a> - ";
}
}

else
{
echo "<span class=textorojo><center>No hay más registros por paginar</center><br><p><br><p> ";
}
echo "<p> \n";

?>
</body>
</td>
</tr>
</table>

<?php
include("$ruta./include/pie.inc");
?>
  #9 (permalink)  
Antiguo 15/07/2003, 15:01
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

No entiendo muy bien tu script. Realizas la consulta combinando todas las variables, les haya dado valor o no, y luego ¿imprimes el mismo (parecido) mensaje, cambiando solo el termino de busqueda, si se le dio valor? Puede que te salga mas de un mensaje, si metes valores a mas de un campo. Para sustituir esos if, puedes usar un array:
Código PHP:
// creamos un array con los nombres de los campos, en el orden que queremos que salgan los mensajes
$parametros_form=array('fecha','corte','numero','magistrado','tema','caso');
// recorremos el array
foreach ($parametros_form as $campo) {
  
// para cada nombre de campo, miramos si existe y mostramos el mensaje
  
if (@$HTTP_POST_VARS[$campo])
  {
    echo 
"<b>Número de registros encontrados con el criterio: <font color='red'><b>".$$campo."</b></font>: " $num_total_registros "<br>";
  } 

El $$campo solo funciona si a las variables las has llamado como al campo, tal como has hecho. Son las variables variables. Si $campo vale 'fecha', $$campo es lo mismo que $fecha. Mas info http://www.php.net/manual/es/languag...s.variable.php

Si en el futuro añades o quitas campos al formulario, modificas el array. Tambien si cambias el orden del array, cambias el orden de los mensajes.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:41.